티스토리 뷰

반응형

블리자드가 서버 악마와 씨름하면서 주말 전에 새로운 디아블로 2 부활 패치 10.15가 출시되었습니다.

어제 암시했듯이 이 패치는 이제 바쁜 기간 동안 로그인 대기열을 추가합니다. 이것은 훌륭한 솔루션은 아니지만 적어도 현재로서는 솔루션입니다. 바라건대, 이것은 몇 주가 지나면서 필요하지 않을 것입니다. 이 문제가 완전히 해결될 때까지 래더 작업이 나타날지 의심됩니다.

일반

  • 트래픽이 많은 기간 동안 로그인 대기열을 구현했습니다. 이 대기열은 게임을 열 때 타이틀 화면 뒤에 나타납니다. 대기열은 트래픽이 많은 시간대에만 나타납니다.
  • 플레이어는 대기열에 있는 번호가 표시됩니다.
  • 플레이어는 대기열을 종료하고 원하는 경우 대기열 프롬프트에서 "탈출"을 눌러 즉시 오프라인으로 플레이할 수 있습니다.
  • 대기열 번호가 높을수록 프롬프트에서 새로 고침되는 번호가 느려집니다. 숫자는 백그라운드에서 계속 새로고침되므로 대기열에서 나가면 트래픽이 많은 시간대에 게임 입장이 더 지연될 수 있으므로 대기열에서 나가지 않는 것이 좋습니다.

콘솔에 동일한 대기열 기능을 구현하는 패치가 다음 주에 있을 것으로 예상됩니다.

이것은 트래픽이 많은 창에서 플레이어가 경험한 로그인 문제 중 일부를 완화할 계획에 관한 어제 게시물에 대한 후속 조치입니다. 

디아블로 2 부활한 서버 문제로 인해 플레이어들은 이번 주를 흥미진진하게 만들었습니다. 1분 동안은 로그인할 수 있지만 다음에는 로그인할 수 없습니다. 당신의 캐릭터가 거기에 있는 순간, 그렇지 않은 순간. 이러한 재미.

어쨌든, 마지막으로, 우리는 무슨 일이 일어나고 있는지에 대한 몇 가지 이상한 진술을 포함하는 일종의 설명을 가지고 있습니다. 예를 들어, Blizzard는 사람들이 2001년에 게임을 "적절하게" 플레이하는 방법에 대한 정보에 액세스할 수 없었지만 이제는 Pindleskin 실행 등을 수행하는 방법을 쉽게 찾을 수 있으므로 서버에 더 큰 부담을 주고 있다고 주장합니다.

개인적인 경험을 통해 팬이 사용할 수 있고 사용하는 정보가 백과사전 수준이라는 것을 알고 있으며 이는 팬이 게임을 최대한 활용하는 데 도움이 되었습니다. 이전 사이트를 포함하여 가이드와 "방법"을 퍼뜨리는 팬 사이트가 적어도 여섯 개 정도 있었습니다. 커뮤니티의 많은 부분이 디아블로 2를 플레이하는 방법을 배웠고 그 지식이 전승되었습니다.

주목해야 할 또 다른 점은 새 게임을 시작하기 위해 얼마나 빨리 다시 연결할 수 있는지에 일시적인 제한이 있다는 것입니다. 이것은 선수들이 얼마나 자주 바알, 핀들스킨 달리기 등을 할 것인지를 과소평가했기 때문입니다. 그것이 대규모로 인기 있는 일이 될 것이라는 것을 어떻게 몰랐습니까?

이유가 무엇이든 문제가 해결되고 있지만 천천히. 주목해야 할 점은 연결이 바쁠 때 대기열 시스템이 추가된다는 것입니다.

힘내세요! 여기 모든 것이 있습니다.

여러분, 안녕하세요.

디아블로 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년에 처음 출시될 때 플레이했고 일부는 모딩 커뮤니티의 일부였습니다. 게임 경험이 개발자로서 뿐만 아니라 플레이어 및 커뮤니티 구성원으로서 기분이 좋을 때까지 계속 작업할 것임을 보장할 수 있습니다.

반응형
댓글