The Twelve-Factor App

Манифест, опубликованный Heroku в 2011. Описывает принципы cloud-native приложений. Эти 12 правил — фундамент для Docker, Kubernetes, AWS, любого современного облака.

Если приложение следует 12-factor — оно легко контейнеризуется, масштабируется, деплоится. Если нет — будет постоянная боль.

I. Codebase

Один codebase, отслеживаемый в системе контроля версий, много deploys.

II. Dependencies

Явно декларируй и изолируй зависимости.

III. Config

Конфигурация — в окружении.

Это самый часто нарушаемый принцип.

IV. Backing services

Backing services — это attached resources.

V. Build, release, run

Строго разделяй стадии сборки и запуска.

Каждый release — immutable, неизменяем. Откат = переключение на старый release.

VI. Processes

Приложение — один или несколько stateless процессов.

⚠️ Антипаттерн

Локальный кэш в памяти, sticky sessions в Nginx, файлы загрузок на локальный диск. Это всё убивает horizontal scaling.

VII. Port binding

Экспорт сервисов через port binding.

VIII. Concurrency

Scale out через process model.

IX. Disposability

Максимизируй robustness через быстрый старт и graceful shutdown.

X. Dev/prod parity

Держи dev, staging, production максимально похожими.

XI. Logs

Логи — это event streams.

// Хорошо
log.info({user_id: 42, action: "login", duration_ms: 234})

// Плохо
print("User 42 logged in (took 234ms)")

XII. Admin processes

Админ задачи — отдельные one-off процессы.

Расширения «15-Factor»

Некоторые добавляют 3 фактора для современных приложений:

  1. API first — API определён до реализации (OpenAPI)
  2. Telemetry — метрики, трейсы, логи как first-class
  3. Authentication and authorization — не отложенная мысль

Чек-лист 12-factor

Источник

12factor.net — оригинальный манифест. Прочитай целиком, 30 минут.