Я немного переосмыслил масштабные многопользовательские игры в эпоху приложений Facebook и облачных вычислений.
Предположим, я должен был что-то построить поверх существующих открытых протоколов, и я хочу обслуживать 1 000 000 одновременных игроков, просто чтобы решить проблему.
Предположим, у каждого игрока есть очередь входящих сообщений (для чата и еще много чего), и в среднем еще одна очередь входящих сообщений (гильдии, зоны, экземпляры, аукцион, ...), поэтому у нас есть 2 000 000 очередей. Игрок будет слушать 1-10 очередей одновременно. Каждая очередь будет иметь в среднем, может быть, 1 сообщение в секунду, но у определенных очередей будет гораздо более высокая скорость и большее число слушателей (скажем, очередь «расположения объекта» для экземпляра уровня). Давайте предположим, что время ожидания системной очереди составляет не более 100 миллисекунд, что нормально для игр с умеренным действием (но не для таких игр, как Quake или Unreal Tournament).
Из других систем я знаю, что обслуживать 10 000 пользователей в одном блоке 1U или блейд-модуле - разумное ожидание (при условии, что ничего более дорогого не происходит, как физическое моделирование или еще много чего).
Итак, с помощью кластерной системы с перекрестными кластерами, где клиенты подключаются к шлюзам подключения, которые, в свою очередь, подключаются к серверам очередей сообщений, мы получаем 10000 пользователей на шлюз с 100 компьютерами шлюзов и 20 000 очередей сообщений на сервер очередей с 100 очередями. машины. Опять же, просто для общего обзора. Количество соединений на каждой машине MQ будет крошечным: около 100, чтобы общаться с каждым из шлюзов. Количество соединений на шлюзах будет намного выше: 10 100 для клиентов + соединения со всеми серверами очереди. (Вдобавок к этому, добавьте несколько соединений для серверов симуляции игрового мира или еще чего-нибудь, но сейчас я пытаюсь сохранить это отдельно)
Если бы я не хотел создавать это с нуля, мне пришлось бы использовать существующую инфраструктуру обмена сообщениями и / или организации очередей. Я могу найти два открытых протокола AMQP и XMPP. Предполагаемое использование XMPP немного больше похоже на то, что понадобится этой игровой системе, но накладные расходы весьма заметны (XML, подробные данные о присутствии, а также различные другие каналы, которые должны быть построены сверху). Фактическая модель данных AMQP ближе к тому, что я описал выше, но все пользователи кажутся крупными корпорациями корпоративного типа, и рабочие нагрузки, по-видимому, связаны с рабочим процессом, а не с обновлением игры в реальном времени.
Есть ли у кого-нибудь дневной опыт использования этих технологий или их реализаций, которым вы можете поделиться?