Blog/content/posts/2024/develop/12factor.md
2024-10-12 17:16:17 +03:00

99 lines
7.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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)**
Выполняйте задачи администрирования/управления с помощью разовых процессов