Развёртывание программного обеспечения

Развёртывание программного обеспечения (англ. software deployment) — это совокупность действий, благодаря которым программная система становится доступной для использования[1][2].

Описание

Развёртывание может включать действия как со стороны производителя разработчика программного обеспечения, так и со стороны потребителя пользователь, либо с обеих сторон. Развёртывание на стороне потребителя часто представляет сложную задачу из-за разнообразия и непредсказуемости целевых систем[3][4]. Модель программное обеспечение как услуга позволяет избежать многих трудностей, поскольку развёртывание производится только на выделенных серверах, обычно находящихся под контролем производителя.

Каждая программная система уникальна, поэтому конкретные процессы или алгоритмы в рамках отдельных этапов развёртывания редко поддаются строгому определению. Следовательно, под «развёртыванием» подразумевается общий процесс, который должен адаптироваться под специфические требования и особенности задачи[5].

История

В эпоху больших, дорогих и громоздких мэйнфреймов и миникомпьютеров программное обеспечение часто поставлялось в комплекте с аппаратным обеспечением и предоставлялось производителями бесплатно[6]. Переломным моментом стало решение компании IBM в 1969 году, вынесенное под влиянием антимонопольных судебных разбирательств: с этого времени программное обеспечение и сервисы стали продаваться отдельно от техники. Такое «разукрупнение» положило начало современной индустрии программного обеспечения, превратив софт в коммерческий продукт[6]. Ранние процессы развёртывания были очень формализованными: так, Фазовая модель лаборатории Линкольна, созданная в 1956 году для системы противовоздушной обороны SAGE, ввела последовательные этапы, оказавшие большое влияние на последующие методики[7]. Подобная схема получила завершённое оформление в водопадной модели, после публикации описания Уинстоном Ройсом в 1970 году. Для таких моделей были характерны редкие, дорогие и продолжительные релизы, зачастую длящиеся годы[7]. В случае необходимости установки делового программного обеспечения требовалось выездное и зачастую дорогостоящее обслуживание архитектора или консультанта[7]. При сложной внедряемой установке корпоративного ПО подобная ситуация сохраняется и в наши дни[8].

Появление массового рынка программного обеспечения для микрокомпьютеров в 1980-х открыло новые формы распространения: сначала картриджи, затем аудиокассеты, дискеты, позже (с 1990-х) оптические диски, интернет и флэш-накопители[9][10]. Теперь непосредственно пользователь отвечал за развёртывание ПО[11]. В этот период появились альтернативы жёстким «водопадным» процессам: спиральная модель, предложенная Барри Боэмом в 1988 году, позволяла гибко управлять рисками и итерировать продукт, что стало почвой для гибких методологий[7]. По мере широкого распространения пользовательского развёртывания важным стало удобство настройки: в 1990-х появились такие средства, как InstallShield, избавившие пользователей от ручного внесения изменений в реестр[12].

В эпоху до распространения Интернета развёртывание происходило редко и было затратным[7]. Появление сети Интернет радикально изменило способы распространения ПО и позволило использовать гибкие методы разработки с быстрой коллаборацией и цифровой доставкой[13]. В 1990-х Кент Бек заложил основы быстрой поставки, разработав принцип непрерывная интеграция как часть экстремального программирования, где разработчики ежедневно интегрируют изменения[14]. С 2000-х годов с распространением облачных вычислений и SaaS стало возможным развёртывать ПО сразу для многих клиентов за минуты, а график релизов обычно определяет поставщик, а не заказчик[15][13]. Это привело к развитию концепции непрерывная поставка (continuous delivery), особенно для веб-приложений[14].

Современные стратегии развёртывания, развивающие эти идеи, включают blue–green развёртывание и развертывание по модели canary release[16].

Этапы развёртывания

Релиз
Релиз завершает процесс разработки и иногда рассматривается как его часть, а не как элемент развёртывания[17]. Он включает операции по подготовке системы к сборке и передаче на вычислительные узлы, где она будет эксплуатироваться. Зачастую этот этап требует определения ресурсов, необходимых для нормальной работы системы, и планирования/документирования последующих операций развёртывания.
Установка и активация
Для простых систем установка — это создание команды, ярлыка, скрипта или службы для запуска ПО вручную или автоматически. В сложных системах она может включать настройку параметров — запрашивая информацию у конечного пользователя о способах эксплуатации или вариантах конфигурирования, а также подготовку всех зависимых подсистем. «Активация» — запуск исполняемого компонента ПО впервые.
В крупных развёртываниях на серверах основная копия программного обеспечения устанавливается на сервере производственной среды. Другие версии могут быть установлены в тестовой, разработческой и резервной средах.
В сложных системах с непрерывной поставкой или SaaS возможны одновременные развёртывания разных конфигураций для разных заказчиков ("multi-tenant architecture"), а также постепенное внедрение новых версий для отдельных групп пользователей с возможностью отката. Например, компания Twitter применяет такой подход для проведения A/B-тестирования новых функций и элементов интерфейса. Возможна также организация внутри производственной среды скрытой «живой» группы серверов не подключённых к балансировщику нагрузки для реализации blue–green deployment.
Деактивация
Деактивация — противоположный процесс, подразумевающий остановку исполняющихся компонентов. Часто необходима для обновления системы. Выведение устаревших систем из эксплуатации называют отказом от приложений или списанием.
Деинсталляция
Деинсталляция — это удаление ПО, больше не требующегося системе, а также возможная коррекция зависимостей в других приложениях.
Обновление
Обновление заменяет более раннюю версию программного обеспечения новой. Обычно процедура состоит из деактивации и повторной установки. В некоторых системах, например в Linux с использованием диспетчера пакетов, также автоматически удаляется предыдущая версия, поскольку одновременное существование нескольких версий не поддерживается, если это специально не предусмотрено.
Встроенное обновление
Механизмы встроенного обновления реализованы в некоторых приложениях и операционных системах Linux, Android, iOS. Автоматизация тут варьируется от полностью автоматического обновления до пользовательского контроля. Пример: Norton Internet Security с полуавтоматическим обновлением антивируса и компонентов. Некоторые продукты могут также автоматически уведомлять пользователя о доступности новых версий.
Отслеживание версий
Системы отслеживания версий помогают пользователям искать и устанавливать обновления программ. Пример — каталог программ, хранящий сведения о версиях ПО на локальной системе; обновление запускается щелчком мыши по ссылке. В Linux, Android и iOS процесс может полностью автоматизироваться благодаря интеграции отслеживания версий. Некоторые сторонние программы поддерживают автоматическое обновление и для Windows-приложений.

Роли в процессе развёртывания

Сложность и многообразие программных продуктов привели к появлению специализированных ролей, связанных с организацией и инженерным сопровождением процесса развёртывания. На настольных системах функции развёртывания часто выполняет сам пользователь. Внедрение корпоративного ПО включает большее количество ролей, причём их набор меняется по мере перехода от тестовой среды к эксплуатации. Типичные роли при развёртывании корпоративных приложений:[18]

Примечания