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

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

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

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

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

Ответы [ 4 ]

2 голосов
/ 28 июня 2010

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

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

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

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

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

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

1 голос
/ 17 июня 2010

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

0 голосов
/ 15 июня 2010

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

0 голосов
/ 15 июня 2010

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

...