Архитектура сервера для масштабируемой игры Facebook

Несколько друзей и я написали игру для Facebook, не особо задумываясь о фактической архитектуре игры — и представьте наше удивление, когда мы достигли более 300 000 уникальных игроков в месяц и когда наши серверы расплавились.

Сейчас мы работаем над перепроектированием всей серверной части игры, чтобы сделать ее более масштабируемой и способной поддерживать сотни тысяч, если не миллионы пользователей.

В настоящее время я новичок во всей концепции масштабирования, но из того, что я более или менее понял, нам нужно следующее: 1. Балансировщик нагрузки 2. Веб-сервер на 20 000 ~ одновременных пользователей (мы связались со сторонним разработчиком Comet которые утверждают, что они могут поддерживать до 20 000 одновременных подключений на узел) 3. Кэширующий кластер 4. Кластер базы данных

Очевидно, все это очень абстрактно, но я что-то упустил? Если мы разрабатываем это в .NET, может ли кто-нибудь порекомендовать хорошую технологию кластерного кэш-сервера?

Имейте в виду, что:

  1. Мы стремимся охватить миллионы игроков
  2. Мы стремимся охватить 10/100 тысяч одновременных пользователей
  3. Нам нужно хранить как можно больше данных в кеше и каждый раз сбрасывать их в БД.
  4. У нас есть какие-то взаимодействия между игроками (получение обновлений результатов игроков и т. д.), и нам нужен централизованный или реплицированный кеш для работы (в основном это означает, что нам нужны данные кеша, к которым обращаются все веб-серверы, чтобы они были полностью синхронизированы).

person Ron Rejwan    schedule 03.02.2011    source источник


Ответы (1)


Как насчет развертывания в облаке Azure? Если верить тому, что они говорят, масштабируемость больше не будет вашей заботой.

Вместо того, чтобы создавать кластер БД, как насчет разделения игроков на разные «серверы», «миры» или как бы вы ни называли это в своей игре. Я не знаю, о каком типе игры вы говорите, но большинство браузерных игр, в которые я играю, делают это, чтобы справиться с нагрузкой.

person CodeZombie    schedule 03.02.2011
comment
Хорошо, это вариант, но позволяет ли облако Azure использовать следующее? * Кластеры базы данных * Кластеры кэша Кроме того, имейте в виду, что мы стремимся к 100 000/1 000 000 одновременных пользователей, а некоторые действия требуют немедленной и синхронизированной информации о разных игроках. - person Ron Rejwan; 03.02.2011
comment
Azure выполняет балансировку нагрузки за вас, поэтому добавление дополнительных экземпляров в роли автоматически направляет игроков на другие экземпляры (серверы). Что вы используете для базы данных? Есть много разных вариантов обработки этого в лазури. - person njebert; 05.08.2011