Deployment
Версионирование обновлений приложения
- Цель
- Не зависеть от обновлений бэка. Бэк выкатывается раньше.
- Обратная совместимость
- Простота поддержки
- Минимальное время простоя
- Проблемы
- Пользователь не обновляется
- Проверка долго, могут не пустить версию
- Новая версия приложения еще неработает, а бэк новый уже обновлен
- Версионирование варианты
- Mediator pattern
- Expand contract избыточность кода, поддержка документации
- Номер версии: В данных, api - url, header
- Правила версионирования SemVer
- Язык запрсов к API: Graphql
- Unit tests api version
Стратегии
- Надежность
- Сокращение TTM, проверка гипотез
- Canary Deployment - гибче Rolling Update, т.к. часть запросов переключается на новую версию, а часть продолжает использовать старую версию
- Dark (скрытые) или А/В-развертывания - вариация Canary стратегии . Разница между скрытым и канареечным развертыванием (Canary Deployment) состоит в том, что скрытые развертывания имеют дело с фронтендом, а не с бэкендом, как канареечные.
- Feature toggle
- сложный код, тестирование, удалять надо со временем, чтобы не было множества условий.
- Бэк выкатили, затем приложение, когда надо включили фичу.
- Стратегии включения фичи.
- Типы: релизные, экспериментальные (ав тесты), разрешающие, операционные
- Тогл правила, проверка результата
- Избегать зависимостей тоглов
- варианты
![schema](https://substackcdn.com/image/fetch/w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58c6a2b8-33c2-4094-b07c-b644227b1b20_3546x4233.jpeg)
Canary Deployment
Как обновлять кодовую базу незаметно для пользователей
- возможности управления HAProxy и реализации Graceful Shutdown в наших сервисах
- Миграции бд
- поддерживаем на бою одновременно старую и новую версии сервиса
- Заранее, на этапе разработки софта, закладывается, что даже если будут изменения в базе данных сервиса, они не будут ломать предыдущий код.
![scheme](/img/pattern/deploy/deploy.update.jpg)
Технологии