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

Последовательное обновление распределенного серверного приложения

Дано

Я запускаю несколько серверов приложений, опционально работающих за балансировщиком нагрузки. Серверы приложений совместно используют одну базу данных SQL. Думаю, довольно обычная установка.

Представьте, что для приложения доступен пакет обновления SW. Обновление включает изменения как в приложении, так и в схеме Db.

Проблема

Администратор начинает установку обновления на первом сервере приложений. В результате сервер приложений и схема Db будут обновлены до новой версии.

После запуска обновления Db оставшиеся серверы приложений должны быть каким-то образом уведомлены, что им следует прекратить использование Db, пока они не получат обновление. Интересно, есть ли на этот счет известные решения?

Используемая технология

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

Конечно, самое безопасное решение - полностью остановить приложение, внести необходимые изменения в приложение и БД и снова запустить приложение. Это может быть или не выполнимо в зависимости от ваших требований.

Если не требуется простоя или требуется минимальное время простоя, необходимо одновременно предоставить две запущенные независимые копии. Выполните обновление на одной копии (приложение + БД + любые другие зависимости), сохраняя доступ пользователей ко второй копии. Обновите вторую копию после запуска первой копии и перенаправления пользователей на первую обновленную копию.