Я создаю сайт, на котором игроки могут играть в поворотную игру для виртуальных кредитов (например, сайт покера, но разные). В настройке я придумал:Совет по масштабируемости для большого игрового сайта
- Один сервер данных, который содержит все учетные записи игроков со связанными данными (база данных + служба). База данных и API могут быть разделены на два сервера, если это помогает.
- Один или несколько веб-серверов, обслуживающих веб-сайт, при необходимости подключающихся к серверу данных.
- Один лобби-сервер, на котором игроки могут находить друг друга и настраивать игры (возможно несколько, но менее удобно)
- Несколько игровых серверов, на которых выполняется игра (все правила и т. Д. Находятся на сервере, клиент просто пульт дистанционного управления и просмотрщик), с одним балансировщиком нагрузки.
- Игра клиента
Клиент будет с Flash, веб-сервер будет использовать PHP. Остальное - все Java.
Коммуникации
- Игрок входит в на сайте. Веб-сервер отправляет имя пользователя/пароль на сервер данных, который создает ключ сеанса (например, файл cookie).
- Игрок запускает клиент. Клиент подключается к лобби-серверу, передавая ключ сеанса. Лобби-сервер проверяет этот ключ с сервером данных
- Как только создается лобби и начинается игра, сервер лобби выбирает игровой сервер из балансировщика нагрузки и настраивает игру на этом игровом сервере.
- Лобби-сервер говорит клиентам подключиться к игровому серверу и играть в игру.
- Когда игра закончена, игровой сервер позволяет вестибюль. Лобби-сервер проверяет счет и обновляет кредиты на сервере данных.
Протоколы:
- Java для Java: RMI
- PHP или флэш в Java: Пользовательские двоичный протокол через гнездо. Этот протокол поддерживает закрытие сокета в режиме ожидания при сохранении виртуального соединения и его возобновлении.
Если у клиента есть свои пожелания, сайт должен будет поддерживать тысячи одновременных игроков. С этой информацией вы видите какие-то узкие места в моей настройке? Я лично немного беспокоюсь о существовании только одного сервера данных, но я не уверен, как его разделить. Другие замечания по масштабируемости (или другие) также приветствуются.
@ the closer: Это не относится к серверу, поскольку он не является чем-то фиксированным просто добавлением серверов, но должен быть разработан на этапе разработки. –
Ваш фактический вопрос, по-видимому, связан с масштабированием базы данных и обнаружением узких мест там. На самом деле это больше вопрос DBA, чем вопрос разработчика. Разработчики могли бы помочь улучшить дизайн таблицы, но вы не размещали никаких подробностей о своих таблицах. Также сильно зависит от того, что на самом деле представляет собой неназванная база данных. - Лоббирование, необходимое для успешного завершения игры, кажется мне проблемой дизайна. Я был бы довольно PO'd, если бы вы потеряли мои результаты в игре, потому что лобби-сервер немного снизился, когда закончилась игра. – Affe
@Affe: Я мог бы изменить это, с сервером лобби, сообщающим серверу данных, что игра была запущена, и игровой сервер, сообщающий серверу данных, когда он закончился, без участия лобби. –