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