Назад | Перейти на главную страницу

Обновляете облачное приложение при его запуске в активном кластере?

Я работаю над облачным приложением, которое устанавливается под Ubuntu, как и следовало ожидать. Например, сервер устанавливается следующим образом:

apt-get install snapserver

Сейчас у нас в проекте около 20 пакетов.

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

У меня вопрос: как вы обычно обновляете живой кластер? Меня беспокоит то, что новый код может создавать новые записи в базе данных, несовместимые со старым кодом. Если это произойдет и клиент получит доступ к серверу, на котором все еще работает старая версия, это может привести к сбою.

Что лучше всего в этом случае?

Здесь будет работать своего рода транзакционный процесс развертывания. По сути, вы бы сделали следующее:

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

Проще сделать что-то подобное, если у вас есть поставщик контейнеров виртуальных машин, например VMware, AWS, Heroku, OpenStack и т. Д.