Как эффективно реализовать балансировку очереди запросов на Java?
Мне нужно реализовать сбалансированную и высокоэффективную систему очередей для обработки большого количества запросов. У меня есть класс Worker, который содержит внутреннюю очередь для выполнения запросов, и у каждого Worker есть уникальный ID от 1 до n, где n — общее количество воркеров. Если количество запросов превышает определённый порог (например, 1000), я хочу равномерно распределить эти запросы между несколькими экземплярами Worker (например, при 10 000 запросах и 1000 воркеров каждый воркер должен обрабатывать около 10 запросов). Как лучше всего реализовать это на Java? Существуют ли какие-либо встроенные классы или библиотеки, которые помогут сделать это решение одновременно эффективным и понятным? Спасибо за советы!
Такая балансировка уже реализована в ForkJoinPool, там и равномерное распределение по воркерам, и воркстилинг, и оптимальное переиспользование несущих потоков. Так что в текущей постановке задачи ответ выглядит как рекомендация просто валить запросы в FJP.
В fjp не подсунешь свою реализацию очереди, в отличии от ExecutorService. Это сильно ограничивает в реализации политики дедлайнов, когда время выполнения задачи должно укладываться в заранее определённый дедлайн, при достижении которого она эвакуируется из очереди, если ещё не никто не успел взять её.