Содержание

Должно соответствовать 12 уровням абстракции

Принипы

Кодовая база

Одна кодовая база в системе контроля версий - множество развертываний

Зависимости

Явно объявлять и изолировать зависимости

Обычно при помощи Пакетного менеджера

Сейчас зависимости выносят на уровень контейнера где запущено приложение

Конфигурация

Сохраняйте конфигурацию в среде выполнения

Сторонние службы (Baking Servises)

Считайте сторонние службы подключаемыми ресурсами

Например

База данных, внешние API и тд

Работать с ними осмысленно

Сборка, релиз, выполнение

Строго разделять стадии сборки и выполнения

Подход CI CD

Процессы

Запускать приложение как один или несколько процессов не сохраняющих внутреннее состояние (stateless)

Хранить состояние во вне (например в БД)

Проще масштабировать приложение

Приаязка портов (Port binding)

Приложение само должно слушать обращения на определённом порту

А не ожидать что там будет развернут веб-сервер

Камень в огород Python, PHP

Приложение должно быть самостоятельным

Параллелизм

Масштабировать приложение с помощью процессов

Если это stateless - просто

Если statefull - сложно

Утилизируемость (Disposabability)

Приложение должно правильно реагировать на сигналы ОС и быстро стартовать

Тогда оркестратор легко сможет стопнуть и поднять приложение

Паритет разработки/ работы приложения

Держите окружения разработки, промежуточного развёртывания (staging) и рабочего развёртывания (production) максимально похожими.

убрать различия:

  • Во времени - пишем код и сразу разворачиваем (CV/CD)

  • В персонале - разработчик пишет код, разворачивает и мониторит его работу

  • В инструментах - окружения развертывания должны быть максимально похож

Журналирование (Logs)

Рассматривать журнал как поток событий

Отправлять в stgout, откуда их будет забирать Collector log

Задачи администрирования

Выполняйте задачи администрирования/ управления

с помощью разовых процессов

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