렐름 기반 MMO 게임 서버 아키텍쳐
mmo에서 여러 렐름 서버를 구성하여 평행세계처럼 구성한다.
온라인 게임의 경우 스테이스풀한 상태가 필수적이다.
수평확장 서버를 사용하며 던전이나 레이드의 경우에는 추가로 데디케이트 서버를 열어 다른 요소로부터 독립시킬수도 있다.
매치기반 실시간 전투 게임 아키텍쳐
스테이트풀한 실시간 전투를 위한 서버로 데디케이트 서버를 사용한다.
소프트웨어 전개를 하고 유지보수하며 조율하는것은 어렵기에 여러 도구를 사용한다.
구글에의해 만들어진 애플리케이션의 디플로이 스케일링을 제공하는 관리 시스템인 쿠버네티스(오픈소스)를 사용해 전개하고, ai 서비스인 orchestrate(www.IBM.com) 를 활용해 반복적인 작업 및 노드 작업을 한다.
로드벨런서로 k8s에서 Nginx ingress을 사용해 구성했다.
이 게임의 클라이언트는 유니티 기반으로 C#으로 작성되었다.
이 게임의 서버는 authoritative 서버이다, 각 클라이언트의 입력은 서버에서 검증하고 처리하며 클라이언트에서는 서버검증을 하고 예측을 한다.추가로 각각의 게임은 데디케이트 서버로 실행되며 게임의 데이터와 입력을 모두 서버에서 처리함으로 반드시 stateful한 서버이어야 한다. 이 게임은 빠른 패이스의 멀티플레이 게임임으로 UDP 프로토콜을 사용해 입력을 처리해야 하며 게임의 이벤트 전송을 위한 TCP 역시도 열어놓아야 한다.
매치메이킹은 플레이어의 지연과 랭크를 기반으로 매칭한다. 이 플레이어 큐를 위해 레디스를 활용했으며 레디스는 여러 인스턴스에 대한 atomic lock 컨셉을 가지고 있어서 적합하다.
데이터베이스에는 mysql을 사용했다.
유저 아이템 로그 등을 저장하기위한 관계형 데이터베이스로 활용했다.
유저가 직접 서버를 맡는 방식의 협동/경쟁 게임
스팀에서 여러 게임을 친구와 하게 되면 자주 보게되는 유저가 직접 서버를 여는 방식이다.
게임 세션 관리 서버에서는 개인 데디케이트 서버에서 보낸 서버를 기반으로 로비 리스트, 핑(지연) 을 클라이언트에 전달한다.
게임세션 관리 서버는 데디케이트 서버 검증서버에 대한 로드벨런서를 겸함으로 이중화할 필요가 있다.
데디케이트서버 검증 서버에서는 개인 데디케이트 서버의 파일이 허용된 모드툴을 제외한 변형이 있는지 확인하고 변형이 있을경우 해당 서버 IP를 일정 시간동안 블랙리스트에 등록한다. (약 24시간)
데디케이트서버 검증 서버는 많은 양의 데이터를 주고받을 필요가 있음으로 가용성을 위해 반드시 수평확장이 무조건 필요하다.
로그인 / 인증 서버에서는 클라이언트가 올바른 사용자인지 판단하고 스킨, 인게임 재화 등 유저 정보를 전송한다.
한 게임이 종료된 이후 얻는 재화 등을 검증하고(죽인 몬스터, 시간, 웨이브 등을 통해 검증) 데이터를 갱신한다.