나만의 작은 도서관

하스스톤 서버 아키텍처를 추측해보자. 본문

카테고리 없음

하스스톤 서버 아키텍처를 추측해보자.

pledge24 2024. 8. 6. 21:32

개요

블리자드는 특이하게 배틀넷이라는 것을 통해 게임 중이여도 다른 블리자드 게임을 하는 유저한테 메시지를 게임 내에서 받을 수 있다. 이를 보고 흥미를 느껴 이번에 블리자드 게임 중 하나인 하스스톤으로 배틀넷과 엮인 서버 아키텍처를 추측해보기로 했다.

 

추측해 본 서버 아키텍처 구상도

  1. 클라이언트
    • 클라이언트는 게임을 하고자 하는 유저 컴퓨터에 저장된 게임 프로그램이다. 이 클라이언트와 서버가 통신하며 게임 플레이, 인증, 메시징을 할 수 있다. 
  2. 로그인 서버
    • 사용자 인증을 담당하는 서버이다. 하스스톤을 하려고 해도 우선적으로 배틀넷에 접속해야하기 때문에 하스스톤이 아닌 배틀넷에서 로그인 서버를 가진다.
  3. 로비 서버
    • 로그인 서버로부터 인증을 받았다면, 로비 서버로 가서 하스스톤에 접속할 수 있다. 하스스톤에 접속하기 전, GameDBGW를 통해 GameDB에 저장된 유저 정보를 가져온다.
  4. 메신저 서버
    • 해당 구조에서 가장 특이한 부분이다. 위 구조에서와 같이 메신저는 하스스톤이 아닌 배틀넷에서 관리한다. 이렇게 배틀넷에서 메시지를 관리함으로써 하스스톤이 아닌 다른 블리자들 게임들을 하고 있는 유저들에게서 메세지를 받아올 수 있다. 게다가 하스스톤은 상대와의 1대1 채팅을 제외한 다른 방식의 채팅은 존재하지 않으므로 오로지 배틀넷에서 보내는 메신저만으로도 현재 하스스톤에 있는 모든 커뮤니케이션 기능을 갖출 수 있다.
  5. GameDBGW (게임 DB 게이트웨이)
    • 게임 데이터베이스와의 인터페이스 역할을 한다. 해당 유저에 대한 게임 데이터를 저장하고 있는 GameDB에 접근하기 위해 사용되며 게임 상태, 유저 정보 등을 읽거나 쓰게된다. 예를 들어, 카드팩을 사 카드를 까는 일명 "카드깡"을 하게된다면 카드깡의 결과를 GameDBGW를 통해 GameDB에 접근하여 내 유저 데이터에 쓰게된다.
  6. GameDB (게임 데이터베이스)
    • 게임과 관련된 모든 데이터를 저장한다. 내가 가지고 있는 카드, 업적 내용, 랭크 등수 등 내 유저 정보가 전부 담겨있게 된다.
  7. MessengerDBGW (메신저 DB 게이트웨이)
    • 메신저 데이터베이스와의 인터페이스 역할을 한다. MessengerDB와 통신하며 오고 간 채팅과 관련된 기록을 읽거나 쓰게된다. 
  8. MessengerDB (메신저 데이터베이스)
    • 오고 간 채팅과 관련된 기록을 저장하고 있다. 이는 배틀넷에서 저장되어 있으며 해당 유저가 각 블리자드 게임에서 친구들과 DM을 보낸 모든 채팅 기록들이 이곳에 들어있다. 하지만 오버워치처럼 하나의 게임 세션에서 발생하는 여러 채팅 기록들은 이곳이 아닌 오버워치 내에서 관리를 할 것으로 추측된다.
  9. 호스트브릿지
    • 호스트브릿지는 로비 서버와 호스트 매니저 간의 중간 역할을 수행한다. 게임 세션의 상태와 관련된 정보를 관리하고, 여러 호스트 매니저 간의 통신을 중계한다. 예를 들어 하스스톤에 들어가 랭크 게임인 정규전을 돌리는 상황이라면, 로비 서버에 있는 유저가 게임 대기 큐에 들어가게 되고, 대기 큐에서 상대와 매칭 돼 게임을 시작하게 되면 호스트 브릿지로 넘어가게 된다. 이후, 호스트 브릿지는 호스트 매니저에게 두 유저의 정보를 넘긴다. 이 후, 해당 게임 세션에 대한 호스트 매니저와 소통하며 게임 세션의 상태를 모니터링하며 상태 관리를 하게된다.
  10. 호스트 매니저
    • 호스트 매니저는 실제 게임 서버인 호스트 서버의 배치를 관리하고, 각 게임 세션을 할당하게 된다. 하스스톤은 stateful이 아닌, stateless이기 때문에 로드밸런싱만 잘해주면 큰 문제는 발생하지 않을 것으로 본다.
  11. 호스트 서버
    • 호스트 서버는 실제로 게임 세션을 호스팅하는 서버이다. 다시 한 번 언급하지만 하스스톤은 stateless이기 때문에 데디케이트 서버같은 방식을 사용할 필요가 전혀 없다. 따라서 하나의 서버에 여러 게임 세션이 있어도 무방하기 때문에 하나의 서버가 여러 게임 세션을 가지게 된다.
  12. 호스트 클라이언트
    • 호스트 클라이언트는 호스트 서버에 연결되는 일명 유저의 컴퓨터를 의미한다. 호스트 서버와 데이터를 주고받으며 게임을 진행하게 된다.

 

    •