Развёртывание программного обеспечения
Развёртывание програ́ммного обеспе́чения — совокупность всех действий, которые делают программную систему готовой к использованию[1][2].
Процесс развёртывания может включать действия как на стороне производителя (разработчика), так и на стороне потребителя (пользователя), либо на обеих сторонах. Развёртывание для потребителей является сложной задачей, поскольку целевые системы разнообразны и непредсказуемы[3][4]. Модель SaaS (программное обеспечение как услуга) позволяет избежать этих трудностей, поскольку развёртывание происходит только на выделенных серверах, которые, как правило, находятся под контролем производителя.
Поскольку каждая программная система уникальна, точные процессы или процедуры в рамках каждого этапа развёртывания трудно определить однозначно. Поэтому «развёртывание» следует интерпретировать как общий процесс, который необходимо адаптировать в соответствии с конкретными требованиями или характеристиками[5].
История
[править | править код]Во времена, когда компьютеры были чрезвычайно большими, дорогими и громоздкими (мейнфреймы и мини-компьютеры), программное обеспечение (ПО) часто поставлялось производителями в комплекте с аппаратным и предоставлялось бесплатно[6]. Поворотный момент наступил в 1969 году, когда компания IBM под влиянием антимонопольных исков начала взимать плату за программное обеспечение и услуги отдельно от аппаратных средств. Это «разделение» (англ. unbundling) фактически создало современную индустрию ПО, превратив его в коммерческий продукт[6]. Ранние процессы развёртывания были строго структурированы; например, поэтапная модель Лаборатории Линкольна (Lincoln Labs Phased Model), разработанная в 1956 году для системы ПВО SAGE, ввела последовательные этапы, повлиявшие на более поздние методологии[7]. Этот подход был формализован в виде каскадной модели, ставшей доминирующей после её описания Уинстоном Ройсом в 1970 году. Он приводил к редким, дорогостоящим и длительным циклам выпуска релизов, часто занимавшим годы[7]. Если требовалось установить бизнес-приложение, это часто влекло за собой дорогостоящий и длительный визит системного архитектора или консультанта[7]. В наши дни при сложной локальной установке корпоративного ПО такая практика иногда сохраняется[8].
Развитие массового программного обеспечения для новой эры микрокомпьютеров в 1980-х годах привело к появлению новых форм распространения ПО — сначала картриджи, затем кассеты, дискеты, а позднее (в 1990-х и далее) оптические носители, Интернет и флеш-накопители[9][10]. Этот сдвиг означал, что развёртывание программного обеспечения можно было переложить на клиента[11]. В этот период появились альтернативы жёсткой каскадной модели. Спиральная модель, предложенная Барри Бомом в 1988 году, представила итеративный подход, основанный на анализе рисков, бросив вызов линейной структуре каскадной модели и проложив путь к более гибким, гибким методологиям[7]. Когда развёртывание силами клиента стало стандартом, пришло понимание, что процесс настройки должен быть удобным для пользователя. В 1990-х годах популярность обрели такие инструменты, как InstallShield, чьи мастера установки избавляли пользователей от необходимости выполнять сложные задачи, например, редактировать записи в реестре[12].
До появления интернета выпуски ПО по своей природе были дорогостоящими и редкими[7]. Распространение интернета коренным образом изменило дистрибуцию программ и сделало возможной сквозную гибкую разработку, обеспечив быструю совместную работу и цифровую доставку[13]. Основы для современного быстрого развёртывания были заложены в 1990-х годах, когда Кент Бек разработал непрерывную интеграцию как одну из ключевых практик экстремального программирования, призывая разработчиков интегрировать свою работу ежедневно[14]. Появление облачных вычислений и модели SaaS в 2000-х годах ещё больше ускорило эту тенденцию, позволив развёртывать ПО для огромного числа клиентов за считаные минуты. Этот переход также означал, что график развёртывания теперь, как правило, определял поставщик ПО, а не клиенты[15][13]. Такая гибкость привела к становлению непрерывной доставки как жизнеспособного подхода, особенно для веб-приложений[14].
Современные стратегии развёртывания, основанные на этих принципах, включают сине-зелёное развёртывание и канареечный выпуск[16].
Этапы развёртывания
[править | править код]- Выпуск (релиз)
- Этап выпуска следует за завершённым процессом разработки и иногда классифицируется как часть разработки, а не развёртывания[17]. Он включает все операции по подготовке системы к сборке и передаче на компьютерные системы, где она будет работать в производственной среде. Поэтому он может включать определение ресурсов, необходимых для работы системы с приемлемой производительностью, а также планирование и документирование последующих этапов развёртывания.
- Установка и активация
- Для простых систем установка включает создание команды, ярлыка, скрипта или службы для запуска ПО (вручную или автоматически). Для сложных систем может потребоваться настройка — возможно, путём опроса конечного пользователя о предполагаемом использовании или прямых вопросов о конфигурации — и подготовка всех необходимых подсистем к работе. Активация — первый запуск исполняемого компонента ПО (не путать с активацией лицензии, которая является функцией систем DRM).
- При крупных развёртываниях на серверах основная копия ПО, используемая пользователями («production»), может быть установлена на рабочем сервере в рабочей среде. Другие версии развёрнутого ПО могут быть установлены в тестовой среде, среде разработки и среде аварийного восстановления.
- В сложных средах непрерывной доставки и/или системах SaaS в рабочей среде могут одновременно существовать по-разному сконфигурированные версии системы для разных внутренних или внешних клиентов (это называется мультитенантной архитектурой) или даже постепенно выкатываться параллельно для разных групп клиентов с возможностью отмены одного или нескольких параллельных развёртываний. Например, известно, что Twitter использует такой подход для A/B-тестирования новых функций и изменений интерфейса. В рабочей среде также может быть создана «скрытая живая» группа серверов, ещё не подключённых к балансировщику нагрузки, для целей сине-зелёного развёртывания.
- Деактивация
- Деактивация — обратный процесс активации, означающий остановку всех работающих компонентов системы. Деактивация часто требуется для выполнения других действий по развёртыванию, например, систему может потребоваться деактивировать перед обновлением. Практика вывода из эксплуатации редко используемых или устаревших систем часто называется списанием приложений (application retirement).
- Удаление (деинсталляция)
- Удаление — обратный процесс установки. Это удаление системы, которая больше не требуется. Может также включать перенастройку других программных систем для удаления зависимостей от удалённой системы.
- Обновление
- Процесс обновления заменяет более раннюю версию всей системы или её части новым релизом. Обычно он состоит из деактивации и последующей установки. В некоторых системах, например, в Linux при использовании системного менеджера пакетов, старая версия приложения обычно удаляется автоматически в рамках этого процесса. (Это связано с тем, что менеджеры пакетов Linux, как правило, не поддерживают одновременную установку нескольких версий приложения, если пакет не был специально разработан для обхода этого ограничения.)
- Встроенное обновление
- Механизмы для установки обновлений встроены в некоторые программные системы (или, в случае некоторых операционных систем, таких как Linux, Android и iOS, в саму ОС). Автоматизация этих процессов варьируется от полностью автоматической до инициируемой и контролируемой пользователем. Norton Internet Security — пример системы с полуавтоматическим методом получения и установки обновлений как для антивирусных баз, так и для других компонентов.
- Отслеживание версий
- Системы отслеживания версий помогают пользователю находить и устанавливать обновления. Например, каталог программного обеспечения хранит информацию о версии каждого пакета, установленного в локальной системе. Нажатие кнопки открывает веб-страницу обновления приложения. В Linux, Android и iOS этот процесс ещё проще, поскольку стандартизированный механизм отслеживания версий встроен в ОС, поэтому отдельные шаги входа, загрузки и выполнения не требуются, и процесс можно настроить на полную автоматизацию.
Роли в процессе развёртывания
[править | править код]Сложность и разнообразие программных продуктов способствовали появлению специализированных ролей для координации и инжиниринга процесса развёртывания. Для настольных систем конечные пользователи часто сами становятся «специалистами по развёртыванию», устанавливая ПО на свои машины. Развёртывание корпоративного ПО включает гораздо больше ролей, и они обычно меняются по мере продвижения приложения от тестовой (предпроизводственной) до рабочей среды. Типичные роли, участвующие в развёртывании корпоративных приложений, могут включать[18]:
- в предпроизводственных средах:
- разработчики приложений: см. Разработка программного обеспечения
- инженеры по сборке и релизам: см. Инженерия релизов
- менеджеры по релизам: см. Управление релизами
- координаторы развёртывания: см. DevOps
- в рабочих средах:
- Системный администратор
- Администратор баз данных
- координаторы релизов: см. DevOps
- менеджеры проектов по эксплуатации: см. ITIL[19]
См. также
[править | править код]- Управление жизненным циклом приложения
- Управление жизненным циклом продукта
- Системное администрирование
- Среда развёртывания
- Стадии разработки программного обеспечения
- Readme
Примечания
[править | править код]- ↑ Pressman, Roger S. Software Engineering: A Practitioner's Approach. — 8-е. — McGraw-Hill, 2014. — ISBN 978-0078022128.
- ↑ Deploying software (амер. англ.). IBM Documentation. IBM. Дата обращения: 25 ноября 2024.
- ↑ A. Nejati, M. Svechikov, J. Wuttke: Deploying a C++ Software with (or without) Python Embedding and Extension. In: deRSE24 - Selected Contributions of the 4th Conference for Research Software Engineering in Germany, edited by J. Bernoth et al. Electronic Communications of the EASST, vol 83 (2025). https://eceasst.org/index.php/eceasst/article/view/2596.
- ↑ What Is Software Deployment? (англ.). PagerDuty. Дата обращения: 23 сентября 2025.
- ↑ Stephen Rees-Carter. How to Install and Configure Ansible on Ubuntu 18.04 (англ.). DigitalOcean (13 июля 2018). — «Configuration management systems are designed to make controlling large numbers of servers easy for administrators and operations teams. They allow you to control many different systems in an automated way from one central location.» Дата обращения: 8 июня 2019. Архивировано 9 июня 2019 года.
- ↑ 1 2 Software Becomes a Product . Computer History Museum. Дата обращения: 23 сентября 2025.
- ↑ 1 2 3 4 5 Early Software Delivery Models . Octopus Deploy (23 августа 2022). Дата обращения: 23 сентября 2025.
- ↑ Bansal, Prateek. The Evolution of Software Deployment: From Physical Servers to Container Orchestration . Medium (22 августа 2023). Дата обращения: 23 сентября 2025.
- ↑ Oosthuizen, Dewald. The Evolution of Software Development . Medium (15 мая 2025). Дата обращения: 23 сентября 2025.
- ↑ The Evolution of Software Development! XPARTRON (11 сентября 2024). Дата обращения: 23 сентября 2025.
- ↑ Poornima. A Short History of Deployment Processes . Hashnode (18 августа 2023). Дата обращения: 23 сентября 2025.
- ↑ The Evolution of App Deployment and Packaging: 1990 to Now . Iron.io Blog (23 декабря 2020). Дата обращения: 23 сентября 2025.
- ↑ 1 2 Wasserman, Anthony I. (2011). How the Internet transformed the software industry. J Internet Serv Appl. 2: 11–22. doi:10.1007/s13174-011-0019-x. Дата обращения: 23 сентября 2025.
- ↑ 1 2 Fowler, Martin. Continuous Integration . martinfowler.com (18 января 2024). Дата обращения: 23 сентября 2025.
- ↑ Continuous Delivery: Origins, 5 Principles, And 7 Key Capabilities . Octopus Deploy (20 июля 2022). Дата обращения: 23 сентября 2025.
- ↑ A Brief History of DevOps, Part IV: Continuous Delivery vs. Continuous Deployment . CircleCI Blog (9 ноября 2023). Дата обращения: 23 сентября 2025.
- ↑ Dolstra, Eelco; Jonker, Willem; Löwe, Erik (2003). Integrating Software Construction and Software Deployment (PDF). Proceedings of the 3rd workshop on Software configuration management.
- ↑ DevOps: A Software Architect’s Perspective. — Addison-Wesley, 2015. — ISBN 978-0134049847.
- ↑ Steinberg, Gene. Reinventing ITIL in the Age of DevOps: Innovative Practices Across Frameworks. — Apress, 2018.
Ссылки
[править | править код]- Стандартизация
- Статьи
- Hall, Richard S.; Fuggetta, Alfonso; Wolf, Alexander L.; Carzaniga, Antonio; Van Der Hoek, André; Heimbigner, Dennis. A Characterization Framework for Software Deployment Technologies – Technical Report CU-CS-857-98 . Boulder, CO: Department of Computer Science, University of Colorado Boulder (апрель 1998).