12-factor
12-factor app — набор из 12 практических правил, как писать приложения, которые легко разворачивать и масштабировать в облаке. Не теория, а проверенные временем рекомендации от инженеров Heroku, актуальные для любого облачного провайдера.
Самые важные на практике:
Конфигурация — через переменные окружения, не в коде:
# ✅ правильно — пароль приходит снаружи
spring:
datasource:
password: ${DB_PASSWORD}
Подробнее — в теме «env, .env не в репо».
Stateless-процессы — приложение не хранит состояние между запросами в своей памяти. Любые данные, которые должны пережить запрос, идут в базу/кэш (Redis), а не в локальную переменную процесса — это и позволяет свободно запускать несколько копий приложения (см. тему «Pod, Deployment»), любая из них может обработать любой запрос.
Логи — как поток событий, а не файл, который приложение само ротирует. Приложение просто пишет в stdout (стандартный вывод), а внешняя система (Kubernetes, ELK-стек) уже занимается сбором, хранением и ротацией логов.
Копнуть глубже
Почему именно “12 факторов”, а не просто общие советы. Каждый фактор отвечает на конкретную проблему, с которой сталкиваются при масштабировании в облаке:
- Зависимости явно объявлены (
pom.xml) — чтобы сборка была воспроизводимой на любой машине; - Параллелизм через процессы — масштабирование через запуск большего числа копий приложения, а не усложнение одного процесса;
- Утилизируемость (disposability) — быстрый старт и аккуратное завершение, чтобы Kubernetes мог безболезненно перезапускать поды когда угодно;
- Паритет dev/prod — окружение разработки максимально похоже на продакшен (тот же
docker-compose, та же версия базы), чтобы не ловить “у меня работало” сюрпризы при деплое.
Главная связь со всем пройденным. 12-factor — это не отдельная новая теория, а формализация того, что мы уже видели: профили Spring (см. тему «Профили»), stateless-подход в JWT (см. тему «JWT и OAuth2»), отказ от хранения состояния в singleton-бинах — все эти практики являются применением 12-factor принципов на практике.
• как другие изученные темы (профили, JWT) являются примерами 12-factor на практике (если дошёл до 2-го слоя).