Facebook 응용 프로그램 및 클라우드 컴퓨팅 시대에 대규모 멀티 플레이어 게임에 대해 다시 생각해 보겠습니다.대기 시간이 짧은 대규모 메시지 대기열
기존의 개방형 프로토콜을 기반으로 무언가를 구축하고 있다고 가정 해 봅시다. 문제의 범위를 정하기 위해 1,000,000 명의 동시 플레이어를 지원하고 싶습니다.
각 플레이어가 들어오는 메시지 대기열 (채팅 및 기타), 그리고 평균적으로 수신 대기열 (길드, 존, 인스턴스, 경매 ...)이 하나 더있어 2,000,000 개의 대기열이 있다고 가정합니다. 플레이어는 한 번에 1-10 개의 대기열을 듣습니다. 각 큐에는 평균 1 초당 평균 1 개의 메시지가 있지만 특정 큐에는 훨씬 더 높은 속도와 더 많은 수의 수신기가 있습니다 (예 : 수준 인스턴스의 "엔터티 위치"큐). 시스템 대기 시간이 100 밀리 초를 넘지 않는다고 가정 해 봅시다. 이는 약간의 행동 지향적 인 게임 (Quake 또는 Unreal Tournament와 같은 게임이 아님)에서도 괜찮습니다.
다른 시스템에서는 단일 1U 또는 블레이드 상자에서 10,000 명의 사용자에게 서비스를 제공하는 것이 합리적입니다 (물리 시뮬레이션 또는 기타 등등과 같은 비싼 작업이 없다고 가정).
따라서 클라이언트가 연결 게이트웨이에 연결하고 클라이언트가 메시지 대기열 서버에 연결되는 크로스바 클러스터 시스템을 사용하면 게이트웨이 컴퓨터 100 대를 사용하는 게이트웨이 당 10,000 명의 사용자를 얻을 수 있으며 대기열 서버 당 20,000 개의 메시지 대기열이 100 대기열 머신. 다시 말하지만, 일반적인 범위 지정을 위해서입니다. 각 MQ 시스템의 연결 수는 각 게이트웨이와 통신하기 위해 약 100 개 정도로 작습니다. 게이트웨이의 연결 수는 클라이언트의 + 모든 대기열 서 v에 대한 연결에 대해 10,100 높습니다. (이 외에도 게임 월드 시뮬레이션 서버 또는 기타 등등에 대한 몇 가지 연결을 추가하십시오.하지만 지금은 별도로 유지하려고합니다.)
처음부터이 빌드를 원하지 않는다면 존재하는 일부 메시징 및/또는 큐 인프라를 사용하십시오. 내가 찾을 수있는 두 개의 공개 프로토콜은 AMQP 및 XMPP입니다. XMPP의 의도 된 사용은이 게임 시스템이 필요로하는 것과 조금 비슷하지만 오버 헤드는 상당히 눈에 is니다 (XML과 자세한 현재 상태 데이터 및 위에 빌드해야하는 다양한 다른 채널). AMQP의 실제 데이터 모델은 위에서 설명한 것과 비슷하지만 모든 사용자는 대기업 유형의 기업처럼 보이며 작업 부하는 실시간 게임 업데이트와 관련이 없으며 워크 플로와 관련이있는 것으로 보입니다.
누구나 공유 할 수있는 이러한 기술 또는 구현과 관련하여 주간 경험이 있습니까?
나는 우리가 무엇을했는지 요약하고 싶습니다. Rabbit, Qpid, ZeroMQ 및 다른 사람들은 모두 비즈니스에 익숙하고 대기 시간이 짧은 디자인 선택이 적었고 클라이언트를 신뢰하거나 조인/리프/큐 작성/삭제의 높은 비율을 지원하지 않아야했습니다. 비슷한. XMPP는 첫 번째 물리적 상자에서 잘 연합되지 않습니다. JMS는 토끼와 친구들보다 훨씬 나쁩니다. Redis Pub/Sub는 재미 있지만 다시 연합/클러스터되지 않습니다. 우리는 Erlang/OTP (Rabbit과 ejabberd에 사용 된 동일한 언어) 위에 자신의 글을 쓰고 결국 저수준 IDL로 Google 프로토콜 버퍼를 사용했습니다. –
공유 해 주셔서 감사합니다. "XMPP는 첫 번째 물리적 상자에서 잘 연합되지 않습니다"라는 의미는 무엇입니까? – alex
나는 "좋은/과거/첫 번째 물리적 상자를 연합하지 않는다"는 의미입니다. XMPP는 프로토콜의 잘못된 선택이기 때문에 하드웨어를 추가하는 것은 확장에별로 도움이되지 않습니다. –