:: 원문(링크) ::
블리자드가 디아블로 II: 레저렉션의 최근 일어난 서버 문제와 이가 일어나는 이유 및 이를 해결하고자 어떻게 노력하고 있는지 등을 설명하는 공식 블루포스트를 작성했습니다. 현재
※블리자드 공식 입장문
안녕하세요, 여러분.
디아블로 II: 레저렉션이 출시된 이래로 수많은 서버 관련 문제가 있었으며, 왜 이런 문제가 일어나고 있고 이를 해결하기 위해 저희가 지금까지 어떤 조치를 취했는지에 대해 여러분께 투명하게 말씀드리고자 합니다. 저희는 또한 앞으로 어떤 대책을 강구할 것인지에 대해서도 말씀드리고자 합니다.
※요약
하나의 문제 때문에 일어난 사건은 아니며, 각 문제를 해결하고 장기적 구조를 변경하며 이를 처리해 나가고 있습니다. 일부 플레이어들은 캐릭터의 진행 손실 역시 경험했으나, 앞으로는 서버가 종료되어도 캐릭터의 진행 상황이 몇 분 이상으로 손실되는 일은 없을 것입니다. 이는 완전한 해결책은 아니며, 계속해서 문제를 해결하고자 노력하고 있습니다. 저희 개발진은 블리자드의 다른 팀과 협업하여 모두가 만족할 수 있는 게임 경험을 제공해 드리고자 노력 중입니다.
저희는 좀 더 자세한 세부 사항을 말씀드리고자 하며, 이를 통해 왜 서버 문제가 발생하고 있고, 상황마다 저희가 어떤 행동을 취하고 있는지에 대해 조금이나마 더 이해가 되셨으면 합니다. 또한, 저희는 이런 문제의 근본적인 원인 역시 찾고자 노력하고 있습니다. 그럼, 처음부터 시작해 볼까요.
■ 서버의 문제점
문제점에 대해 이야기하기 전에, 저희의 서버 데이터베이스가 어떻게 작동하는지 간략하게 설명해 드리도록 하겠습니다. 먼저, 모든 캐릭터 정보와 진행 상황이 단일 소스로 존재하는 글로벌 데이터베이스가 있습니다. 이는 당연하게도 하나의 데이터베이스가 처리하기에는 너무나도 큰 작업이며, 혼자서는 처리가 불가능합니다. 이에 따라 글로벌 데이터베이스의 일감과 대기 시간을 줄이기 위해 북미, 유럽 및 아시아의 각 지역에는 캐릭터의 정보와 진행 상황을 저장하는 개별 데이터베이스가 따로 존재하며, 주기적으로 글로벌 데이터베이스에 정보를 제공합니다. 게임 내 행동의 대부분은 훨씬 빠른 지역별 데이터베이스를 통해 수행되며, 각 캐릭터는 개별 기록의 무결성을 유지하기 위해 지역 데이터베이스에 "잠겨져" 있는 상태입니다. 글로벌 데이터베이스에는 이가 실패할 경우를 대비한 백업 파일 역시 존재합니다.
이를 염두하신 채로, 10월 10일부터 지금까지 있었던 서버 문제를 중점으로 무슨 일이 일어나고 있었는지를 설명하도록 하겠습니다.
태평양 표준시 기준 토요일 아침 (한국 표준시 10일 밤), 저희는 갑작스런 트래픽 급증으로 인한 전세계적 정전을 겪었습니다. 이는 저희 서버가 출시 당시에도 경험하지 못했던 임계값이었으며, 이는 저희가 게임 생성과 성능 향상을 위해 그 전날에 출시했던 업데이트와 맞물려 글로벌 데이터베이스에 과부하를 일으켰습니다. 저희는 근본 원인을 좀 더 깊이 조사할 수 있는 시간을 마련하고 일요일로 이어지는 서버의 짐 역시 조금이나마 덜기 위해 금요일에 출시했던 업데이트를 초기화하기로 결정했습니다.
하지만, 일요일 (한국 표준시 11일)이 되자 전날의 조치가 충분하지 않다는 것이 분명해졌습니다, 트래픽은 더욱 증가했고, 또 다른 정전이 일어나버리고 만 것이죠. 게임 서버는 데이터베이스와의 연결이 끊긴 것을 확인하고 재연결을 반복적으로 시도했으며, 결국 데이터베이스는 게임 서버의 지속적인 연결 시도를 처리하느라 저희가 했던 작업을 따라잡지 못하고 말았습니다. 그래도 이 동안 저희는 데잍터베이스 오류 발생 시 정상 상태 복원에 필요할 데이터베이스 이벤트 로깅 구성을 개선할 수 있음을 깨닫고, 이를 완료한 후 추가적으로 근본적인 원인을 조사하기로 했습니다.
일요일 정전이 양날의 검이었던 이유는 토요일에 있었던 문제 덕에 이를 신속하게 복구하는 방법을 인지하고 있었지만, 동시에 플레이어들이 한창 게임에 접속하려 하는 시간대에 서버가 너무 빠르게 돌아왔기에 단기간에 엄청난 양의 게임이 만들어졌고, 결국 서버가 다시 버티지 못했다는 점 때문이었습니다.
그 이후 저희는 백업 글로벌 데이터베이스에 구성 및 코드 개선 사항을 포함한 다양한 수정 사항을 적용했고, 그 다음날인 월요일 (한국 12일)에는 두 글로벌 데이터베이스를 전환하기로 결정합니다. 이는 백업 데이터베이스가 계속해서 백업 프로세스를 잘못 실행하여, 서버의 요청을 처리하는 대신 다른 데이터베이스의 정보를 복사하느라 시간을 소비하는 결과를 낳아, 결국 서버가 또 다시 정전되는 사태로 이어졌습니다. 이 동안 저희는 더 많은 문제를 확인하고 이를 개선했으며, 데이터베이스에서 더 이상 사용되지 않는 쿼리를 삭제하고, 플레이어의 게임 참여 자격 확인을 최적화하는 방식으로 데이터베이스에 가해지는 짐을 덜었습니다. 저희는 지금도 계속해서 성능 개선점을 실험하고 있으며, 그 다음날인 화요일에는 이런 문제가 일어나지 않은 만큼 월요일에 보았던 데이터베이스 재접속에 관련된 문제를 해결했다고 생각합니다.
그리고 이제 화요일 (한국 표준시 13일), 저희는 한 지역에서만 수십만 명의 플레이어가 접속하는 또 다른 동시 접속 최고치를 기록했습니다. 이는 데이터베이스의 성능이 저하되는 또 다른 문제로 이어졌지만, 현재 데이터베이스 엔지니어들이 이 문제의 이유를 알아내고자 노력 중에 있습니다. 또한 저희는 핵심 서버 문제를 해결하는 동안 블리자드의 다른 개발진과 제 3자 파트너들에게도 연락을 취해, 좀 더 작은 문제들을 해결해 달라고 부탁했습니다.
■ 이런 문제가 일어나는 이유
옛 게임을 재현하기 위해 유지했던 옛 코드들 중 하나가 특히 현 플레이어들의 행동을 따라잡지 못하고 있습니다.
비록 원본에서 약간 업데이트되긴 했지만, 이 서비스는 게임 생성/참여, 게임 목록 업데이트/확인/분류, 게임 서버 상태 확인 및 데이터베이스에서 캐릭터를 확인하여 플레이어들이 분류하는 대로 접속할 수 있게 해 주는 것 같은 중요한 게임 기능을 담당하고 있습니다. 가장 중요한 점은 바로 이가 싱글톤 패턴이기에, 모든 플레이어가 항상 가장 최신의 게임 목록을 확인할 수 있도록 단 하나의 인스턴스만을 실행할 수 있다는 점인데요. 저희는 이를 보다 현대적인 기술에 맞추고자 다양한 최적화를 시도했지만, 위에서도 언급했던 대부분의 문제는 게임 생성에서 비롯됩니다.
"현 플레이어들의 행동"은 무척이나 흥미로운 부분입니다. 2001년에는 디아블로 II를 "제대로" 플레이하기 위한 다양한 정보가 지금처럼 존재하지 않았습니다. 하지만 오늘날의 플레이어들은 인터넷에서 게임을 다양하게 즐길 수 있는 온갖 방법을 찾아볼 수 있으며, 이중 대부분은 빠르게 게임을 생성하고, 로딩한 후 게임을 종료하는 방식을 사용합니다. 비록 플레이어들이 마법 아이템을 위해 신규 서버에 신규 캐릭터를 생성하는 등의 일이 일어날 것이라 예상을 하긴 했지만, 베타 테스트 때 이 기준치를 크게 과소평가했던 것이 문제였습니다.
또한, 저희는 전반적으로 글로벌 데이터베이스에 너무 자주 저장을 하고 있다는 점을 깨달았습니다. 이렇게 자주 할 필요가 없으며, 플레이어 캐릭터 정보를 지역 데이터베이스에 저장하고 캐릭터를 "해금"할 때에만 글로벌 데이터베이스에 저장해도 되는 것을 말이죠. 저희는 이런 조치를 이미 적용했으며, 서버의 짐을 크게 덜 수 있게끔 글로벌 데이터베이스에 저장하는 빈도를 아주 낮게 만드는 새로운 코드를 작성 중에 있습니다만, 이는 제작하고, 실험하고 적용하기까지 조금의 시간이 걸릴 것입니다.
■ 진행 상황 손실(롤백)에 대해
캐릭터의 진행 상황이 손실되는 문제의 경우, 이는 지역별 및 글로벌 데이터베이스에서 캐릭터 잠금이 수행되는 방식 때문입니다. 예를 들어 한국 플레이어의 경우 여러분의 캐릭터는 한국 지역에 잠겨져 있으며, 대부분의 행동은 한국 지역의 데이터베이스에서 해결됩니다.
문제는 서버가 다운되었을 때, 일부 캐릭터가 지역 데이터베이스에 갇힌 상태로 이를 글로벌 데이터베이스로 옮길 방법이 없었다는 점이었습니다. 저희가 할 수 있는 행동은 두 가지였습니다: 변경점이 적용되지 않은 채로 글로벌 데이터베이스 내 모든 캐릭터의 잠금을 해제하여 글로벌 데이터베이스의 덮어쓰기로 일부 진행 상황 손실을 일으키느냐, 지역 데이터를 글로벌 데이터베이스에 적용할 수 있는 스크립트를 작성하여 실행할 때까지 알 수 없는 기간 동안 게임을 접속 불능으로 만들어 버리느냐였죠.
그 때 저희는 전자를 택했습니다. 정보를 구하기 위해 오랜 시간 접속을 불가능케 하느니, 차라리 서버를 좀 더 빠르게 활성화하여 사람들이 게임을 즐길 수 있게끔 말이죠. 중요한 진행 상황이나 좋은 아이템을 잃은 플레이어 여러분께 깊이 사과드립니다. 저희 또한 게임을 즐기는 플레이어로서, 롤백이 얼마나 고통스러운지를 잘 알고 있습니다.
이제는 큰 정보 손실로 이어지지 않고 캐릭터를 복원할 수 있는 방법을 찾았다고 생각하며, 서버 문제가 있더라도 진행 상황 손실이 아예 없거나 기껏해야 몇 분으로 제한되리라 예상합니다. 물론 이는 좋은 개선점이나, 아직 충분한 개선점은 아니라는 것 역시 잘 알고 있습니다.
■ 현재 취하고 있는 조치 및 추후 개선점
- 속도 제한: 저희는 게임 생성 및 참여와 관련된 데이터베이스 작업 수를 제한하고 있으며, 많은 플레이어들이 이를 느끼고 계신다는 점 역시 인지하고 있습니다. 만약 핀들스킨 런을 진행하고 계시다면, 20초 안에 게임에 들어갔다 나가서 새로운 게임을 만들고 계시겠죠. 이런 경우, 어느 순간부터 속도 제한이 적용될 것입니다. 이런 상황이 발생하면, 게임 서버와 통신하는 데 문제가 생겼다는 메세지가 표시될 것입니다. 이는 이 특정 상황에서 게임 서버가 다운되었다는 뜻이 아니며, 그저 데이터베이스의 짐을 덜기 위해 임시로 속도가 제한되었음을 의미합니다. 이는 임시 조치임을 확실히 말씀드리고자 하며, 장기적으로 적용할 생각은 없습니다.
- 접속 대기열 생성: 지난 주말에는 같은 문제의 반복이 아닌, 일련의 문제들이 계속해서 일어났었습니다. 새로이 커진 플레이어들과 다양한 플랫폼 지원에 스케일링과 관련된 기타 문제로 인해, 계속해서 작은 문제들이 발생하는 것도 무리는 아닙니다. 이런 문제를 신속하게 진단하고 해결하려면, 많은 수의 플레이어들이 동시에 접속하는, 소위 "군집"을 막아야만 합니다. 이를 위해 저희 개발진은 월드 오브 워크래프트와 비슷한 접속 대기열을 작업 중에 있으며, 이를 통해 인구수를 안전한 수준으로 유지하면 시스템에서 문제되는 부분을 모니터링하고, 서버가 완전히 다운되기 전에 이를 해결할 수 있게 됩니다. 이런 문제를 해결할 때마다 저희는 최대 인구수를 늘릴 수 있게 될 것이고 말이죠. 이런 접속 대기열은 이미 백엔드에서 부분적으로 구현되었으며 (지금은 클라이언트 인증이 실패한 것처럼 보일 것입니다), 며칠 뒤에 PC에, 그리고 이어 콘솔에도 적용될 예정입니다.
- 중요 기능을 다수의 소규모 서비스로 분해: 이는 하루 이내에 처리할 수 있는 작업에 한해 이미 부분적으로 진행 중이며 (일부는 이미 완료된 상태입니다), 신규 소규모 서비스 (플레이어에게 게임 목록을 제공하는 역할만을 하는 GameList 서비스 등) 같은 더 큰 프로젝트 역시 계획 중에 있습니다. 중요 기능이 다양한 소규모 서비스로 분해되고 나면, 저희는 게임 관리 서비스를 확장하여 서버의 짐을 덜 예정입니다.
디아블로 2 레저렉션 팀 뿐만이 아니라, 블리자드 전체에서 이런 문제를 실시간으로 관리하고, 문제를 진단하고 수정 사항을 적용하고자 많은 이들이 많은 노력을 쏟고 있습니다. 개발진의 많은 이들은 2001년에 게임이 처음 출시될 때부터 디아블로 II를 즐겨왔고, 일부는 그 때 게임 모드 커뮤니티의 일원이기도 했습니다. 이 게임은 저희 모두에게 큰 의미를 갖고 있으며, 개발진으로서 뿐만 아니라 플레이어이자 커뮤니티의 일원으로서 여러분에게 기분 좋은 게임 경험을 제공할 때까지 계속해서 노력하리라 말씀드릴 수 있습니다.
계속해서 여러분의 피드백을 디아블로 II: 레저렉션 토론장에, 버그는 버그 리포트 토론장에 남겨주시기 바라며, 문제 해결이 필요하시다면 저희의 기술 지원 토론장을 방문해 주시기 바랍니다. 계속해서 저희와 대화를 해 주셔서 감사드리며, 이는 저희가 이런 문제를 해결하는 데 없어선 안 될 중요한 정보입니다.
토론장을 통해 새로운 내용을 또 업데이트해 드리도록 하겠습니다.
-디아블로 II: 레저렉션 개발 팀
디아블로 II: 레저렉션 공식 홈페이지에서 더 많은 정보를 확인해주시기 바라며, 디아블로2 : 레저렉션에 대한 자세한 정보들은 디아블로2 : 레저렉션 종합 정보에서 확인하실 수 있습니다.
(IP보기클릭)222.233.***.***
기존 시스템 고집하면서 개선/ 변경없이 출시하더니, 큰 폭탄을 쳐맞은거네..
(IP보기클릭)183.102.***.***
10시만되면 터지게 타이머 달아놨냐???
(IP보기클릭)118.47.***.***
싹 잘려나가고 업무인수인계 안해주고 갔나봐요
(IP보기클릭)221.167.***.***
쳐맞은건 우리죠. 겜못하는건 우리라..ㅡ.ㅡ
(IP보기클릭)121.147.***.***
요즘엔 스트리밍으로 게임하는 시대인데 말많네
(IP보기클릭)222.233.***.***
기존 시스템 고집하면서 개선/ 변경없이 출시하더니, 큰 폭탄을 쳐맞은거네..
(IP보기클릭)221.167.***.***
Ktmr
쳐맞은건 우리죠. 겜못하는건 우리라..ㅡ.ㅡ | 21.10.15 22:37 | |
(IP보기클릭)121.147.***.***
요즘엔 스트리밍으로 게임하는 시대인데 말많네
(IP보기클릭)221.154.***.***
(IP보기클릭)183.102.***.***
10시만되면 터지게 타이머 달아놨냐???
(IP보기클릭)211.36.***.***
(IP보기클릭)223.62.***.***
(IP보기클릭)118.235.***.***
(IP보기클릭)220.70.***.***
트위치 디2 같은거 틀어놓고 거기 입장하면 따라 들어가시면 편합니다... | 21.10.15 16:34 | |
(IP보기클릭)1.228.***.***
대기열 표시해주는 건 추가 예정인가봐요 | 21.10.15 18:37 | |
(IP보기클릭)175.197.***.***
(IP보기클릭)118.47.***.***
리누스 토발즈
싹 잘려나가고 업무인수인계 안해주고 갔나봐요 | 21.10.15 16:29 | |
(IP보기클릭)119.202.***.***
오히려 옛날에는 그거 막으려고 잦은 재접속시 렐름다운으로 일정시간 강제로 접속을 막아버리는 기능도 있었는데 그런 안전장치를 제거하고 출시했다는 것 | 21.10.15 16:59 | |
(IP보기클릭)39.117.***.***
그 당시의 코드를.... 지금 시점에서 문제가 없는지를 검증하지 않고..... Ctrl+C,V를 했다는거네요.... 개발자가 지양해야 하는건데 전체적인 코드 검수를 안했네요.... | 21.10.15 22:11 | |
(IP보기클릭)223.38.***.***
(IP보기클릭)121.170.***.***
(IP보기클릭)1.215.***.***
(IP보기클릭)112.171.***.***
(IP보기클릭)125.176.***.***
(IP보기클릭)125.133.***.***
(IP보기클릭)121.133.***.***
(IP보기클릭)121.140.***.***
(IP보기클릭)121.152.***.***
(IP보기클릭)118.32.***.***
(IP보기클릭)211.231.***.***
(IP보기클릭)118.235.***.***
(IP보기클릭)61.85.***.***