diff --git a/content/posts/2024/develop/12factor.md b/content/posts/2024/develop/12factor.md new file mode 100644 index 0000000..6ae2a3f --- /dev/null +++ b/content/posts/2024/develop/12factor.md @@ -0,0 +1,98 @@ +--- +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)** +Выполняйте задачи администрирования/управления с помощью разовых процессов