Operations

The Twelve-Factor App: Введение

В наши дни программное обеспечение обычно распространяется в виде сервисов, называемых веб-приложения (web apps) или software-as-a-service (SaaS). Приложение двенадцати факторов — это методология для создания SaaS-приложений, которые:

  • Используют декларативный формат для описания процесса установки и настройки, что сводит к минимуму затраты времени и ресурсов для новых разработчиков, подключённых к проекту.
  • Имеют соглашение с операционной системой, предполагающее максимальную переносимость между средами выполнения.
  • Подходят для развёртывания на современных облачных платформах, устраняя необходимость в серверах и системном администрировании.
  • Сводят к минимуму расхождения между средой разработки и средой выполнения, что позволяет использовать непрерывное развёртывание (continuous deployment) для максимальной гибкости.
  • И могут масштабироваться без существенных изменений в инструментах, архитектуре и практике разработки.
    Методология двенадцати факторов может быть применена для приложений, написанных на любом языке программирования и использующих любые комбинации сторонних служб (backing services) (базы данных, очереди сообщений, кэш-памяти, и т.д.).

Предпосылки

Участники, внёсшие вклад в этот документ, были непосредственно вовлечены в разработку и развёртывание сотен приложений и косвенно были свидетелями разработки, выполнения и масштабирования сотен тысяч приложений во время нашей работы над платформой Heroku.

В этом документе обобщается весь наш опыт использования и наблюдения за самыми разнообразными SaaS-приложениями в дикой природе. Документ является объединением трёх идеальных подходов к разработке приложений: уделение особого внимания динамике органического роста приложения с течением времени, динамике сотрудничества разработчиков, работающих над кодовой базой приложения, и устранение последствий эрозии программного обеспечения.

Наша мотивация заключается в повышении осведомлённости о некоторых системных проблемах, которые мы встретили в практике разработки современных приложений, а также для того, чтобы предоставить общие основные понятия для обсуждения этих проблем и предложить набор общих концептуальных решений этих проблем с сопутствующей терминологией. Формат навеян книгами Мартина Фаулера (Martin Fowler) Patterns of Enterprise Application Architecture и Refactoring.

Кому следует читать этот документ?

Разработчикам, которые создают SaaS-приложения. Ops инженерам, выполняющим развёртывание и управление такими приложениями.

Подробнее о методологии The Twelve-Factor App

I. Кодовая база
Одна кодовая база, отслеживаемая в системе контроля версий, – множество развёртываний.
II. Зависимости
Явно объявляйте и изолируйте зависимости.
III. Конфигурация
Сохраняйте конфигурацию в среде выполнения.
IV. Сторонние службы (Backing Services)
Считайте сторонние службы (backing services) подключаемыми ресурсами.
V. Сборка, релиз, выполнение
Строго разделяйте стадии сборки и выполнения.
VI. Процессы
Запускайте приложение как один или несколько процессов не сохраняющих внутреннее состояние (stateless).
VII. Привязка портов (Port binding)
Экспортируйте сервисы через привязку портов.
VIII. Параллелизм
Масштабируйте приложение с помощью процессов.
IX. Утилизируемость (Disposability)
Максимизируйте надёжность с помощью быстрого запуска и корректного завершения работы.
X. Паритет разработки/работы приложения
Держите окружения разработки, промежуточного развёртывания (staging) и рабочего развёртывания (production) максимально похожими.
XI. Журналирование (Logs)
Рассматривайте журнал как поток событий.
XII. Задачи администрирования
Выполняйте задачи администрирования/управления с помощью разовых процессов.