EMZETT.
Увійти

Twelve-factor app: дванадцять правил для хмарних застосунків

Коротко: Набір із дванадцяти принципів, що дають змогу легко експлуатувати, масштабувати й постачати застосунки в хмарі.

Докладніше: «Twelve-factor app» сформулювали близько 2011 року розробники платформи Heroku. Він описує, як будувати ПЗ як послугу, яку можна запускати на нових серверах без ручної роботи, запускати паралельно в кількох екземплярах і часто оновлювати. Багато правил і сьогодні без змін застосовні до контейнерів і Kubernetes.

Подробиці

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

  1. Кодова база (Codebase): одна кодова база в системі контролю версій, багато деплоїв.
  2. Залежності (Dependencies): оголошувати явно та ізолювати (наприклад, package.json).
  3. Конфігурація (Config): у змінних середовища, а не в коді.
  4. Допоміжні сервіси (Backing services): базу даних, пошту тощо розглядати як замінні підключені ресурси.
  5. Збирання, реліз, запуск (Build, release, run): суворо розділяти.
  6. Процеси (Processes): без стану, дані зберігати в сервісі.
  7. Прив’язка до порту (Port binding): сервіс публікує себе через порт.
  8. Паралелізм (Concurrency): масштабувати вшир через більшу кількість процесів.
  9. Одноразовість (Disposability): швидкий запуск, чисте завершення.
  10. Паритет розробки та production (Dev/prod parity): тримати середовища якомога подібнішими.
  11. Журнали (Logs): писати як потік подій у stdout.
  12. Адміністративні процеси (Admin processes): разові завдання (міграції) як окремі процеси.

Приклад: конфігурація

Замість того щоб записувати адресу бази даних у код:

const db = connect(process.env.DATABASE_URL);

Той самий код тоді працює локально, в тестуванні та в production; відрізняється лише змінна середовища. Секретам не місце в репозиторії.

Чому важлива безстановість

Якщо процес зберігає сеанси у власній пам’яті, під час перезапуску щось втрачається, а балансувальник навантаження не може вільно розподіляти запити. Якщо стан міститься в базі даних або в Redis, процеси можна запускати й зупиняти за бажанням.

Оцінка

Правила — орієнтири, а не закони. Особливо для фактора 11 (журнали) та фактора 3 (змінні середовища) з’явилися нові підходи, як-от структуровані журнали й керування секретами замість безлічі змінних середовища.

Див. також: Змінні середовища, Docker, Конвеєр CI/CD, Перевірки працездатності та коректне завершення