The Twelve-Factor App - методология разработки и развертывания приложений

Автор статьи: Web Redaction ©
Сайт Автора: no
E-mail Автора: no
Дата публикации: 20.10.202?

"The Twelve-Factor App" — это методология разработки и развертывания приложений, которая была создана для того, чтобы помочь разработчикам создавать масштабируемые, портативные и легко поддерживаемые веб-приложения. Этот подход, предложенный разработчиками платформы Heroku, состоит из 12 принципов, которые можно рассматривать как рекомендации или лучшие практики для разработки современных облачных приложений.

Вот краткое описание каждого из 12 факторов доступным языком:

  1. Кодовая база (Codebase): У приложения должна быть одна кодовая база, которая отслеживается в системе управления версиями (например, Git), но развертываться эта кодовая база может в разных окружениях (например, в разработке, тестировании, продакшене).

  2. Зависимости (Dependencies): Приложение должно четко декларировать все свои зависимости (например, библиотеки, фреймворки) и не полагаться на зависимости, установленные в среде выполнения. Это делается для того, чтобы приложение могло работать в разных средах без сюрпризов.

  3. Конфигурация (Config): Вся конфигурация, которая может меняться в зависимости от окружения (например, базы данных, ключи API), должна быть отделена от кода. Чаще всего конфигурация передается через переменные окружения.

  4. Сервисы (Backing Services): Все внешние сервисы, такие как базы данных, хранилища или очереди сообщений, должны рассматриваться как прикрепляемые ресурсы. Приложение не должно зависеть от того, где конкретно находится сервис, — его можно легко заменить.

  5. Сборка, выпуск, запуск (Build, Release, Run): Процесс развертывания разделен на три четких фазы: сборка (build), создание релиза (release) и запуск (run). Это помогает обеспечить надежность и воспроизводимость процесса развертывания.

  6. Процессы (Processes): Приложение должно состоять из одного или нескольких статeless-процессов, которые не сохраняют данные между запусками. Все данные, которые нужно сохранить, должны храниться во внешних сервисах, таких как базы данных.

  7. Привязка портов (Port Binding): Приложение должно быть самообслуживающимся веб-сервером. Это означает, что приложение должно самостоятельно слушать HTTP-запросы на определенном порту, а не полагаться на внешние веб-серверы, такие как Apache или Nginx.

  8. Конкурентность (Concurrency): Приложение должно быть спроектировано так, чтобы можно было горизонтально масштабировать его путем запуска дополнительных процессов (экземпляров), а не за счет увеличения мощности одного процесса.

  9. Отказоустойчивость (Disposability): Процессы должны быть одноразовыми и быстро запускаться или завершаться, что позволяет легко управлять масштабированием и обработкой отказов.

  10. Окружения (Dev/Prod Parity): Среда разработки должна быть максимально похожа на продакшн. Это помогает избежать ситуаций, когда что-то работает на локальной машине разработчика, но ломается в продакшне.

  11. Журналы (Logs): Приложение не должно само управлять логами (например, записывать их в файлы). Вместо этого оно должно выводить логи в стандартный вывод (stdout), а уже внешние системы будут собирать и анализировать эти логи.

  12. Административные процессы (Admin Processes): Временные или одноразовые административные задачи (например, миграции базы данных) должны выполняться в отдельном процессе, а не интегрироваться в основной код приложения.

В итоге, применение принципов "The Twelve-Factor App" помогает разрабатывать приложения, которые легко масштабируются, поддерживаются и переносятся между различными облачными и локальными инфраструктурами.