Какие технологии существуют для кластеризации на уровне приложений?

Допустим, у меня есть приложение, которое гарантированно перегружает один сервер даже после оптимизации. Существует ли технология, позволяющая разделить веб-приложение на несколько серверов при сохранении его состояния?

Возьмите, например, многопользовательскую онлайн-игру. Обычно в World of War craft существует несколько серверов, каждый из которых имеет собственное игровое состояние. То, что я ищу, это то, что позволило бы разделить это игровое состояние между несколькими серверами.

РЕДАКТИРОВАТЬ: Платформа на самом деле не имеет значения, так как это для веб-приложения, поэтому бэкэнд не имеет большого значения. Тем не менее, Rails и Java являются возможностями.

Кроме того, WoW был просто примером, я просто заинтересован в такой технологии; большая игра была бы хорошим приложением для этого.

4 ответа

Решение

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

Проект Darkstar предпринял замечательную попытку сделать это с точки зрения удобства использования и сложности, но обнаружил (что неудивительно), что это не масштабирование.

В конечном счете, это сложная (хотя и неразрешимая) проблема, когда нет решения, близкого к универсальному. В частности, вы, вероятно, будете иметь компромисс между необходимостью действовать с устаревшими игровыми данными, с одной стороны, и необходимостью постоянно обмениваться общими данными, с другой стороны. Отсутствие правильности или экспоненциальный рост сложности... выберите свой яд.

Стоит отметить - особенно если ваша прикладная область не является играми в реальном времени - что вы часто не возражаете, если вы работаете с устаревшими данными, если они скоро станут правильными. В таких случаях удобны простые системы кеширования, такие как memcache. Точно так же, если вам нужно больше корректности, но вам не нужно слишком беспокоиться о пропускной способности, может пригодиться что-то вроде Hazelcast (упомянутое в другом ответе), но для большинства онлайн-игр, которые достаточно велики, чтобы требовать балансировки нагрузки, тысячи операций / сек "просто недостаточно хорош.

Некоторые технологии MMO делают некоторую попытку распределить приложение путем его географического разделения, что означает, что на самом деле общего состояния не так много, и требуется, чтобы эта схема имела смысл в игровом мире и художественной литературе.

Другой подход состоит в том, чтобы разделить его по сервисам и внедрить большинство сервисов с вашим любимым стандартным подходом RPC. Это позволяет вам легко масштабировать, если ваши сервисы независимы, но любые зависимости между сервисами возвращают вас на круги своя.

Посмотрите на Hazelcast. Это открытая, масштабируемая платформа для распространения данных для Java. Hazelcast предлагает распределенную карту, которая будет распространяться среди участников кластера. Вы можете легко хранить свои данные в нем. Это супер супер прост в использовании. Просто добавьте hazelcast.jar в ваш путь к классам. Нет необходимости устанавливать какой-либо сервер.

Я использую Microsoft HPC, но не для игр. Довольно прост в настройке и использовании.

Вы не упоминаете свою платформу. Для Java есть терракота

Другие вопросы по тегам