2018년 2월 3~4일, 포트나이트 배틀로얄은 동시 접속자 최고치 340만 명을 기록했다. 불과 몇 달 전 최고치였던 6만 명에서 급증한 수치였고, 그 주말은 연이은 장애로 얼룩졌다. 2018년 2월 8일 에픽이 직접 공개한 포스트모템에 따르면 부분적 및 전면적 서비스 중단이 섞인 서로 다른 여섯 건의 장애가 발생했다.

가장 심각했던 곳은 MCP 프로필 서비스로, 초당 31만 8천 건의 읽기와 13만 2천 건의 쓰기를 처리하는 아홉 개의 MongoDB 샤드로 뒷받침되고 있었다. 매치메이킹 샤드가 쓰기 작업을 대기시키기 시작하면서 단일 작업 지연이 4만 밀리초를 넘어섰고 모든 MCP 스레드가 막혔다. 이 샤드는 스스로 복구되지 않아 운영팀이 한 시간에 여러 차례 수동으로 프라이머리 페일오버를 수행해야 했다. 두 번째 문제는 패키징 변경으로 서비스의 스레드 수가 의도된 안전 값보다 낮게 조용히 제한되어 있던 것이었다. 이를 되돌린 최근의 '수정'은 프로덕션 피크 시점에만 데이터베이스 연결 풀을 고갈시켜 결국 롤백해야 했다.

일요일에는 계정 서비스가 UTC 18시 30분부터 20시 20분까지 중단됐다. Memcached의 불안정으로 Nginx가 100밀리초 타임아웃에서 블로킹되다가 워커 스레드가 모두 소진됐고, 헬스 체크가 마비되면서 로드 밸런서가 모든 노드를 제외시켰다. 전 세계적으로 로그인이 차단된 것이다. 그날 밤에는 긴급 블루/그린 페일오버 도중 XMPP 소셜 계층이 실패했다. 재접속이 한꺼번에 몰리면서 프렌즈 서비스 로드 밸런서가 압도됐고, 해당 서브넷에 사용 가능한 IP가 모두 소진되어 대체 인스턴스를 프로비저닝할 수 없었다. 플레이어들은 접속은 됐지만 모든 친구가 오프라인으로 표시되는 '어두운 방' 상태를 겪었다.

클라우드의 한계가 상황을 더 악화시켰다. 수천 개의 c4.8xlarge 인스턴스가 리전의 인스턴스 한도에 근접했고, 사용 가능한 IP가 251개뿐인 /24 서브넷이 고갈되면서 로드 밸런서 복구가 지연됐다. 에픽은 MongoDB 전문가들을 현장에 파견했고, 메시징 스택과 MCP의 재설계를 약속했으며, 포스트모템을 채용 공고로 마무리했다. 소수의 베테랑 온라인 개발자 팀이 세계 최대의 PC/콘솔 게임을 접속자 수가 그들을 앞지르기 전까지 운영해 온 것이었다.

2018년 2월 3~4일 이틀에 걸쳐 부분적 및 전면적 서비스 중단이 여섯 건 발생했다. 로그인이 차단되고 매치메이킹이 멈추고 친구가 오프라인으로 표시됐으며, 수동 페일오버가 매시간 실행됐다.

매치메이킹 상태가 하나의 공유 샤드에 저장되어 있었다. 해당 샤드의 쓰기 작업이 대기하기 시작하자 모든 MCP 작업이 막혔고, 유일한 복구 방법은 수동 프라이머리 페일오버뿐이었다.

패키징 변경으로 MCP 서비스 스레드 수가 안전 기본값보다 낮게 제한되어 있었다. 그 수정 자체가 프로덕션 피크 시점에만 데이터베이스 연결 풀을 고갈시켜 롤백해야 했다.

모든 계정 서비스 트래픽이 Nginx 프록시를 거쳤는데, 워커들이 100밀리초 Memcached 타임아웃에서 블로킹됐다. 포화된 워커들이 헬스 체크에 실패하자 로드 밸런서가 모든 노드를 제외시켰다.

프렌즈 서비스의 페일오버 경로에는 /24 서브넷(주소 251개)의 사용 가능한 IP가 필요했는데, 재접속이 한꺼번에 몰리면서 장애 도중에 모두 소진됐다.

XMPP는 하드 노드 한도가 있는 풀메시 클러스터(노드 101개, 클러스터 링크만으로 노드당 약 1,000개 소켓)로 운영되어 소셜 계층의 용량을 단순히 늘릴 수 없었다.

성장은 채용으로 해결할 수 있는 속도보다 빠르게 아키텍처를 앞지른다. 50배 규모에서는 검증되지 않은 스레드 설정, IP 251개짜리 서브넷, 과열된 샤드 하나가 각각 장애가 된다.

포스트모템의 수정 목록은 재설계 프로그램처럼 읽힌다. 현장 전문가와 함께 MongoDB 쓰기 큐의 근본 원인을 규명하고, 매치메이킹 세션을 인메모리 저장소로 옮기고, 검증 외 트래픽을 Nginx/Memcached 조합을 우회하도록 라우팅하고, 서브넷 용량을 확충하고, 핵심 서비스를 여러 리전과 클라우드에 분산해 장애 영향 범위를 줄이는 것이다. 에픽은 게임이 계속 성장하는 동안 포트나이트 서비스 업데이트를 계속 공개했고, 이 포스트모템은 바이럴 성장이 잠재된 모든 잘못된 설정을 어떻게 장애로 바꾸는지 보여주는 표준 인용 사례가 되었다.

근거 확인하기

출처

  1. Postmortem of Service Outage at 3.4M CCU Epic Games (Fortnite news) · epicgames.com ·
  2. Postmortem of Service Outage at 3.4M CCU (archived copy) Internet Archive Wayback Machine · web.archive.org ·
  3. Postmortem of Service Outage at 3.4M Concurrent Users (discussion) Hacker News · news.ycombinator.com