디아2, 서버 관련 공식 입장 :: 외시경실
본문 바로가기
⏱ 이슈/게임

디아2, 서버 관련 공식 입장

by 두용이 2021. 10. 15.
반응형

Diablo II: Resurrected Outages: An explanation, how we’ve been working on it, and how we’re moving forward

 

여러분, 안녕하세요.

 

디아블로 II: 부활 출시 이후로 여러 서버 문제가 발생했으며 이러한 문제의 원인과 해결을 위해 지금까지 취한 조치에 대한 투명성을 제공하고자 했습니다. 또한 앞으로 어떻게 나아가고 있는지에 대한 통찰력을 제공하고자 합니다.

 

tl;dr: 서버 중단은 단일 문제로 인한 것이 아닙니다. 우리는 해결 방법을 완화하고 장기적인 아키텍처 변경을 통해 문제가 발생할 때마다 문제를 해결하고 있습니다. 소수의 플레이어가 캐릭터 진행 손실을 경험했습니다. 앞으로 나아가면 서버 충돌로 인한 손실은 몇 분으로 제한되어야 합니다. 이것은 우리에게 완전한 해결책이 아니며 우리는 이 문제에 대해 계속 노력하고 있습니다. 우리 팀은 Blizzard의 다른 사람들의 도움을 받아 모두에게 기분 좋은 게임 경험을 제공하기 위해 노력하고 있습니다.

 

우리는 여기에서 몇 가지 엔지니어링 세부 사항과 함께 잡초에 대해 약간 알아볼 것이지만 전반적으로 이것이 이러한 중단이 발생한 이유와 각 인스턴스를 해결하기 위해 무엇을 하고 있는지 이해하는 데 도움이 되기를 바랍니다. 전반적인 근본 원인을 조사하고 있습니다. 처음부터 시작합시다.

 

 

서버 문제 :

 

문제에 대해 이야기하기 전에 서버 데이터베이스가 어떻게 작동하는지 간략하게 설명하겠습니다. 첫째, 모든 캐릭터 정보 및 진행 상황에 대한 단일 정보 소스로 존재하는 글로벌 데이터베이스가 있습니다. 상상할 수 있듯이 이는 하나의 데이터베이스에 대한 큰 작업이며 자체적으로 대처할 수 없습니다. 따라서 글로벌 데이터베이스의 부하와 대기 시간을 줄이기 위해 북미, 유럽 및 아시아의 각 지역에는 캐릭터의 정보와 진행 상황도 저장하는 개별 데이터베이스가 있으며 해당 지역의 데이터베이스는 주기적으로 글로벌 데이터베이스에 기록합니다. 게임 내 작업의 대부분은 더 빠르기 때문에 이 지역 데이터베이스에 대해 수행되며, 개별 캐릭터 기록 무결성을 유지하기 위해 캐릭터가 "잠겨" 있습니다. 글로벌 데이터베이스에는 메인이 실패할 경우를 대비한 백업도 있습니다.

 

이를 염두에 두고 무슨 일이 일어나고 있는지 설명하기 위해 10월 9일 토요일부터 지금까지 발생한 가동 중지 시간에 중점을 둘 것입니다.

 

태평양 표준시로 토요일 아침에 갑작스럽고 심각한 트래픽 급증으로 인해 전 세계적으로 정전이 발생했습니다. 이것은 우리 서버가 출시 당시에도 전혀 경험하지 못한 새로운 임계값이었습니다. 이는 게임 생성과 관련된 성능을 향상시키기 위해 전날 출시한 업데이트로 인해 더욱 악화되었습니다. 이 두 가지 요소가 결합되어 글로벌 데이터베이스에 과부하가 걸리고 시간이 초과되었습니다. 우리는 이전에 배포한 금요일 업데이트를 롤백하기로 결정했습니다. 그러면 일요일로 이어지는 서버의 로드가 완화되고 근본 원인을 더 깊이 조사할 수 있는 공간이 제공되기를 바랍니다.

 

그러나 일요일에 우리가 토요일에 한 일이 충분하지 않다는 것이 분명해졌습니다. 트래픽이 훨씬 더 많이 증가하여 또 다른 정전이 발생했습니다. 우리 게임 서버는 데이터베이스와의 연결이 끊긴 것을 관찰하고 즉시 재연결을 반복적으로 시도했습니다. 이는 데이터베이스가 게임 서버의 지속적인 연결 시도 스트림을 처리하는 데 너무 바빠서 우리가 완료한 작업을 따라잡을 시간이 없었음을 의미합니다. 이 시간 동안 데이터베이스 오류 발생 시 정상 상태를 복원하는 데 필요한 데이터베이스 이벤트 로깅의 구성을 개선할 수 있음을 확인하고 이를 완료하고 추가 근본 원인 분석에 착수했습니다.

 

일요일 정전의 양날의 칼은 우리가 토요일에 처리한 문제로 인해 본질적으로 신속하게 복구하는 방법에 대한 플레이북을 만들었다는 것입니다. 어느 것이 좋았습니다.

 

그러나 수십 분 안에 수십만 개의 게임이 있는 최대 플레이어 활동 창에서 너무 빨리 다시 온라인 상태가 되었기 때문에 우리는 다시 넘어졌습니다. 

 

그래서 우리는 백업 글로벌 데이터베이스에 배포한 구성 및 코드 개선 사항을 포함하여 배포해야 할 많은 수정 사항이 있었습니다. 이것은 우리가 글로벌 데이터베이스 사이를 전환한 10월 11일 월요일로 이어집니다. 이로 인해 백업 데이터베이스가 백업 프로세스를 계속 잘못 실행하는 또 다른 중단이 발생했습니다. 이는 서버의 요청을 처리해야 할 때 다른 데이터베이스에서 복사를 시도하는 데 대부분의 시간을 소비했음을 의미합니다. 이 시간 동안 추가 문제를 발견하고 추가 개선을 했습니다. 데이터베이스에서 완전히 제거할 수 있는 사용되지 않는 쿼리를 찾았지만 플레이어가 게임에 참여할 때 자격 확인을 최적화하여 로드를 더욱 완화했습니다. , 그리고 우리가 말하는 동안 테스트에서 성능이 더욱 향상되었습니다.

 

그런 다음 화요일에 한 지역에서만 수십만 명의 플레이어와 함께 또 다른 동시 플레이어 최고치를 기록했습니다. 이로 인해 데이터베이스 성능이 저하되는 또 다른 사건이 발생했으며 그 원인은 현재 데이터베이스 엔지니어가 해결하고 있습니다. 또한 자체 팀이 핵심 서버 문제에 집중하기 때문에 Blizzard 주변의 다른 엔지니어들에게 연락하여 작은 수정 작업을 수행했으며 타사 파트너에게도 도움을 요청했습니다.

 

 

이런 일이 일어나는 이유 :

 

오리지널 게임에 충실하기 위해 많은 레거시 코드를 유지했습니다. 그러나 특히 한 레거시 서비스는 현대적인 플레이어 행동을 따라잡기 위해 고군분투하고 있습니다.

 

원본에서 일부 업그레이드된 이 서비스는 게임 생성/가입, 게임 목록 업데이트/읽기/필터링, 게임 서버 상태 확인, 데이터베이스에서 캐릭터 읽기와 같은 중요한 게임 기능 부분을 처리하여 캐릭터가 무엇이든 참여할 수 있도록 합니다. 그것은 당신이 필터링하는 것입니다. 중요한 것은 이 서비스가 싱글톤이라는 점입니다. 즉, 모든 플레이어가 항상 최신의 정확한 게임 목록을 볼 수 있도록 하나의 인스턴스만 실행할 수 있습니다. 우리는 보다 현대적인 기술에 맞추기 위해 이 서비스를 여러 가지 방법으로 최적화했지만 이전에 언급했듯이 많은 문제는 게임 제작에서 비롯됩니다.

 

우리는 "현대적인 플레이어 행동"을 언급하는 이유는 생각해 볼 흥미로운 지점이기 때문입니다. 2001년에는 인터넷에서 Diablo II를 "올바른" 플레이하는 방법에 대한 콘텐츠가 거의 없었습니다(Baal은 XP용으로 실행되고 Pindleskin/Ancient Sewers용에서는 마법 찾기 등). 그러나 오늘날 새로운 플레이어는 다양한 방법으로 게임을 플레이하는 방법을 가르쳐 줄 수 있는 놀라운 콘텐츠 제작자를 찾을 수 있습니다. 계승. 플레이어가 새로운 서버에서 새로운 캐릭터를 만들고 마법을 찾는 아이템을 얻기 위해 열심히 일하면서 이를 예상했지만 베타 테스트에서 파생된 범위를 크게 과소평가했습니다.

 

또한 전반적으로 글로벌 데이터베이스에 너무 자주 저장하고 있었습니다. 예전처럼 자주 할 필요가 없습니다. 지역 데이터베이스에 저장해야 하며 잠금을 해제해야 할 때만 전역 데이터베이스에 저장해야 합니다. 이는 우리가 마련한 완화 조치 중 하나입니다. 지금 우리는 이 작업을 완전히 수행하는 방법을 변경하는 코드를 작성하고 있으므로 전역 데이터베이스에 저장하는 일은 거의 없을 것입니다. 그러면 해당 서버의 로드가 크게 줄어들지만 빌드하는 데 시간이 다소 걸리는 아키텍처 재설계입니다. 테스트한 다음 구현합니다.

 

진행 손실에 대한 참고 사항 :

 

일부 플레이어가 경험한 진행 손실은 지역 및 글로벌 데이터베이스 모두에서 캐릭터 잠금을 수행하는 방식 때문입니다. 지역에 할당되면(예: 미국 지역에서 플레이할 때) 글로벌 데이터베이스에서 캐릭터를 잠급니다. , 당신의 캐릭터는 미국 지역에 잠겨 있으며 대부분의 행동은 미국 지역의 데이터베이스에서 해결됩니다.)

 

문제는 서버가 다운되는 동안 데이터베이스가 다운될 때 많은 문자가 지역 데이터베이스에 갇혀 있었고 글로벌 데이터베이스로 이동할 방법이 없었다는 것입니다. 그 당시 우리는 두 가지 옵션이 있다고 믿었습니다. 글로벌 데이터베이스에 저장되지 않은 변경 사항으로 모든 사람의 잠금을 해제하여 글로벌 데이터베이스에서 발생할 덮어쓰기로 인해 일부 진행 상황을 잃거나 불확실한 금액으로 게임을 완전히 중단하는 것입니다. 시간을 절약하고 스크립트를 실행하여 지역 데이터를 전역 데이터베이스에 씁니다.

 

당시 우리는 전자에 따라 조치를 취했습니다. 데이터를 복원하기 위해 오랜 시간 동안 게임을 중단하는 것보다 사람들이 플레이할 수 있도록 게임을 유지하는 것이 더 중요하다고 느꼈습니다. 중요한 진행 상황이나 귀중한 아이템을 잃어버리신 플레이어 여러분께 진심으로 죄송합니다. 플레이어로서 우리는 롤백의 고통을 알고 깊이 느낍니다.

 

앞으로 우리는 심각한 데이터 손실로 이어지지 않는 캐릭터를 복원할 수 있는 방법이 있다고 생각합니다. 서버 충돌 시 손실이 몇 분 이내로 제한되어야 합니다.

 

이것은 더 좋지만 여전히 우리 눈에는 충분하지 않습니다.

 

 

이에 대해 우리가 하는 일 :

 

속도 제한: 게임 생성 및 참여와 관련된 데이터베이스 작업 수를 제한하고 있으며 많은 분들이 이를 느끼고 있다는 것을 알고 있습니다. 예를 들어, Pindleskin 달리기를 하는 사람들의 경우 게임에 들락날락하며 20초 이내에 새로운 게임을 만들 수 있습니다. 이 경우 한 지점에서 요금이 제한됩니다. 이 문제가 발생하면 오류 메시지에 게임 서버와 통신하는 데 문제가 있다는 메시지가 표시됩니다. 이는 이 특정 인스턴스에서 게임 서버가 다운되었다는 표시가 아니며, 일시적으로 데이터베이스의 로드를 줄이기 위해 속도가 제한되었음을 의미합니다. 게임을 계속 실행하는 데 관심이 있습니다. 우리는 이것이 현재로서는 단지 완화일 뿐이라고 확신할 수 있습니다. 우리는 이것을 장기적인 수정으로 보지 않습니다.

 

로그인 대기열 생성:지난 주말은 같은 문제가 반복되는 문제가 아니라 일련의 문제였습니다. 활성화된 플레이어 기반, 여러 플랫폼의 추가 및 확장과 관련된 기타 문제로 인해 계속해서 작은 문제가 발생할 수 있습니다. 이를 신속하게 진단하고 해결하려면 동시에 로그인하는 많은 수의 플레이어인 "군집"이 중지되도록 해야 합니다. 이 문제를 해결하기 위해 World of Warcraft에서 경험한 것처럼 로그인 대기열에서 작업하는 사람들이 있습니다. 이렇게 하면 인구를 당시의 안전한 수준으로 유지할 수 있으므로 시스템이 긴장하고 있는 부분을 모니터링하고 게임이 완전히 중단되기 전에 해결할 수 있습니다. 균주를 수정할 때마다 인구 한도를 늘릴 수 있습니다. 이 로그인 대기열은 이미 백엔드에서 부분적으로 구현되었습니다(지금은 중요한 기능을 더 작은 서비스로 나누기: 이 작업은 하루 이내에 처리할 수 있는 작업에 대해 부분적으로 진행 중이며(일부는 이미 이번 주에 완료됨) 새로운 마이크로서비스(예: 플레이어에게 게임 목록을 제공하는 역할만 담당하는 GameList 서비스). 중요한 기능이 분해되면 게임 관리 서비스를 확장하여 부하를 줄일 수 있습니다.

 

D2R 팀뿐만 아니라 블리자드 전체에서 실시간으로 사고를 관리하고 문제를 진단하고 수정 사항을 구현하기 위해 엄청나게 열심히 일하는 사람들이 있습니다. 이 게임은 우리 모두에게 많은 의미가 있습니다. 팀의 우리 중 많은 사람들이 평생 D2 플레이어입니다. 우리는 2001년에 처음 출시될 때 플레이했고 일부는 모딩 커뮤니티의 일부였습니다. 게임 경험이 개발자로서 뿐만 아니라 플레이어 및 커뮤니티 구성원으로서 기분이 좋을 때까지 계속 작업할 것임을 보장할 수 있습니다.

 

디아블로 II: 부활 포럼에 계속해서 피드백을 제출해 주세요 . 83, 버그 보고서 포럼에 버그를 보고하세요. 23, 문제 해결 지원을 받으려면 기술 지원 포럼을 방문하세요. 14. 모든 채널에서 지속적으로 소통해 주셔서 감사합니다. 이러한 문제를 해결하는 과정에서 매우 중요합니다.

 

디아블로 커뮤니티 팀은 포럼을 통해 진행 상황을 계속 업데이트할 것입니다.

 

영문 원본

 

https://us.forums.blizzard.com/en/d2r/t/diablo-ii-resurrected-outages-an-explanation-how-we%E2%80%99ve-been-working-on-it-and-how-we%E2%80%99re-moving-forward/28164

 

Diablo II: Resurrected Outages: An explanation, how we’ve been working on it, and how we’re moving forward

Hello, everyone. Since the launch of Diablo II: Resurrected, we have been experiencing multiple server issues, and we wanted to provide some transparency around what is causing these issues and the steps we have taken so far to address them. We also want t

us.forums.blizzard.com

 

요약

1. 베타때 겪지못한 예상치 못한 접속자 트래픽 증가로 블랙아웃(섭다)가 발생함

 

2. 그래서 글로벌 데이터 베이스<-지역 데이터베이스간의 지연으로 캐릭이 롤백되는 현상이 일어남(서버 과부화가 걸렸을땐 업로드가 안되고 결국 글로벌 백업을 가져오니까)

 

3. 레거시 디아2의 멀티플레이 구조(게임 생성/가입, 게임 목록 업데이트/읽기/필터링, 게임 서버 상태 확인, 데이터베이스에서 캐릭터 읽기)가 레저렉션을 제작하면서 업그레이드 되었지만 베타때 예상했던 범위를 넘어섰다.

 

4. 그래서 빠르게 방 재생성(핀들런 같은 짧은 게임)에 임시로 제한을 두고 대기열 추가를 한다. 그외 근본적인 해결책을 위해 방안을 모색중

 

+

 

진짜로 디아2 방생성 방식인 핀들런이 서버에 가하는 부담이 큰건지 개발자 공식 입장으로 핀들런을 예시로 들면서 방생성 대기열을 넣었다고 함

 

하지만 그걸로 부족할 만큼 예상보다 동접자가 많아서 데이터베이스가 과부하된 듯

 

화요일에 특정 국가에서만 몇십만명의 최고 동접자를 갱신하면서 서버가 뻗어버렸다는 내용이 있는데,

 

아시아 서버 저녁 시간대에 터진거라 아마 한국을 말하는거 아니냐는 말도 있네요

 

반응형

댓글


TOP

TEL. 02.1234.5678 / 경기 성남시 분당구 판교역로