Найти тему

Что такое 12-факторное приложение?

12-факторное приложение – это набор лучших практик и рекомендаций по созданию современных, масштабируемых и поддерживаемых веб-приложений. Она была представлена соучредителем Heroku Адамом Виггинсом в 2011 году и с тех пор стала широко распространенной методологией разработки облачных нативных приложений. Цель 12-факторного приложения - предоставить набор принципов, которые помогут разработчикам создавать приложения, которые легко развертывать, масштабировать и поддерживать в различных средах.

К 12 факторам относятся:
1.
Кодовая база: Используйте единую кодовую базу, отслеживаемую в системе контроля версий, и развертывайте один и тот же код в различных средах.
2.
Зависимости: Явно объявляйте и изолируйте зависимости, обеспечивая согласованность сред разработки, тестирования и продакшн.
3.
Конфигурация: Храните конфигурацию в среде, а не в коде. Это помогает отделить конфигурацию от кода и позволяет легко изменять конфигурацию без модификации кода.
4.
Блокирующие сервисы: Рассматривайте вспомогательные сервисы (например, базы данных, системы кэширования и т. д.) как вложенные ресурсы и получайте к ним доступ через определенные API. Это способствует свободному соединению и упрощает переключение или обновление сервисов.
5.
Сборка, выпуск, запуск: Строго разделяйте этапы сборки, выпуска и запуска приложения. Это способствует более простому и надежному развертыванию.
6.
Процессы: Выполняйте приложение в виде одного или нескольких процессов без статического состояния. Это гарантирует, что приложения легко масштабируются, восстанавливаются и могут выполняться в различных средах.
7.
Портовая привязка: Экспортируйте сервисы через привязку портов. Приложение должно быть самодостаточным и экспортировать сервисы через порт, что делает его легкодоступным.
8.
Параллелизм: Масштабирование через модель процессов. Приложения должны иметь возможность горизонтального масштабирования за счет добавления новых процессов.
9.
Утилизация: Максимально повышайте устойчивость за счет быстрого запуска и плавного завершения работы. Приложения должны иметь возможность быстро запускаться и останавливаться, что облегчает их масштабирование и развертывание.
10.
Паритет между разработкой и производством: Обеспечьте максимальное сходство между средами разработки, постановки и производства. Различия между средами могут привести к проблемам, поэтому старайтесь свести их к минимуму.
11.
Логи: Относитесь к логам как к потокам событий. К журналам следует относиться как к потокам событий, они должны быть доступны и индексируемы.
12.
Процессы администрирования: Запускайте задачи администрирования/управления как отдельные процессы. Административные задачи должны быть отделены от основных процессов приложения.

Придерживаясь этих принципов, разработчики смогут создавать приложения, которые будут более масштабируемыми, поддерживаемыми и адаптируемыми к различным сценариям развертывания, будь то локальные серверы, виртуальные машины или облачные платформы. 12-факторные принципы работы приложений особенно актуальны в контексте облачных нативных архитектур и архитектур микросервисов.