Есть некий сервис, который на входе принимает конфиг, на основании конфига генерирует запрос к БД, получает задачи для обработки и обрабатывает файлы.
Чтобы ускорить обработку сделал 8 конфигов, и запускаю 8 экземпляров сервиса. По количеству ядер.
Вылезла проблема - сложно сделать так, чтобы конфиги равномерно распределяли задачи. Может получиться что для первого конфига 1000 файлов, а для всех остальные по 100 (условно).
Появилась идея, сделать какой-то сервис, который выгребает порцию файлов и просто равномерно раскидывает их каждому приложению.
Одно приложение принимает конфиг, делает запрос к БД, получает задачи и пихает их в RabbitMQ.
Второе приложение в нескольких потоках (или инстанцах, можно даже на разном железе) последовательно читает очередь RabbitMQ с задачами, и выполняет их. Тем самым равномерно распределяя задачи по исполнителям.