Blog/content/posts/2024/develop/12factor.md

99 lines
7.4 KiB
Markdown
Raw Normal View History

2024-10-12 17:16:17 +03:00
---
title: "12factor"
date: 2024-10-12T17:06:54+03:00
draft: true
tags: [tutorual, development]
---
Оригинал: https://12factor.net/ru/
# Введение
В наши дни программное обеспечение обычно распространяется в виде сервисов,
называемых веб-приложения (`web apps`) или software-as-a-service (`SaaS`).
Приложение двенадцати факторов — это методология для создания SaaS-приложений,
которые:
* Используют **декларативный** формат для описания процесса установки и настройки,
что сводит к минимуму затраты времени и ресурсов для новых разработчиков,
подключённых к проекту;
* Имеют **соглашение** с операционной системой, предполагающее **максимальную переносимость**
между средами выполнения;
* Подходят для **развёртывания** на современных **облачных платформах**,
устраняя необходимость в серверах и системном администрировании;
* **Сводят к минимуму расхождения** между средой разработки и средой выполнения,
что позволяет использовать непрерывное развёртывание (`continuous deployment`)
для максимальной гибкости;
* И могут **масштабироваться** без существенных изменений в инструментах,
архитектуре и практике разработки.
Методология двенадцати факторов может быть применена для приложений, написанных на любом языке программирования и использующих любые комбинации сторонних служб (backing services) (базы данных, очереди сообщений, кэш-памяти, и т.д.).
## Предпосылки
Участники, внёсшие вклад в этот документ, были непосредственно вовлечены в разработку
и развёртывание сотен приложений и косвенно были свидетелями разработки,
выполнения и масштабирования сотен тысяч приложений
во время нашей работы над платформой [Heroku](http://www.heroku.com/).
В этом документе обобщается весь наш опыт использования
и наблюдения за самыми разнообразными SaaS-приложениями в дикой природе.
Документ является объединением трёх идеальных подходов к разработке приложений:
уделение особого внимания динамике органического роста приложения с течением времени,
динамике сотрудничества разработчиков, работающих над кодовой базой приложения,
и [устранение последствий эрозии программного обеспечения](http://blog.heroku.com/archives/2011/6/28/the_new_heroku_4_erosion_resistance_explicit_contracts/).
Наша мотивация заключается в повышении осведомлённости о некоторых системных проблемах,
которые мы встретили в практике разработки современных приложений, а также для того,
чтобы предоставить общие основные понятия для обсуждения этих проблем
и предложить набор общих концептуальных решений этих проблем с сопутствующей терминологией.
Формат навеян книгами Мартина Фаулера (`Martin Fowler`)
[Patterns of Enterprise Application Architecture](http://books.google.com/books/about/Patterns_of_enterprise_application_archi.html?id=FyWZt5DdvFkC)
и [Refactoring](http://books.google.com/books/about/Refactoring.html?id=1MsETFPD3I0C).
## Кому следует читать этот документ?
Разработчикам, которые создают `SaaS`-приложения.
`Ops` инженерам, выполняющим развёртывание и управление такими приложениями.
# Двенадцать факторов
**[I. Кодовая база](https://12factor.net/ru/codebase)**
Одна кодовая база, отслеживаемая в системе контроля версий, множество развёртываний
**[II. Зависимости](https://12factor.net/ru/dependencies)**
Явно объявляйте и изолируйте зависимости
**[III. Конфигурация](https://12factor.net/ru/config)**
Сохраняйте конфигурацию в среде выполнения
**[IV. Сторонние службы (Backing Services)](https://12factor.net/ru/backing-services)**
Считайте сторонние службы (backing services) подключаемыми ресурсами
**[V. Сборка, релиз, выполнение](https://12factor.net/ru/build-release-run)**
Строго разделяйте стадии сборки и выполнения
**[VI. Процессы](https://12factor.net/ru/processes)**
Запускайте приложение как один или несколько процессов
не сохраняющих внутреннее состояние (stateless)
**[VII. Привязка портов (Port binding)](https://12factor.net/ru/port-binding)**
Экспортируйте сервисы через привязку портов
**[VIII. Параллелизм](https://12factor.net/ru/concurrency)**
Масштабируйте приложение с помощью процессов
**[IX. Утилизируемость (Disposability)](https://12factor.net/ru/disposability)**
Максимизируйте надёжность с помощью быстрого запуска и корректного завершения работы
**[X. Паритет разработки/работы приложения](https://12factor.net/ru/dev-prod-parity)**
Держите окружения разработки, промежуточного развёртывания (staging)
и рабочего развёртывания (production) максимально похожими
**[XI. Журналирование (Logs)](https://12factor.net/ru/logs)**
Рассматривайте журнал как поток событий
**[XII. Задачи администрирования](https://12factor.net/ru/admin-processes)**
Выполняйте задачи администрирования/управления с помощью разовых процессов