Архитектура Darkstar строится в виде набора отдельных служб в адресном пространстве серверной части игры или виртуального мира. Каждая служба определяется небольшим программным интерфейсом. Хотя это и не входило в исходные намерения проектировщиков, основные сервисные функции Darkstar имеют много общего с сервисными функциями классической операционной системы; это позволяет серверной стороне игры или виртуального мира работать с долгосрочным хранением данных, планировать и запускать задачи, а также обмениваться данными с клиентской стороной игры или виртуального мира.
Структурирование системы в виде взаимосвязанного набора служб – очевидное начало процесса «разделяй и властвуй», играющего важную роль в архитектуре любой крупной компьютерной системы. Каждая служба характеризуется интерфейсом, который защищает пользователей службы от изменений реализации и позволяет изменять реализации независимо друг от друга. Изменения в реализации одной службы не должны влиять на реализацию другой, даже если последняя использует изменяемую реализацию (предполагается, что интерфейс и его семантика остаются неизменными).
У нас были и другие причины для выбора декомпозиции на службы. С самого начала Darkstar был задуман как проект с открытым исходным кодом в надежде, что для усиления основной группы мы сможем привлечь других участников к созданию дополнительных служб, расширяющих функциональность ядра системы. Управление сообществом открытого кода – задача непростая при любых обстоятельствах, и мы полагали, что максимальный уровень изоляции служб, образующих инфраструктуру, позволит улучшить изоляцию между разными уровнями реализации. Также на тот момент было неясно, существует ли единый набор служб, подходящих для всех ММО и виртуальных миров.
Структурирование инфраструктуры в виде набора независимых служб позволяло использовать разные наборы этих служб в разных обстоятельствах, обусловленных потребностями конкретного проекта. Службы, включаемые в конкретный стек Darkstar, могут определяться в конфигурационном файле.
Related posts: