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