Текущее и управление

Есть у меня друг. С ним мы много раз говорили об управлении предприятиями и каждый раз наш разговор наталкивался на рифы противоположных аксиом, на которые каждый из нас опирается в ходе своих размышлений. Он считает, что управление — суть гуманитарная задача, которую может решить только человек. Человеку нужен человек. Человек всегда будет хотеть говорить с человеком.

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

К вопросу об организации оркестратора кластера в деле бесшовного ввода новых версий 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 одновременно работающих версии более чем достаточно даже для весьма масштабного кластера.

Популярные сообщения из этого блога

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

Если лампы зажигают, значит это кому-то нужно.

Слово о сложности

Опять про QTcpSocket и disconnected