Scaling
Процеси та конкурентність є ключовими аспектами розробки сучасних програмних додатків, особливо у контексті 12-факторних додатків. У цьому лекційному матеріалі розглянемо, для чого потрібні Processes & Concurrency, які проблеми вони вирішують, як вони спрощують розробку та підтримку програмного забезпечення, роль черг та дотримання принципу Stateless у розробці додатків.
Фактор VII: Processes (Процеси)
У 12-факторній методології, додаток складається з одного або декількох процесів, які викладаються в операційній системі. Кожен процес відповідає за конкретну функцію або задачу.
Для чого це потрібно?
- Масштабованість: Легше масштабувати додаток, запускаючи додаткові екземпляри процесів.
- Гнучкість: Кожен процес може бути сконфігурований і запущений незалежно, що дозволяє легше управляти і виправляти проблеми.
Проблеми, які вони вирішують
- Монолітність: Поділ додатка на окремі процеси дозволяє уникнути створення монолітних структур, які важко підтримувати.
- Склейку: Окремі процеси можна легко зв’язати через API або черги, що дозволяє легше замінювати або масштабувати окремі компоненти.
Фактор VIII: Concurrency (Конкурентність)
Конкурентність досягається шляхом запуску множини процесів одночасно, використовуючи виконавчі блоки додатка.
Для чого це потрібно?
- Підвищення продуктивності: Одночасне виконання декількох задач підвищує використання ресурсів та зменшує час очікування.
- Покращення відмовостійкості: Якщо один процес падає, інші можуть продовжувати роботу, зменшуючи вплив на користувача.
Проблеми, які вони вирішують
- Обмеження ресурсів: Завдяки тому, що процеси можуть працювати в паралель, можна краще використовувати ресурси системи.
- Затори та блокування: Поділ роботи на окремі процеси дозволяє уникнути заторів, які можуть виникати в монолітних системах.
Використання черг (Queues)
Як черги допомагають?
- Асинхронність: Черги дозволяють процесам обмінюватися даними асинхронно, що зменшує блокування і підвищує загальну продуктивність.
- Надійність: Випадки падіння одного процесу не впливають на загальну стабільність системи, оскільки черга зберігає повідомлення до обробки іншим процесом.
Принципи використання черг
- Іденпотентність: Операції повинні бути іденпотентними, тобто виконання однієї операції кілька разів повинно мати той самий ефект.
- Життєвий цикл повідомлень: Управляйте терміном життя повідомлень, включаючи повторне відправлення у випадку помилок.
Stateless-принцип
Для чого це потрібно?
Stateless-принцип полягає в тому, що кожен екземпляр процесу повинен бути незалежним і не залежати від внутрішнього стану.
Як це спрощує роботу
- Легкість масштабування: Оскільки процеси не мають внутрішнього стану, їх можна легко запустити або зупинити в необхідній кількості.
- Простота відновлення: Немає необхідності відновлювати стан між перезапусками, що спрощує обслуговування і забезпечує відмовостійкість.
Висновок
Процеси та конкурентність є базовими принципами, які дозволяють створювати масштабовані, надійні та еф