Twelve-factor app: двенадцать правил для облачных приложений
Коротко: Набор из двенадцати принципов, позволяющих легко эксплуатировать, масштабировать и поставлять приложения в облаке.
Подробнее: «Twelve-factor app» сформулировали около 2011 года разработчики платформы Heroku. Он описывает, как строить ПО как услугу, которую можно запускать на новых серверах без ручной работы, запускать параллельно в нескольких экземплярах и часто обновлять. Многие правила и сегодня без изменений применимы к контейнерам и Kubernetes.
Подробности
Двенадцать факторов вкратце
- Кодовая база (Codebase): одна кодовая база в системе контроля версий, много деплоев.
- Зависимости (Dependencies): объявлять явно и изолировать (например,
package.json). - Конфигурация (Config): в переменных окружения, а не в коде.
- Вспомогательные сервисы (Backing services): базу данных, почту и т. п. рассматривать как заменяемые подключённые ресурсы.
- Сборка, релиз, запуск (Build, release, run): строго разделять.
- Процессы (Processes): без состояния, данные хранить в сервисе.
- Привязка к порту (Port binding): сервис публикует себя через порт.
- Параллелизм (Concurrency): масштабировать вширь через большее число процессов.
- Одноразовость (Disposability): быстрый запуск, чистое завершение.
- Паритет разработки и production (Dev/prod parity): держать окружения как можно более похожими.
- Журналы (Logs): писать как поток событий в stdout.
- Административные процессы (Admin processes): разовые задачи (миграции) как отдельные процессы.
Пример: конфигурация
Вместо того чтобы записывать адрес базы данных в код:
const db = connect(process.env.DATABASE_URL);Один и тот же код тогда работает локально, в тестировании и в production; различается только переменная окружения. Секретам не место в репозитории.
Почему важна безсостоятельность
Если процесс хранит сеансы в собственной памяти, при перезапуске что-то теряется, а балансировщик нагрузки не может свободно распределять запросы. Если состояние находится в базе данных или в Redis, процессы можно запускать и останавливать по желанию.
Оценка
Правила — ориентиры, а не законы. Особенно для фактора 11 (журналы) и фактора 3 (переменные окружения) появились новые подходы, такие как структурированные журналы и управление секретами вместо множества переменных окружения.
См. также: Переменные окружения, Docker, Конвейер CI/CD, Проверки работоспособности и корректное завершение