Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Warning

이 아티클은 대용량 웹 서비스개발을 위한 표준적인 해결방법을 잘 정리한 문서는 아니며

특수한 게임서비스의 플랫폼 변화과정에서 개인이 진행한 대용량 웹서비스를 위한 아케텍쳐 설계를

포함한 구현과정과 로드테스트에 대응한 경험에 대한 기술입니다.


일반적인 웹서비스는 아니며, 국내 단일 서비스에 비해 글로벌 웹서비스는 더 많은 문제를 해결해야하며

대규모 처리를위해 고려해야 했던 특징은 다음과 같습니다.

  • 글로벌 트래픽이 높았던 합법운영 겜블러 게임 서비스 ( cereus poker network / bodog / bovada ) -다중언어,인터넷품질이 각각 다른 지역대응
  • Display 에서 1의 의미는 실제 1$ 이며, 게임액션중 이 금액의 전이가 발생합니다. 이 액션은 사용자당 분당 10회 이상이 발생할수 있습니다. - 단순하게 1일 1구매를 하는 패턴의 일반 예약시스템과 금액 트랜잭션의 규모와 방식이 다릅니다.
  • 토너먼트를 포함하여 수천개의 다양한 게임테이블이 존재하며 랭킹,테이블당 이용여부및 플레이어수등 모든것은 3초이내에 변경사항을 실시간 반영이되어야합니다반영을 하여야합니다. -클릭액션이 상대편에게 전달되는 실시간 처리기능처리기능을 포함하여 동시 5천명이상의 토너먼트 기능을 실시간으로 운영한다란것은 10년전에 있었던 기능이며 현재 경험있는 온라인서비스에서도 구현하기 어려운 기능중에 하나입니다.
  • 모든 관리자모드에서 변경사항은 실시간접속중인 모든 사용자에게 정확하게 전달되어야함 -로그인 API를 포함하여 DB암호변경이 실시간 가능했으며 바꾸는것만으로 신규적용이 되고 실시간 리로그인이되었음
  • 업데이트시 무중단 서버기능이 반영되어있습니다. 사용자는 게임을 계속 진행중이지만, 서버가 업데이트를 하더라도 연속된 게임진행이가능합니다. -복잡한 서비스를 무중단으로 운영해야함
  • 로그인은 접속제한 체크및, 다중기기이용체크를 포함하여 블락된 사용자의 모든 장치를 막아야하는 기능이 포함되어 있습니다. - 복잡한 로그인 기능

...

기존 실시간 처리되는 저수준 패킷들을 모두 Rest화를 합니다. 기존 비동기 처리를 응답을 기다려야하는 Rest와 성능을 유지하면서 

설계를 해야할지가 고민이며 웹프레임워크의 튜닝요소를 깊게 살펴보는것에서부터 시작합니다.

이러한 API는 DB설계에 맞추어 이루어지는것이 아닙니다. 우리가 원하는 스펙을 API를 통해 구체적으로 명시화하고

DB는 단지 그 과정에서 저장해야할것을 저장하는 Persitence의 역활만 하면되었기때문입니다.

또한 데이터를 먼저 정의한후 어플리케이션을 설계하려고하면, 구조적인 불일치뿐만아니라

게임웹서비스는 아무것도 못하고 망할 가능성이 높으며 실제로 그러했습니다.

한가지 특징을 살펴보면, 비 연결 웹 세션을 어떻게 최소한으로 유지 할까란 고민으로 KeepAlive를 설계하고 실제 DB호출에 발생하는

비용을 90%이상줄였으며 API설계시 고려 했었다란 점입니다. 

URL : https://www.playframework.com/documentation/2.1.0/ThreadPools

...