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