역대 최대 규모의 모바일 게임이 어떻게 수백만 명의 사용자를 지원하기 위해 포켓몬 트레이너 클럽을 확장할 수 있었을까요?
카우치베이스 및 NoSQL
며칠 만에 일일 활성 사용자 수 기준으로 Pokémon GO가 트위터를 넘어섰습니다. Apple에 따르면 1는 뉴질랜드, 호주, 미국에서 처음 출시되었을 때 첫 주 만에 다운로드 수 기록을 세웠습니다. 현재는 5억 회 이상 다운로드되었습니다.
왜 NoSQL인가요?
입장 포인트 중 하나인 Pokémon 트레이너 클럽 시스템은 기존 프로필 관리 서비스를 강화하여 사용자가 Pokémon GO뿐만 아니라 Pokémon 트레이닝 카드 게임 온라인, Play! 포켓몬 등에도 로그인할 수 있습니다.
관계형 데이터베이스 위에 구축된 기존 프로필 관리 서비스는 기존 사용자를 지원할 수 있었지만, Pokémon GO 출시 후 예상되는 수백만 명의 신규 사용자를 지원할 수 있을 정도로 확장할 수 없었습니다. 포켓몬 컴퍼니 인터내셔널은 확장이 가능한 데이터베이스가 필요했습니다.
Couchbase Server를 선택했습니다. 엔터프라이즈 에디션.
Pokémon GO는 뉴질랜드, 호주, 미국, 일본, 독일, 홍콩 등 여러 국가에서 한꺼번에 출시되었습니다.
이러한 전략을 통해 The Pokémon Company International은 필요에 따라 점진적으로, 필요에 따라 인프라의 성장을 관리하여 일부 사람들이 새 계정을 만들기 위해 기다려야 하는 동안에도 모든 사람들이 게임을 즐길 수 있도록 할 수 있었습니다.
왜 카우치베이스 서버인가?
SQL
Couchbase Server 4.0은 JSON 문서를 위한 SQL 기반 쿼리 언어인 N1QL을 도입하여 관계형 데이터베이스에서 쉽게 전환할 수 있도록 했습니다. 포켓몬 트레이너 클럽 시스템은 관계형 데이터베이스 위에 구축된 기존 프로필 관리 서비스에서 데이터를 모델링하고 쿼리하는 방식의 변경을 최소화하기 위해 3개월 이내에 N1QL을 사용하여 개발되었습니다.
N1QL을 사용하면 개발자는 관계형 데이터베이스에서 훨씬 빠르게 전환할 수 있으며, 적절한 시기에 쿼리에는 N1QL을, 읽기 및 쓰기에는 키-값/서브도큐먼트 API를 활용하여 데이터 모델링 및 액세스 방식을 최적화할 수 있습니다.
확장성
카우치베이스 서버 4.0은 관리자가 개별 서비스(데이터, 쿼리, 인덱스)를 분리하고 확장할 수 있는 다차원 확장(MDS)을 도입했습니다. N1QL을 사용하여 개발된 Pokémon Trainer Club 시스템은 쿼리 집약적인 워크로드를 생성하게 됩니다. Pokémon GO 출시 이후, 관리자는 전체 데이터베이스를 확장하는 대신 쿼리 및 인덱스 서비스를 (두 번 이상) 확장할 수 있었기 때문에 상당한 오버헤드가 발생하는 프로세스인 데이터 재조정이나 '데이터 이동'을 할 필요가 없었습니다.
성능
카우치베이스 서버 4.5는 인메모리 스킵 목록과 영구 스냅샷을 활용하여 메모리에 최적화된 인덱스를 도입하여 중요 경로에서 디스크 IO를 제거하고 인덱스 업데이트와 인덱스 스캔의 지연 시간을 줄였습니다. 포켓몬 트레이너 클럽 시스템은 쿼리 집약적(많은 인덱스 스캔)일 뿐만 아니라 쓰기 집약적(많은 인덱스 업데이트)이며, 미국부터 일본까지 모든 사람이 계정을 생성하고 있습니다.
메모리 최적화 인덱스와 읽기-쓰기 일관성(RYOW) 옵션을 활용함으로써 인덱스가 더 빠르게 업데이트되고 쿼리가 일관된 결과를 반환했습니다.
지원 및 전문 서비스
카우치베이스는 성공적인 출시를 위해 지원 엔지니어가 낮과 저녁 늦게, 주말까지 24시간 연중무휴로 근무하며 Pokémon GO의 성공을 위해 최선을 다했습니다. 성능 문제가 발견되면 지원팀과 엔지니어링 팀은 지체 없이 문제를 해결했으며, 한 번은 며칠 만에 유지보수 패치를 제공하기도 했습니다. 또한 전문 서비스 및 솔루션 엔지니어가 지원팀에 합류하여 애플리케이션 아키텍처와 코드부터 배포 및 확장에 이르기까지 모든 것을 지원했습니다. 팀의 노력이었습니다.