Предотвращение дублирования рабочей нагрузки с параллельными сервисами - PullRequest
1 голос
/ 28 мая 2020

Рабочий сервис извлекает ожидающие задания из базы данных и обрабатывает их одно за другим. Естественный способ ускорить это - создать несколько (произвольное количество) экземпляров рабочего сервиса (через Docker swarm или аналогичный), и заставить их все одновременно обрабатывать ожидающие задания.

что два экземпляра worker не обрабатывают одно и то же задание?

Я подумал об использовании централизованной непараллельной службы управления, которая отслеживает рабочих и отправляет им задания, вместо того, чтобы рабочие выбирали свои собственные задания, но я предполагаю, что придет время, когда менеджер сам сервис нужно будет распараллелить. Это решение, кажется, просто отодвигает проблему в будущее.

1 Ответ

0 голосов
/ 28 мая 2020

Q : «Как бы вы могли гарантировать , что два экземпляра worker не обрабатывают одно и то же задание?»

Простой:
a) монополизировать методы доступа, чтобы они не были свободно доступны, тем более со стороны любого работника (ов), плюс ...
b) позволяет только диспетчеру заданий выполнять это сопоставление заданий-2-рабочих, плюс ...
c) настраивает масштабирование диспетчера заданий на адаптивность к рабочей нагрузке (добавляя больше мощности при более высоких load), плюс ...
d) позволить диспетчеру заданий пережить некоторое сочетание совмещенных / распределенных сбоев (да, лучше всего в качестве распределенного мультиагентного самонадежного объекта)

Вот и готово:
Теперь у вас есть безопасная, адаптивно масштабируемая, надежная и защищенная от DDoS-атак интеллектуальная система нужного размера.

...