Більш висока доступність
Як згадує Кріс, ваш сервер API є єдиною точкою несправності у вашій компоновці. Що ви налаштовуєте, це інфраструктура для встановлення черги повідомлень, що багато хто раніше реалізував.
Продовжуйте той самий шлях
Ви згадуєте отримання запитів на сервер API і вставляєте завдання в MySQL БД, що працює на кожному сервері. Якщо ви хочете продовжити цей шлях, я пропоную видалити рівень сервера API і спроектувати Робітників для кожної команди прийому безпосередньо від користувачів API. Ви можете використовувати щось таке просте, як DNS з круговим доступом, щоб розподілити кожне з'єднання користувача API безпосередньо до одного з доступних робочих вузлів (і повторіть спробу, якщо з'єднання не вдалося).
Використовуйте сервер черги повідомлень
Більш надійні інфраструктури черги повідомлень використовують програмне забезпечення, розроблене для цієї мети, як ActiveMQ . Ви можете використовувати API RESTful ActiveMQ, щоб приймати запити POST від користувачів API, і непрацюючі працівники можуть отримати наступне повідомлення у черзі. Однак це, мабуть, надмірне значення для ваших потреб - воно розраховане на затримку, швидкість та мільйони повідомлень в секунду.
Використовуйте Zookeeper
Як середину, ви можете подивитися на Zookeeper , хоча це не конкретно сервер черги повідомлень. Ми використовуємо в $ work саме для цієї мети. У нас є набір з трьох серверів (аналогічних вашому API-серверу), які запускають серверне програмне забезпечення Zookeeper і мають веб-інтерфейс для обробки запитів користувачів та програм. Веб-інтерфейс, а також підключення Zookeeper до працівників мають балансир завантаження, щоб переконатися, що ми продовжуємо обробляти чергу, навіть якщо сервер не працює для обслуговування. Коли робота виконана, працівник повідомляє кластеру Zookeeper, що робота закінчена. Якщо робітник помирає, це завдання буде відправлено на іншу роботу, щоб виконати.
Інші проблеми
- Переконайтеся, що робочі місця завершені, якщо працівник не відповідає
- Як API дізнається, що робота завершена, і отримати її з бази даних працівника?
- Спробуйте зменшити складність. Вам потрібен незалежний сервер MySQL на кожному робочому вузлі, чи вони можуть спілкуватися з сервером MySQL (або реплікувати MySQL Cluster) на серверах API?
- Безпека. Чи може хтось подати роботу? Чи є аутентифікація?
- Який працівник повинен отримати наступну роботу? Ви не згадуєте, чи очікується, що завдання займуть 10 годин або 1 годину. Якщо вони швидкі, вам слід видалити шари, щоб утримати затримку. Якщо вони повільні, вам слід бути дуже обережними, щоб коротші запити не затримувалися за кількома довгими.