이제 클라이언트 1~10은 모두 배틀 서버에 들어간 상태가 됩니다. 이제 그들은 게임을 플레이하면 됩니다. 그러나 여전히 잠재적인 문제가 있습니다. 로비 서버 개수가 엄청나게 많은 경우, 예를 들어 로비 서버당 5000명이 접속해 있고 이러한 로비 서버가 1000대 있다고 합시다. 이때 플레이어당 게임 시작/취소 버튼을 누르는 횟수가 평균 0.1회/초입니다.
이 상황에서 평균적으로 로비 서버 한 대는 메시지를 초당 500번 보내야 합니다. 그런데 받아야 할 상대는 자기를 제외하고 999대 있습니다. 메시지를 대략 초당 50만 번 송신해야 하는 셈입니다. 이는 받는 입장에서도 피곤한 일입니다. 로비 서버 각각은 나머지 다른 로비 서버 999대에서 메시지를 초당 500번 수신합니다. 이 또한 대략 50만 번 정도 됩니다.
이 정도의 서버 간 통신량이 발생하는 게임이면 이미 ‘초대박’ 게임입니다. 그러나 이는 상당한 부하입니다. 대박이 난 게임에서 로비 서버 과부하로 서비스 장애가 발생한다면 그야말로 ‘대재앙’입니다. 이 문제를 해결하기 위해 앞서 살펴보았던 데이터 응집력을 다시 다룹시다.
매치메이킹 대기 중인 플레이어 목록 중에서 응집력이 강한 것과 낮은 것을 구별해 봅시다. 실력이 비슷한 플레이어끼리 묶으면 그들끼리는 높은 응집력을 지닙니다. 실력 차이가 크게 나는 플레이어 데이터 간 응집력은 낮으므로 그들끼리 매칭할 일은 별로 없습니다. 바로 여기서 답을 찾을 수 있습니다. 각 로비 서버는 서로 다른 범위의 실력을 가진 플레이어들을 받아들이면 됩니다.
▲ 그림 10-30 플레이어의 실력 점수에 따라 서버 분산