VIII. Паралелізм
Масштабуйте застосунок за допомогою процесів
Будь-яка компʼютерна програма після запуску представляється одним або декількома процесами. Вебзастосунки мають різні форми виконання процесів. Наприклад, PHP-процеси виконуються як дочірні процеси Apache, які запускаються в разі потреби в залежності від навантаження. Процеси Java використовують протилежний підхід, при цьому JVM забезпечує один масивний метапроцес, який резервує великий блок системних ресурсів (ЦП та памʼять) під час запуску, з паралелізмом, керованим всередині себе за допомогою потоків виконання (threads). В обох випадках запущені процеси мінімально видимі розробникам програми.
В 12-факторному застосунку, процеси є сутностями першого класу. Процеси в 12-факторному застосунку взяли сильні сторони від моделі процесів UNIX для запуску сервісів. Використовуючи цю модель, розробник може спроєктувати свій застосунок таким чином, що для обробки різних робочих навантажень необхідно призначити кожному виду робіт свій тип процесу. Наприклад, HTTP-запити можуть бути оброблені за допомогою вебпроцесу (web process), а тривалі фонові завдання оброблені робочим процесом (worker process).
Це не виключає можливості використання індивідуального мультиплексування для окремих процесів через потоки виконання віртуальної машини або асинхронні/подієві моделі в таких інструментах, як EventMachine, Twisted або Node.js. Але окрема віртуальна машина може масштабуватися тільки обмежено (вертикальне масштабування), тому застосунок також повинен мати можливість бути запущеним як декілька процесів, що працюють на кількох фізичних машинах.
Модель, побудована на процесах, дійсно показує себе з найкращого боку, коли постає необхідність масштабування. Відсутність розділених даних і горизонтальне розділення процесів 12-факторного застосунку означає, що розширення паралелізму є простою і надійною операцією. Масив типів процесів і кількість процесів кожного типу називається формацією процесів.
Процеси 12-факторного застосунку ніколи не мають ставати системними та записувати PID-файли. Замість цього вони мають покладатися на менеджер процесів операційної системи (наприклад, systemd, менеджер розподілених процесів на хмарній платформі, або в процесі розробки на такий інструмент, як Foreman) для керування потоком виводу, реагування на падіння процесів і обробку ініційованих користувачем перезавантажень чи завершення роботи.