К вопросу об организации оркестратора кластера в деле бесшовного ввода новых версий Kalpa-системы.

Страшное дело - организация взаимодействия в большой системе взаимодействующих узлов.
Первое и основное дело, с каким придется столкнуться - реализация плавного, бесшовного обновления всей системы на новые версии. Причем делать это надо не дергая пользователей. Пусть они спокойно доработают свою сессию на старой версии. Для обеспечения такой плавности необходима одновременная работа как всего серверного хозяйства в старой версии, так и плавный ввод в работу версии новой.
Итак. В системе существует служба "SystemControl". Она отвечает:

  • За контроль топологии системы. Знает какие узлы существуют в системе и какие службы эти узлы обслуживают.
  • Мониторит отказ отдельных узлов и перебалансировку топологии системы.
  • Осуществляет плавное обновление системы. 
Каждая служба (кроме слоя сервера приложений) имеет свой набор сетевых портов ожидания. Каждая версия использует только один из трех портов. SystemControl всегда знает расписание портов текущей и прошлой версии. Таким образом можно одновременно держать несколько версионных слоев служб на всем пространстве узлов.
Схематиченый сценарий ввода в работу новой версии все системы таков. 

  • Соединение специальной утилитой с SystemControl и инициация протокола запуска новой версии системы.
  • Загрузка через SystemControl исполняемых файлов и библиотек всех служб системы.
  • Активация новой версии SystemControl на новом порте ожидания.
  • Новая версия SystemControl (из общей со старой версией базы) получает список всех рабочих узлов системы и через старую версию NodeControl, работающую на каждом узле, передает файлы и библиотеки новой версии на каждый узел. 
  • На каждом рабочем узле активируется новая версия NodeControl на новом порте ожидания.
  • После того как получено подтверждение о запуске новой версии NodeControl начинается процесс активации внутренних служб согласно текущей топологии системы. Стартуют все службы кроме серверов приложения.
  • После подтверждения старта внутренних служб новая версия SystemControl начинает процесс активации слоя новых версий серверов приложений. Для этого ->
    • SystemControl соединяется со старой версией NodeControl (на узле AS) и отключает старый сервер приложений.
    • SystemControl соединяется с новой версией NodeControl (на узле AS) и активирует новую версию сервера приложений.
    • В службе ASControl все активные AS-серверы удаляются и "взводится" первый рабочий сервер приложения. 
    • Каждый последующий запущенный сервер регистрируется в ASControl, что происходит практически мгновенно.
  • SystemControl перехватывает управление соединяясь со старой версией NodeControl на всем пространстве запущенных узлов и получает доступ к статистической информации о системе. 
  • Когда на всех узлах AS (ApplicationServer) прекращается обслуживание последней доживающей пользовательской сессии, можно с уверенностью сказать, что все пользователи, использующие старый слой сервера, завершили свою работу. 
  • После завершения работы последнего пользователя старой версии все уровни внутренних служб гасятся через NodeControl каждого узла.
  • После гасятся сами NodeControl, ASControl и SystemControl старой версии.
  • Система полностью и плавно переходит на новую версию.
Простой системы (в части обработки поступающих запросов на установку новой сессии) минимален (несколько миллисекунд).

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

Популярное

Надежды юношей питают.

Новости госмессенджеров.