Главная
Введение¶
В наши дни программное обеспечение обычно распространяется в виде сервисов, называемых веб-приложения (web apps) или software-as-a-service (SaaS). Приложение двенадцати факторов — это методология для создания SaaS-приложений, которые:
- Используют декларативный формат для описания процесса установки и настройки, что сводит к минимуму затраты времени и ресурсов для новых разработчиков, подключённых к проекту;
- Имеют соглашение с операционной системой, предполагающее максимальную переносимость между средами выполнения;
- Подходят для развёртывания на современных облачных платформах, устраняя необходимость в серверах и системном администрировании;
- Сводят к минимуму расхождения между средой разработки и средой выполнения, что позволяет использовать непрерывное развёртывание (continuous deployment) для максимальной гибкости;
- И могут масштабироваться без существенных изменений в инструментах, архитектуре и практике разработки.
Методология двенадцати факторов может быть применена для приложений, написанных на любом языке программирования и использующих любые комбинации сторонних служб (backing services) (базы данных, очереди сообщений, кэш-памяти, и т.д.).
Предпосылки¶
Участники, внёсшие вклад в этот документ, были непосредственно вовлечены в разработку и развёртывание сотен приложений и косвенно были свидетелями разработки, выполнения и масштабирования сотен тысяч приложений во время нашей работы над платформой Heroku.
В этом документе обобщается весь наш опыт использования и наблюдения за самыми разнообразными SaaS-приложениями в дикой природе. Документ является объединением трёх идеальных подходов к разработке приложений: уделение особого внимания динамике органического роста приложения с течением времени, динамике сотрудничества разработчиков, работающих над кодовой базой приложения, и устранение последствий эрозии программного обеспечения.
Наша мотивация заключается в повышении осведомлённости о некоторых системных проблемах, которые мы встретили в практике разработки современных приложений, а также для того, чтобы предоставить общие основные понятия для обсуждения этих проблем и предложить набор общих концептуальных решений этих проблем с сопутствующей терминологией. Формат навеян книгами Мартина Фаулера (Martin Fowler) Patterns of Enterprise Application Architecture и Refactoring.
Кому следует читать этот документ?¶
Разработчикам, которые создают SaaS-приложения. Ops инженерам, выполняющим развёртывание и управление такими приложениями.
Двенадцать факторов¶
I. Кодовая база¶
Одна кодовая база, отслеживаемая в системе контроля версий, -- множество развёртываний
II. Зависимости¶
Явно объявляйте и изолируйте зависимости
III. Конфигурация¶
Сохраняйте конфигурацию в среде выполнения
IV. Сторонние службы (Backing Services)¶
Считайте сторонние службы (backing services) подключаемыми ресурсами
V. Сборка, релиз, выполнение¶
Строго разделяйте стадии сборки и выполнения
VI. Процессы¶
Запускайте приложение как один или несколько процессов не сохраняющих внутреннее состояние (stateless)
VII. Привязка портов (Port binding)¶
Экспортируйте сервисы через привязку портов
VIII. Параллелизм¶
Масштабируйте приложение с помощью процессов
IX. Утилизируемость (Disposability)¶
Максимизируйте надёжность с помощью быстрого запуска и корректного завершения работы
X. Паритет разработки/работы приложения¶
Держите окружения разработки, промежуточного развёртывания (staging) и рабочего развёртывания (production) максимально похожими
XI. Журналирование (Logs)¶
Рассматривайте журнал как поток событий
XII. Задачи администрирования¶
Выполняйте задачи администрирования/управления с помощью разовых процессов