У цьому дописі хочемо поділитись з Вами методологією, яку використовуємо при розробці додатків, а саме twelve-factor app. Це набір корисних підходів, які дозволяють спростити розробку та зробити Ваш застосунок надійним та гнучким.
- Кодова база. Ідея в тому щоб тримати кодову базу в одному репозиторії для одного застосунку. Одна та ж сама кодова база може бути використана для різних середовищ (prod, staging etc.).
- Залежності. Цей фактор говорить про те, що застосунок ніколи не повинен залежати від неявно існуючих бібліотек чи пакетів. Всі залежності застосунку мають бути задекларовані та ізольовані.
- Конфігурація. Конфігурація застосунку має зберігатись у змінних оточення. Це дозволяє легко розгорнути одну й ту ж саму кодову базу для різних оточень без зміни коду.
- Сторонні сервіси. Застосунок повинен відноситись до сторонніх сервісів, таких як бази даних, поштові сервіси, черги тощо, які повинні конфігуруватися за допомогою змінних оточення без зміни самого коду.
- Збірка та виконання. Суворо розділяйте етапи збірки, релізу та запуску застосунку. Це дасть змогу швидко зробити роллбек до попередньої версії застосунку.
- Процеси. Застосунок повинен завжди бути stateless та ніколи не зберігати свій стан. Допускається короткострокове зберігання даних в кеші або на диску.
- Прив’язка портів. Застосунок має комунікувати з навколишнім середовищем через прив’язку портів та прослуховувати всі запити, які надходять на цей порт.
- Concurrency. Масштабування застосунку відбувається за допомогою горизонтального збільшення stateless процесів, які дозволяють розподіляти та легко збільшувати навантаження.
- Утилізовуваність. У цьому факторі є декілька важливих пунктів, на які треба звернути увагу: можливість старту та зупинки застосунку у будь який час, мінімізація часу запуску, коректне завершення роботи, стійкість до раптової зупинки застосунку.
- Dev/prod паритет. Намагайтеся тримати різні середовища (dev, staging, prod) подібними. Уникайте використання різних сервісів та інструментів для середовища розробки та продакшину.
- Логування. Застосунок ніколи не повинен займатися управлінням та зберіганням логів, замість цього кожний процес записує свої логи в стандартне виведення (stdout).
- Задачі адміністрування. В проектах часто є набір разових задач таких як, міграції бази даних, запуск REPL скриптів тощо. Ключовим моментом цього фактору є те що разові задачі мають запускатися як окремі процеси в такому ж середовищі, як і тривалі задачі, і використовувати таку ж кодову базу, конфігурацію та постачатися в одному релізі.