Введение
Сегодня программное обеспечение всё чаще поставляется в виде сервиса: такие приложения называют веб-приложениями или software-as-a-service. Twelve-factor app — это методология построения SaaS-приложений, которые:
- используют декларативные форматы для автоматизации настройки, чтобы минимизировать время и затраты на подключение новых разработчиков к проекту;
- имеют чёткий контракт с базовой операционной системой, обеспечивая максимальную переносимость между средами исполнения;
- подходят для развёртывания на современных облачных платформах, устраняя необходимость в серверах и системном администрировании;
- минимизируют расхождения между разработкой и продакшеном, обеспечивая непрерывное развёртывание для максимальной гибкости;
- и способны масштабироваться без существенных изменений в инструментах, архитектуре или практиках разработки.
Методология twelve-factor применима к приложениям, написанным на любом языке программирования и использующим любую комбинацию вспомогательных сервисов (база данных, очередь, кэш в памяти и т.д.).
Предыстория
Авторы документа непосредственно участвовали в разработке и развёртывании сотен приложений, а также опосредованно наблюдали за разработкой, эксплуатацией и масштабированием сотен тысяч приложений в рамках работы над платформой Heroku.
Документ обобщает опыт и наблюдения за широким спектром SaaS-приложений в реальных условиях. Это своего рода триангуляция идеальных практик разработки приложений с особым вниманием к динамике органического роста приложения со временем, динамике совместной работы разработчиков над кодовой базой и избеганию издержек, связанных с эрозией программного обеспечения.
Цель — привлечь внимание к системным проблемам, замеченным в современной разработке приложений, дать общий словарь для обсуждения этих проблем и предложить набор широких концептуальных решений с соответствующей терминологией. Формат вдохновлён книгами Мартина Фаулера Patterns of Enterprise Application Architecture и Refactoring.
Кому стоит прочитать этот документ?
Любому разработчику, создающему приложения, работающие в виде сервиса. А также инженерам эксплуатации, которые развёртывают или управляют такими приложениями.
Двенадцать факторов
I. Кодовая база
Одна кодовая база, отслеживаемая в системе контроля версий, множество развёртываний
II. Зависимости
Явно объявляйте и изолируйте зависимости
III. Конфигурация
Храните конфигурацию в переменных окружения
IV. Вспомогательные сервисы
Относитесь к вспомогательным сервисам как к подключаемым ресурсам
V. Сборка, релиз, запуск
Строго разделяйте этапы сборки и запуска
VI. Процессы
Выполняйте приложение как один или несколько stateless-процессов
VII. Привязка к порту
Экспортируйте сервисы через привязку к порту
VIII. Параллелизм
Масштабируйтесь через модель процессов
IX. Одноразовость
Максимизируйте устойчивость за счёт быстрого старта и корректного завершения работы
X. Паритет разработки и продакшена
Делайте разработку, стейджинг и продакшен максимально похожими друг на друга
XI. Логи
Относитесь к логам как к потокам событий
XII. Административные процессы
Запускайте административные задачи как одноразовые процессы