Чтобы распределение нагрузки стало возможным при выбранной нами программной модели и используемых основных службах стека, задачи, выполняемые в ответ на сгенерированные клиентом или игрой события должны быть совместимы между всеми машинами, на которых работают копии логики игры или мира в стеке Darkstar. Сами задачи пишутся на Java1, а это означает, что они могут выполняться на любых других компьютерах, у которых в стек выполнения входит та же версия виртуальной машины Java. Все данные, читаемые и обрабатываемые задачей, должны получаться от службы данных, общей для всех экземпляров игры или виртуального мира, и стеков Darkstar на всех компьютерах. Посредником в обмене данных является служба сеансов или каналов, которая абстрагирует конечные точки коммуникаций и позволяет переместить любой сеанс или канал с одного сервера на другой. Таким образом, любая задача может выполняться на любых экземплярах игрового сервера без изменения семантики задачи.
А точнее, все задачи состоят из байт-кода, который может выполняться виртуальной машиной Java. Выбор языка уровня исходного кода ни на что не влияет; для нас важно только то, чтобы откомпилированная форма могла выполняться на любом компьютере из распределенного набора, обеспечивающего работу игры или виртуального мира.
Благодаря этому появляется возможность сделать базовый механизм масштабирования Darkstar простым на вид. Если нагрузка на компьютер становится слишком высокой, некоторые задачи с него перемещаются на другой, менее загруженный. Если перегружены все компьютеры, то в группу добавляется новый компьютер с копией сервера игры или виртуального мира поверх стека Darkstar, а подсистема распределения нагрузки начинает передавать задачи на новый компьютер.
Related posts:
- Служба стекового уровня
- Архитектура Darkstar
- Макроструктура
- Коммуникационные службы
- Подключения к игровой логике