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

Принипы

1. Кодовая база

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

2. Зависимости

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

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

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

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

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

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

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

Например

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

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

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

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

Подход CI CD

6. Процессы

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

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

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

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

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

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

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

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

8. Параллелизм

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Последнее обновление