The Twelve-Factor App

Вступ

У наш час програмне забезпечення зазвичай поставляється у вигляді сервісів, що називаються веб-застосунки (web-apps) або software-as-a-service (SaaS). Застосунок дванадцяти факторів — це методологія для створення SaaS-застосунків, які:

Методологію дванадцяти факторів можна використати для застосунків, що написані будь-якою мовою програмування та використовують будь-яку комбінацію із сторонніх служб (бази даних, черги, кеш-пам’ять тощо).

Передумови

Люди, що працювали над цим документом, брали безпосередню участь в розробці і розгортанні сотень застосунків, і мимоволі стали свідками розвитку, експлуатації та масштабування сотень тисяч застосунків під час нашої роботи над платформою Heroku.

В цьому документі узагальнюється весь наш досвід використання і спостереження за найрізноманітнішими SaaS-застосунками “в дикій природі”. Документ об’єднує ідеальні практики розробки застосунків, особлива увага приділяється динаміці органічного росту застосунку з плином часу, взаємодії між розробниками, які працюють над кодом застосунку, та уникненню витрат при ерозії програмного забезпечення.

Наша мета полягає в тому, щоб підвищити обізнаність про деякі системні проблеми, які ми бачили в практиці розробки сучасних застосунків, а також в тому, щоб сформулювати спільні загальні поняття для обговорення цих проблем, і запропонувати набір загальних концептуальних рішень цих проблем з супутньою термінологією. Формат навіяний книгами Мартіна Фаулера (Martin Fowler) Patterns of Enterprise Application Architecture та Refactoring.

Кому слід читати цей документ?

Розробникам, які створюють SaaS-застосунки. Ops-інженерам, які виконують розгортання і керування такими застосунками.

Дванадцять факторів

I. Кодова база

Одна кодова база, що відслідковується в системі контролю версій та має багато розгортань

II. Залежності

Явно оголошуйте та ізолюйте залежності

III. Конфігурація

Зберігайте конфігурацію в середовищі виконання

IV. Сторонні служби

Вважайте сторонні служби (backing services) підключеними ресурсами

V. Збірка, реліз, виконання

Суворо відокремлюйте етапи збірки та виконання

VI. Процеси

Запускайте застосунок як один або декілька процесів без збереження внутрішньго стану (stateless)

VII. Прив’язка портів

Експортуйте сервіси за допомогою прив’язки портів (port binding)

VIII. Конкурентність

Масштабуйте застосунок за допомогою процесів

IX. Утилізовуваність

Підвищуйте надійність за допомогою швидкого запуску і коректного вимкнення

X. Dev/prod паритет

Прагніть максимальної ідентичності development, staging та production середовищ

XI. Журналювання

Сприймайте журналювання (logs) як потоки подій

XII. Задачі адміністрування

Виконуйте задачі адміністрування/керування за допомогою разових процесів