---
title: Управление развертыванием приложений
seo:
  title: Управление развертыванием приложений — Go Developer
  description: Тема «Управление развертыванием приложений» для собеседования Go Developer. Что такое сине-зеленый деплой (blue-green deployment)? Что такое Canary (канареечные развертывания)?
---

[Все темы Go Developer](/go-developer)

## <strong>Что такое сине-зеленый деплой (</strong><code>blue&#45;green deployment</code><strong>)?</strong> [#q-14bee738d69b81038a74cfff3293f855]

<strong>Сине-зелёный деплой (</strong>
<code>blue&#45;green deployment</code>
<strong>)</strong> — это стратегия развертывания программного обеспечения,
которая позволяет обновить приложение без прерывания его работы и с минимальными
рисками для пользователей.

#### Основные принципы&#58;

{/* prettier-ignore */}
1. <strong>Двойное окружение</strong>&#58;

    - Имеются два параллельных окружения (инфраструктура, серверы, базы данных и т.д.), называемые синим и зелёным.

1. <strong>Тестирование и подготовка</strong>&#58;

    - Новая версия приложения (зелёное окружение) тестируется и подготавливается к развертыванию, но не доступна пользователям.

1. <strong>Постепенное переключение</strong>&#58;

    - После успешного тестирования, трафик перенаправляется с текущей рабочей версии (синее окружение) на новую версию (зелёное окружение).

1. <strong>Мониторинг и проверка</strong>&#58;

    - В течение переключения и после него проводится мониторинг для быстрого обнаружения проблем и возможности отката, если что-то пойдёт не так.

1. <strong>Откат в случае неудачи</strong>&#58;

    - Если новая версия не прошла проверку, переключение откатывается на предыдущую (синюю) версию без прерывания работы приложения.

#### Преимущества&#58;

- <strong>Минимальные риски</strong>&#58; Пользователи остаются доступными, пока
  не завершится успешное развертывание новой версии.

- <strong>Быстрый откат</strong>&#58; Возможность быстро вернуться к предыдущей
  версии в случае неудачи.

- <strong>Повышенная надёжность</strong>&#58; Уменьшение времени простоя
  приложения и минимизация возможных ошибок.

#### Использование&#58;

Сине-зелёный деплой особенно полезен в ситуациях, когда необходимо обновлять приложение с минимальными простоями и рисками для бизнес-процессов и пользовательского опыта.

:::note[Ссылки для изучения]

1. [Сине-зеленый и канареечный деплоймент](https://yandex.cloud/ru/docs/tutorials/web/blue-green-canary-deployment?utm_referrer=https%3A%2F%2Fwww.google.com%2F)
   :::

---

## <strong>Что такое</strong> <code>Canary</code> <strong>(канареечные развертывания)?</strong> [#q-14bee738d69b8170a791fa973dfc1c16]

<code>Canary</code> <strong>(канареечные развертывания)</strong> — это стратегия
постепенного развертывания программного обеспечения, при которой новая версия
приложения предоставляется ограниченной группе пользователей или серверам
(называемым канарейками), прежде чем она будет доступна всем остальным.

#### Основные принципы&#58;

{/* prettier-ignore */}
1. <strong>Постепенное внедрение</strong>&#58;

    - Новая версия приложения развертывается сначала только на ограниченной части инфраструктуры или для небольшой группы пользователей.

1. <strong>Мониторинг и сравнение</strong>&#58;

    - Приложение мониторится в реальном времени для обнаружения потенциальных проблем и сравнения его работы с текущей стабильной версией.

1. <strong>Оценка стабильности</strong>&#58;

    - Если новая версия успешно проходит тестирование и работает стабильно, её развертывание может быть масштабировано для остальных пользователей или серверов.

1. <strong>Откат в случае неудачи</strong>&#58;

    - В случае возникновения проблем новая версия может быть быстро отключена или заменена на предыдущую стабильную версию.

#### Преимущества&#58;

- <strong>Минимальные риски</strong>&#58; Риск нарушения работы всего приложения
  снижается благодаря ограниченному внедрению новой версии.

- <strong>Раннее обнаружение проблем</strong>&#58; Проблемы могут быть выявлены
  и исправлены на ранних стадиях развертывания.

- <strong>Контролируемое развертывание</strong>&#58; Возможность управлять
  внедрением и реакцией на возможные проблемы.

#### Использование&#58;

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

:::note[Ссылки для изучения]

1. [Сине-зеленый и канареечный деплоймент](https://yandex.cloud/ru/docs/tutorials/web/blue-green-canary-deployment?utm_referrer=https%3A%2F%2Fwww.google.com%2F)
   :::

---

## <strong>Что такое</strong> <code>Dark</code> <strong>(скрытые) или</strong> <code>А&#47;В</code><strong>-развертывания?</strong> [#q-14bee738d69b81a29dd0d97a3d342856]

Dark launch и A/B-тестирование — разные приемы. При dark launch новый код работает в инфраструктуре, но результат скрыт от пользователей, например при теневом трафике. A/B-тест распределяет пользователей между видимыми вариантами для сравнения метрик; дальнейшее описание относится к нему.

#### Основные принципы&#58;

{/* prettier-ignore */}
1. <strong>Разделение трафика</strong>&#58;

    - Трафик между двумя или более версиями приложения распределяется случайным образом или на основе заданных критериев (например, географическое расположение пользователя).

1. <strong>Сравнение результатов</strong>&#58;

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

1. <strong>Принятие решения</strong>&#58;

    - На основе полученных данных принимается решение о том, какая из версий лучше соответствует требованиям бизнеса и нуждам пользователей.

1. <strong>Мониторинг и откат</strong>&#58;

    - При возникновении проблем или неудовлетворительных результатов, может быть быстро принято решение о сокращении или полном прекращении использования новой версии.

#### Преимущества&#58;

- <strong>Постепенное внедрение</strong>&#58; Позволяет постепенно проверять и
  внедрять изменения без риска нарушения работы всего приложения.

- <strong>Обратная связь</strong>&#58; Позволяет быстро получать обратную связь
  от пользователей и мониторить результаты в реальном времени.

- <strong>Оптимизация производительности</strong>&#58; Помогает оптимизировать
  новые функции или изменения на основе реальных данных об их эффективности.

#### Использование&#58;

A/B-тестирование применяют для сравнения влияния вариантов на продуктовые метрики. Dark launch позволяет проверить работу нового компонента без показа его результата пользователю.

:::note[Ссылки для изучения]

1. [Стратегии деплоя в Kubernetes](https://habr.com/ru/companies/flant/articles/471620/)
   :::

---

## <strong>Что такое</strong> <code>SLA</code><strong>,</strong> <code>SLO</code><strong>,</strong> <code>SLI</code><strong>?</strong> [#q-14bee738d69b816aa4defe4c19ae6ba6]

<code>SLA</code> <strong>(Service Level Agreement)</strong> — это формальное
соглашение между поставщиком услуг и клиентом, которое определяет уровни
обслуживания, которые должны быть предоставлены. SLA включает в себя
обязательства по производительности, надёжности и доступности услуги, а также
меры ответственности в случае нарушения условий соглашения.

SLO (Service Level Objective) — целевой уровень качества сервиса, выраженный ограничением на SLI за заданный период, например 99,9 % успешных запросов за 30 дней. SLO может быть внутренней целью и не обязан входить в SLA.

<code>SLI</code> <strong>(Service Level Indicator)</strong> — это конкретный
параметр или метрика, используемая для измерения производительности, надёжности
или доступности сервиса. SLI являются основой для определения SLO и включают в
себя такие показатели, как время отклика, процент доступности, частота ошибок и
т.д.

#### Краткое обобщение&#58;

- <code>SLA</code> определяет обязательства поставщика услуг перед клиентом.

- <code>SLO</code> является целью по качеству обслуживания, определяющей
  ожидаемый уровень.

- <code>SLI</code> — это конкретные метрики, используемые для измерения и оценки
  достижения <code>SLO</code>.

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

:::note[Ссылки для изучения]

1. [Понимание взаимоотношений между SLA, SLO, SLI](https://habr.com/ru/companies/nixys/articles/595259/)
   :::

---

## <strong>Какие инструменты</strong> <code>CI&#47;CD</code> <strong>вам известны?</strong> [#q-14bee738d69b810e932bf02e4b22152d]

Вот несколько известных инструментов <code>CI&#47;CD</code>&#58;

1. <strong>Jenkins</strong>&#58; Один из самых популярных и гибких инструментов
   для автоматизации процессов CI/CD. Поддерживает множество плагинов и
   интеграций.

1. <strong>GitLab CI/CD</strong>&#58; Встроенный инструмент для непрерывной
   интеграции и развертывания в GitLab. Позволяет определить и автоматизировать
   пайплайны CI/CD прямо в репозитории.

1. <strong>CircleCI</strong>&#58; Облачная платформа для автоматизации сборки,
   тестирования и развертывания приложений. Поддерживает интеграцию с GitHub и
   Bitbucket.

1. <strong>Travis CI</strong>&#58; Сервис для автоматизации сборки и
   тестирования GitHub-репозиториев. Легко настраивается и используется для
   развертывания на популярных облачных платформах.

1. <strong>TeamCity</strong>&#58; Мощная платформа для непрерывной интеграции и
   развертывания от JetBrains. Поддерживает различные языки программирования и
   интеграции с различными инструментами разработки.

1. <strong>Bamboo</strong>&#58; Интеграционный сервер от Atlassian,
   предназначенный для автоматизации процессов CI/CD. Имеет интеграцию с другими
   инструментами Atlassian, такими как Jira и Bitbucket.

1. <strong>GitHub Actions</strong>&#58; Встроенный инструмент для автоматизации
   процессов CI/CD в GitHub. Позволяет создавать и запускать рабочие процессы
   напрямую из репозитория.

:::note[Ссылки для изучения]

1. [Руководство по CI/CD для новичка](https://habr.com/ru/articles/498436/)
   :::

---

## <strong>Как обеспечить непрерывность и стабильность деплоя приложения?</strong> [#q-14bee738d69b813eb14aeeaee44d0dcc]

Чтобы обеспечить непрерывность и стабильность деплоя приложения, следует учитывать несколько ключевых аспектов&#58;

1. <strong>Автоматизация процессов CI/CD</strong>&#58; Используйте
   специализированные инструменты для автоматизации сборки, тестирования и
   развертывания приложений. Это позволяет уменьшить риск человеческих ошибок и
   обеспечить однородность процессов.

1. <strong>Контроль версий</strong>&#58; Используйте систему контроля версий
   (например, Git) для отслеживания изменений кода и управления версиями
   приложения. Это позволяет легко возвращаться к предыдущим версиям в случае
   необходимости.

1. <strong>Тестирование</strong>&#58; Проводите автоматизированные тесты на всех
   этапах CI/CD, включая модульное тестирование, интеграционное тестирование и
   тестирование производительности. Это помогает выявить проблемы до
   развертывания в продакшн.

1. <strong>Мониторинг и логирование</strong>&#58; Внедрите системы мониторинга и
   сбора логов, чтобы оперативно реагировать на проблемы и быстро выявлять их
   причины. Мониторинг также помогает отслеживать работоспособность приложения
   после развертывания.

1. <strong>Разделение окружений</strong>&#58; Используйте отдельные окружения
   для разработки, тестирования и продакшна. Это помогает минимизировать риски
   внесения изменений в рабочее приложение и обеспечивает контроль за процессом
   развертывания.

1. <strong>Резервное копирование и откат</strong>&#58; Создавайте резервные
   копии данных и предусмотрите механизмы быстрого отката к предыдущей
   стабильной версии приложения в случае возникновения проблем.

1. <strong>Непрерывное улучшение процессов</strong>&#58; Внедряйте практики
   DevOps и Agile для постоянного улучшения процессов разработки, тестирования и
   развертывания. Это позволяет быстрее реагировать на изменения и повышать
   качество проектов.

:::note[Ссылки для изучения]

1. [Руководство по CI/CD для новичка](https://habr.com/ru/articles/498436/)
   :::

---

## <strong>С какими проблемами при деплое продукта вы сталкивались? Как митигировали?</strong> [#q-14bee738d69b81579923edc4231cf6ff]

На собеседовании расскажите о реальном случае&#58; что сломалось, как вы заметили проблему, что сделали и чем подтвердили восстановление. Ниже — примеры возможных ситуаций, а не готовый рассказ о вашем опыте.

1. <strong>Проблемы совместимости и зависимостей</strong>&#58; Некоторые
   библиотеки или зависимости могли не совместимы с целевой средой или с другими
   компонентами проекта. Для их решения мы использовали виртуальные окружения и
   контейнеризацию, чтобы изолировать зависимости и минимизировать конфликты.

1. <strong>Неожиданные ошибки в продакшене</strong>&#58; Некоторые ошибки
   проявлялись только после развертывания в реальной среде из-за специфических
   условий использования или нагрузки. Для быстрого реагирования мы развернули
   мониторинг и системы сбора логов, чтобы оперативно выявлять и исправлять
   проблемы.

1. <strong>Проблемы с производительностью</strong>&#58; Новые функции или
   изменения могли повлиять на производительность приложения. Для их
   идентификации и решения мы использовали профилирование кода, анализ запросов
   к базе данных и мониторинг производительности.

1. <strong>Откат изменений</strong>&#58; В некоторых случаях необходимо было
   быстро откатывать изменения из-за критических ошибок или неожиданных побочных
   эффектов. Мы разработали и протестировали процедуры аварийного отката и
   резервного копирования данных, чтобы минимизировать простои и негативное
   влияние на пользователей.

1. <strong>Непрозрачность процесса деплоя</strong>&#58; В команде возникали
   проблемы с пониманием текущего состояния деплоя и его этапов. Мы внедрили
   систему автоматизированного отслеживания статусов задач в процессе
   развертывания и использовали инструменты для визуализации процессов CI/CD.

Завершите свой пример конкретным результатом и изменением процесса, которое снизило риск повторения проблемы.

:::note[Ссылки для изучения]

1. [Руководство по CI/CD для новичка](https://habr.com/ru/articles/498436/)
   :::
