Что такое двенадцать факторов приложения (12-Factor App)?

«Что такое двенадцать факторов приложения (12-Factor App)?» — вопрос из категории Архитектура и DevOps-практики, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

12-Factor App — это набор принципов для построения облачно-нативных, масштабируемых и поддерживаемых приложений. Я руководствуюсь ими при проектировании микросервисов и настройке CI/CD-пайплайнов.

Наиболее критичные для DevOps факторы из моего опыта:

  1. Конфигурация в окружении (III): Все конфиги (подключения к БД, API-ключи) хранятся в переменных окружения, а не в коде. Это позволяет использовать один и тот же образ для всех сред (dev, stage, prod).

    # Задание конфигурации для Docker-контейнера
    docker run -e "DB_HOST=prod-db.internal" -e "API_KEY=$(vault read -field=key secret/api)" my-app:latest
  2. Привязка портов (VII): Сервис сам объявляет порт, на котором он работает (например, :8080), а не полагается на веб-сервер контейнера. Это стандарт для Docker и Kubernetes.

  3. Равенство сред (X): Стремлюсь к максимальному сходству сред разработки и продакшена, используя одинаковые технологии (Docker, базы данных) и автоматизируя их развертывание через IaC (Terraform).

  4. Логи как потоки событий (XI): Приложение не управляет файлами логов. Оно пишет события в stdout/stderr. В Kubernetes эти потоки собираются агентами (например, Fluentd) и отправляются в централизованное хранилище вроде Loki или Elasticsearch.

Следование этим принципам упрощает оркестрацию, масштабирование и делает инфраструктуру более устойчивой.