The Twelve-Factor App. Принципы архитектуры современных веб-приложений
The Twelve-Factor App — принципы архитектуры современных веб-приложений от команды Heroku. Оригинал на английском, есть перевод на русский и еще 16 языков.
Все принципы просты и каждый сфорулирован в формате короткой статьи. При нормально выстроенном процессе разработки (попросту адекватно современным требованиям) многие из изложенных принципов выполняются автоматически.
Например, трудно представить, чтобы сегодня разработка велась без системы контроля версий или чтобы нарушалась связь «одно приложение (сервис) — один репозиторий».
Но соблюдение всех принципов с течением времени, в процессе эволюции продукта, роста команды и усложнения процессов — свидетельствуют о хорошем техническом управлении и правильной организации работы.
Собственно, сами принципы:
- Кодовая база. Одна кодовая база, отслеживаемая в системе контроля версий, – множество развёртываний
- Зависимости. Явно объявляйте и изолируйте зависимости
- Конфигурация. Сохраняйте конфигурацию в среде выполнения
- Сторонние службы (Backing Services). Считайте сторонние службы (backing services) подключаемыми ресурсами
- Сборка, релиз, выполнение. Строго разделяйте стадии сборки и выполнения
- Процессы. Запускайте приложение как один или несколько процессов не сохраняющих внутреннее состояние (stateless)
- Привязка портов (Port binding). Экспортируйте сервисы через привязку портов
- Параллелизм. Масштабируйте приложение с помощью процессов
- Утилизируемость (Disposability). Максимизируйте надёжность с помощью быстрого запуска и корректного завершения работы
- Паритет разработки/работы приложения. Держите окружения разработки, промежуточного развёртывания (staging) и рабочего развёртывания (production) максимально похожими
- Журналирование (Logs). Рассматривайте журнал как поток событий
- Задачи администрирования. Выполняйте задачи администрирования/управления с помощью разовых процессов
Из введения:
«Участники, внёсшие вклад в этот документ, были непосредственно вовлечены в разработку и развёртывание сотен приложений и косвенно были свидетелями разработки, выполнения и масштабирования сотен тысяч приложений во время нашей работы над платформой Heroku.
В этом документе обобщается весь наш опыт использования и наблюдения за самыми разнообразными SaaS-приложениями в дикой природе. Документ является объединением трёх идеальных подходов к разработке приложений: уделение особого внимания динамике органического роста приложения с течением времени, динамике сотрудничества разработчиков, работающих над кодовой базой приложения, и устранение последствий эрозии программного обеспечения.
Наша мотивация заключается в повышении осведомлённости о некоторых системных проблемах, которые мы встретили в практике разработки современных приложений, а также для того, чтобы предоставить общие основные понятия для обсуждения этих проблем и предложить набор общих концептуальных решений этих проблем с сопутствующей терминологией. Формат навеян книгами Мартина Фаулера (Martin Fowler) Patterns of Enterprise Application Architecture и Refactoring».
На основе The Twelve-Factor App в блоге IBM в 2019 году вышла статья «7 Missing Factors from 12-Factor Applications» (переведенный на Хабре). Авторы предлагают дополнительные 7 принципов, преимущественно в разрезе работы с Kubernetes:
- Наблюдаемость. Приложения должны предоставлять сведения о своем текущем состоянии и показателях
- Прогнозируемость. Приложения должны обеспечивать прогнозируемость ресурсных требований
- Обновляемость. Приложения должны обновлять форматы данных с предыдущих поколений.
- Минимальные привилегии. Контейнеры должны работать с минимумом привилегий
- Контролируемость. Необходимо знать что, когда, кто и где — для всех критически важных операций
- Защищенность. Необходимо защищать приложение и ресурсы от посторонних.
- Измеримость. Эксплуатация приложений должна быть измеримой для целей квотирования и финансовых расчетов
С дополнительными 7 принципами авторы статьи выступали на KubeCon 2019 в Шанхае:
Немного о себе — меня зовут Михаил, я разработчик в крупной российской компании. Пишу про разработку, дизайн, мышление и управление продуктом в Телеграм-канале. Из недавних постов: