Thу article describes an innovative method for updating systems with high fault-tolerance requirements. A conflict emerges: programmer need to install a new version of the application nut system cannot be stooped. That is why the solution is using such tools as: containerization, local version storage, and declarative configuration management. Changes should be implemented using a canary deployment approach, which significantly reduces the likelihood of errors.
Keywords: software development, reliability, deployment, infrastructure, automation.
Разработка программного обеспечения всегда сопровождается изменением программного кода, разработчики ведут активную деятельность, вносят корректировку в программный код. Так, например, постоянная необходимость нововведения функциональности, устранения ошибки, интеграции и так далее обуславливает существование версионности программного продукта. Однако к системам различных областей экономики, таких как промышленность, энергетика и транспорт предъявляются повешенные требования по их непрерывности функционирования, надежности и доступности. Наряду с этим традиционный подход обновления программного зачастую всё еще использует антишаблон развертывания программного обеспечения вручную [1]. Под развертыванием подразумевается процесс получения двоичного кода из исходного кода, вставка переменных окружения и конфигурационных файлов, запуск сопутствующих процессов [2]. В условиях систем с высокими требованиями к доступности операции развертывания ПО приводят к временной недоступности функционала, что является нежелательным и в ряде случаев недопустимым.
Таким образом, возникает противоречие, необходимо проводить регулярные обновления программного обеспечения, но в то же время обеспечить непрерывность функционирования системы. С одной стороны, отказ от обновлений приводит снижению надежности и накоплению ошибок, с другой — выполнение обновлений традиционными способами влечет за собой риски возникновения продолжительных простоев и общему нарушению работы.
Практика эксплуатации автоматизированных систем показывает, что во многих случаях процесс обновления реализуется с использованием ручных операций, включающих передачу файлов между участниками, размещение дистрибутивов обновления на FTP-серверах и последующее развертывание на целевых серверах. Данный подход характеризуется высокой зависимостью от человеческого фактора и может повышать вероятность ошибок, затрудняет контроль версий и усложняет процедуру отката. В связи с этим возникает необходимость разработки инновационного механизма обновления автоматизированных систем.
Для решения поставленной проблемы был разработан способ обновления программного обеспечения, который основывается на использовании облачного репозитория как локального хранилища версий и декларативного управления конфигурациями. Данный подход обеспечивает непрерывное функционирование системы за счёт поэтапного внесения изменений и минимизации конфигурационного дрейфа. В основе метода лежит организация программных компонентов системы в виде изолированных группах процессов. Решение реализует концепцию неизменяемой инфраструктуры (immutable infrastructure). Более того обеспечить требуемый уровень безопасности хранения и использование версий приложений позволяет независимое хранилище контейнерных образов, пишут авторы в работе [3].
Ядром разрабатываемого механизма является внедрение в процесс обновления системы управления конфигурациями, например, Ansible. Данный инструмент реализует декларативную модель управления состоянием. Вформализованном видезадается целевое состояние системы (desire state) и определяет эталон конфигурации системы. Использование идемпотентной модели обеспечивается получение ожидаемого результата операции обновления, а свойство конвергенции гарантирует достижение целевого состояния вне зависимости от начального состояния узлов. «Если система управления конфигурациями конвергентна, то она может многократно выполнять управляющие воздействия, с каждым разом приводя сервер всё ближе к желаемому состоянию» пишет Маркус Бургесс в книге [4]. Использование вышеописанной модели позволит устранить конфигурационный дрейф (configuration drift).
Повысить безотказность системы во время установки обновления позволит механизм канареечного развертывания. В рамках изучаемого решения используется поэтапное внедрение изменений на существующие узлы кластера системы. Канареечное развертывание служит инструментом снижения рисков при выполнении модификаций распределённой системы [5].
Таблица 1
Алгоритм безопасного обновления автоматизированных систем
|
№ |
Действия, выполняемые в этапе |
Ожидаемый результат |
|
1. |
Разработки новой версии приложения |
Новая версия в виде образа приложения |
|
2. |
Размещение дистрибутива в локальном хранилище образов |
Версия доступна каждому серверу кластера |
|
3. |
Внесение изменений в конфигурационный файл на управляющем сервере |
Изменённая конфигурационного файл, описывающая требуемое состояние системы |
|
4. |
Инициализация процесса приведения системы к целевому состоянию |
Применение изменений к ограниченному подмножеству узлов |
|
5. |
Контроль выполнения изменений |
Оценка результата, переход к пункту 6 или 7 |
|
6. |
Успешно обновлена часть узлов — масштабируется на остальные объекты |
Завершение выполнения обновления системы |
|
7. |
Выявлены отклонения, изменяется конфигурация итерационно на шаг назад |
Переход системы в исходное состояние, до внесения изменений |
Источник: составлено автором
В результате, приведённый механизм, объединил принципы контейнеризации, декларативного управления конфигурацией и поэтапного внедрения изменений. Его применение позволяет повысить воспроизводимость инфраструктуры системы, увеличить безотказность ее функционирования и минимизировать простой.
Литература:
- Хамбл Д., Фарли Д. Непрерывное развертывание ПО: автоматизация процессов сборки, тестирования и внедрения новых версий программ: Пер. с англ. — М.: ООО «И. Д. Вильямс», 2017. — 432 с.: ил.
- Мейер Б., Хохштейн Л., Мозер Р. Запускаем Ansible: простой способ автоматизации управления конфигурациями и развертыванием приложений, 3-е изд.: Пер. с англ. А. Киселева. — М.: ДМК Пресс, 2023. — 482 с.: ил.
- Шейнман В., Стариков Д. Д., Тюменцев Д. В., Вавилов Г. Д. Повышение эффективности процессов разработки программного обеспечения: контейнерные технологии // Программные системы и вычислительные методы. — 2024. — № 4. — DOI: 10.7256/2454–0714.2024.4.72015. — URL: https://nbpublish.com/library_read_article.php?id=72015
- Burgess M. In Search of Certainty: The Science of Our Information Infrastructure. — Sebastopol: O’Reilly Media, 2015. — 472 p.
- Моррис К. Программирование инфраструктуры, 2-е изд.: Пер. с англ. — СПб.: БХВ-Петербург, 2024. — 416 с.: ил.
- Использование Docker / пер. с англ. А. В. Снастина; науч. ред. А. А. Маркелов. — М.: ДМК Пресс, 2017. — 354 с.
- Зиятбекова G., Аралбаев S., Kisala P. Проблемы безопасности контейнеризации микросервисов // Вестник КазУТБ. 2023. Т. 4, № 21. DOI: 10.58805/kazutb.v.4.21–198.
- Potdar A. M., Narayan D. G., Kengond S., Mulla M. M. Performance Evaluation of Docker Container and Virtual Machine // Procedia Computer Science . 2020. Vol. 171. P. 1419–1428.
- Richter D., Konrad M., Utecht K., Polze A. Highly-Available Applications on Unreliable Infrastructure: Microservice Architectures in Practice // 2017 IEEE International Conference on Software Quality, Reliability and Security Companion (QRS-C). Prague, Czech Republic, 2017. P. 130–137. DOI: 10.1109/QRS-C.2017.28.
- Moilanen M. Deploying an application using Docker and Kubernetes: Bachelor’s thesis / Oulu University of Applied Sciences, Degree Programme in Business Information Technology. — Oulu, 2018. — 44 p. + 7 app.

