Введение

Сегодня программное обеспечение всё чаще поставляется в виде сервиса: такие приложения называют веб-приложениями или 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. Административные процессы

Запускайте административные задачи как одноразовые процессы