Akka-как масштабировать при использовании TimerBasedThrottler и RoundRobinRouter


У меня есть проект, в котором Супервизор-актер создает актора на основе класса Akka TimerBasedThrottler. Этот субъект динамически создает дочерние субъекты для выполнения запросов веб-служб к вышестоящим системам. Это прекрасно работает в небольших масштабах, однако по мере того, как количество запросов, которые начинают накапливаться в моих почтовых ящиках актеров, начинает расти, а время отклика ухудшается.

Что мне нужно, так это возможность создать RoundRobinRouter, который будет загружать запросы баланса более чем на один экземпляр супервизора. Однако я нуждаюсь в TimerBasedThrottler быть единственным экземпляром, который совместно используется каждым экземпляром актора, созданным RoundRobinRouter.

Может ли кто-нибудь помочь мне с тем, как я могу использовать RoundRobinRouter для создания новых экземпляров supervisor Actor, проходящих в одном экземпляре TimerBasedThrottler?

2 2

2 ответа:

Ваше описание кажется противоречивым: дросселирование ограничит количество запросов, которые могут быть обработаны, и добавление маршрутизатора перед этим не поможет, потому что ограничение должно быть наложено на всю группу субъектов.

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

  1. public class Master extends UntypedActor { ----- ----- public Master() { workerRouter = this.getContext().actorOf(Worker.createWorker().withRouter(new RoundRobinRouter(8)), "workerRouter"); } // This is best Effort code executed in min. time in akka .