我使用Java 8构建了一个利用TimerBasedThrottler
的Web服务客户端。在设计Actor组织模型时,我应该考虑哪些因素?
我目前正在考虑;
我目前的设计使用以下组织结构;
- RequestCoordinator (Master) singleton
----- TimerBasedThrottler (Delegator) singleton
---------- RequestSender (Worker) - one actor created per web service request
传入的请求通过限制器传递,该限制器强制执行特定的TPS。节流器和协调员都是单身人士。然后使用各个actor发送每个请求。这些演员在完成工作后会被传递给限制器并发出毒丸消息。
Akka Actors推广使用路由器;这可以改善我上面概述的设计并使其更具容错性和高性能吗? Mine是一个简单的用例,但我想探索如何使用Akka原则改进设计?
答案 0 :(得分:2)
一般来说:鼓励层次结构并观察错误内核模式,它实质上将风险较高的任务推送到叶节点。
其次,如果您尚未使用context.system.scheduler.scheduleOnce
消息,我建议您考虑使用PoisonPill
。这可以大大简化实现(主要是一边,不一定针对你帖子中的任何内容)。
此外,PoisonPill
是正确的做法吗?如果这些是在飞行中创建的短命演员,为什么不context.stop
?
您是否阅读了throttling以及balancing workload across nodes或the work pulling pattern上的文档?
<强>禁止强>
不要!如果确实必须,请按照建议使用routers。
过早优化?
您如何测试当前的解决方案?它是证明有问题还是显示资源争用?小心这不是过早优化的情况:)
当然,Akka documentation on best practices是一个很好的阅读。