Как правильно распределить периодические c задачи по микросервисам без сохранения состояния - PullRequest
0 голосов
/ 19 марта 2020

Данный сценарий:

У меня есть сервис, предоставляющий API, который позволяет мне получать элементы из БД. Эта служба полностью не имеет состояния и поэтому может быть реплицирована так, как мне хотелось бы.

Кроме того, у меня есть вторая служба, работа которой заключается в том, чтобы периодически (скажем, каждую минуту) извлекать все элементы, которые есть на данный момент. в БД (через вышеупомянутый API) и выполнить некоторые логики c для каждого элемента.

Вопрос:

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

Какой будет правильный архитектурный шаблон, чтобы сделать второй сервис без сохранения состояния и разрешить распределение логики c, сохраняя при этом, что каждую минуту я выполняю свою логи c ровно один раз для каждого элемента в БД?


Я рассмотрел вопрос об использовании очереди, но это оставляет проблему периодической загрузки элементов (или «заданий») в очередь, которая по-прежнему логична c Я не могу выполнить репликацию на несколько экземпляров, не выполнив ту же работу. Вайс.

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

Таким образом, в основном только одна служба должна запускать запланированное задание.

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

Если вы используете Java - ниже приведены некоторые варианты Spring. Должны быть похожие варианты с другими языками / фреймворками.

Один из вариантов использования Shedlock

ShedLock - библиотека Java, которая обеспечивает выполнение запланированных задач запускать только один раз в одно и то же время.

Shedlock должен нормально работать для простого варианта использования, подобного вашему.

Для более сложных или, если вы ищете более настраиваемые опции, вы можете проверить Кварц .

0 голосов
/ 20 марта 2020

Это похоже на вопрос «Как организовать производство?».

Как создать границы для моих микросервисов?

Ваш A получает из базы данных , Ваша электронная таблица B опрашивает A. Вот как я интерпретирую «выполнить некоторые логики c». Вы хотите реплицировать B, контролируя интервал опроса неограниченных его копий.

Решение: извлечь процесс опроса B из всей другой обработки и распространить эти записи среди всех электронных таблиц потребителей во время интервала опроса.

...