我正在开发喷涂应用程序,预计它将作为实时出价工具的一部分工作,因此延迟和吞吐量都非常重要(大约80毫秒 - 最大延迟,需要N * 10000 rps)。但是现在我在c4.2xlarge类型的AWS机器上遇到了非常低的吞吐量(低于1000 rps)(8核CPU,16GB内存,ulimit - 500000)。正如我从jvm和系统监控中看到的那样,它远不受CPU,内存,磁盘IO或网络的限制。
系统主要包含请求关键路径上的两个actor池,当我增加池时,我没有看到吞吐量增加(当池增加时,我主要看到延迟增加)。所以我认为问题可能在于上下文切换。所以我很高兴看到关于演员调度员配置的建议。
有关应用程序架构的更多详细信息。
系统在请求关键路径上包含两组actor:ServerActor池(扩展sptt HttpService)和BiddingAgentActor池。 ServerActor只是将带有ask模式的消息(路由以及将来处理)发送给BidderAgentActor。 BidderAgentActor主要同步处理请求。尽可能在期间同时使用期货,但是等待最后的结果。在此过程中没有进行外部调用(没有数据库查询,没有HTTP调用......)。应用程序中还有几个actor,BiddingAgentActor会向它们发送消息以进行脱机处理。
更新
以下链接指向BidderAgentActor池和每个请求创建的BidderAgentActor的位简化代码:gist
版本: 斯卡拉 - 2.11.8 akka - 2.3.12 喷雾 - 1.3.1 操作系统:ubuntu 14.04