Akka- Как масштабировать при использовании TimerBasedThrottler и RoundRobinRouter
У меня есть дизайн, в соответствии с которым Supervisor Actor создает Актера на основе Akka. TimerBasedThrottler
учебный класс. Этот Actor динамически создает дочерние Actor для выполнения запросов веб-служб к вышестоящим системам. Это работает отлично в небольшом масштабе, однако, поскольку количество запросов начинает формироваться, мои почтовые ящики Actor начинают расти, и время отклика ухудшается.
Что мне нужно, так это способность создавать RoundRobinRouter
который будет загружать запросы баланса в более чем один экземпляр Supervisor. Однако мне нужно TimerBasedThrottler
быть единым экземпляром, который совместно используется каждым экземпляром Actor, созданным RoundRobinRouter
,
Может ли кто-нибудь помочь мне с тем, как я могу использовать RoundRobinRouter
создать новые экземпляры Actor супервизора, передаваемые в одном экземпляре TimerBasedThrottler
?
2 ответа
Ваше описание кажется противоречивым: регулирование ограничит число запросов, которые могут быть обработаны, и добавление маршрутизатора перед ним не поможет, поскольку ограничение должно быть наложено на всю группу участников.
Когда ваша система имеет ограничение емкости, подобное этому, очень важно встроить управление потоком: ваш супервизор должен будет отслеживать количество невыполненных запросов и ограничивать его, чтобы время отклика оставалось ниже требуемого предела. Если поступает больше запросов, вы ничего не можете сделать, кроме как отклонить их (т.е. сразу же отправить отрицательный ответ).
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 .