Распределенные очереди заданий на клиента - PullRequest
1 голос
/ 26 апреля 2019

Требования: - Распределенная - Максимум одно задание обрабатывается для одного клиента - Распараллелить работу среди клиентов - Поддержка 10 000+ клиентов - Клиентские библиотеки должны быть доступны для JVM

В настоящее время моя компания использует Quartz в качествераспределенный магазин работ.Одной из приятных особенностей в этом является возможность «DisallowConcurrentExecution», в которой каждый клиент может иметь свою собственную работу, и его триггеры являются процессами в полученном заказе.Это работает хорошо, однако, поскольку мы продолжаем добавлять больше клиентов, количество рабочих мест не масштабируется, как мы надеялись (при поддержке Postgres), и объем, с которым мы читаем / пишем / пылесосим кварцевые таблицы postgres, растет слишком быстро.

Мы проводим некоторые исследования и пытаемся найти шаблон архитектуры, в котором у нас может быть очередь заданий для каждого клиента, где одновременно обрабатывается не более одной работы для каждого клиента (работа может быть распараллелена для разных клиентов.).

Мы исследовали различные подходы в RabbitMQ / SQS / Kafka / Distributed Locks и т. Д., И ни один из них не кажется подходящим для удовлетворения "одной работы на клиента" и масштабируемых требований.Одна архитектура, которая решает то, что нам нужно, - это Akka, но наша компания от нее уклоняется из-за многих проблем с развертыванием / обслуживанием, с которыми мы сталкивались в прошлом.

Одна проблема не только в обработке всехРабота в FIFO - некоторые работы могут занять некоторое время (30+), и мы не хотим, чтобы другие клиенты ожидали выполнения работы другого клиента.

...