在我们的应用程序中,我们需要每分钟对10k个不同的端点URL进行大约10k个REST api调用。之前我使用的是同步模型,但很快意识到我无法超出~2k +限制,所以我正在努力切换到异步模型。使用HttpCore-NIO lib我可以扩展到5k左右,但除此之外,我随机得到一个错误'I / O reactor已关闭',整个应用程序基本上停止处理请求。也没有看到任何堆栈跟踪,这使得调试非常困难。
所以我试图用Java作为编程语言来评估什么是最好的策略/库来实现这种规模。我应该研究哪些图书馆的建议?
答案 0 :(得分:0)
如果您的机器本身没有压力在CPU,网络等上,那么可能有一点可以帮助的是水平扩展 - 如果您可以通过1个进程实现5K,请尝试从两个进程触发请求;看看你得到了什么;你可以横向扩展多远。实现水平比例的额外编码不应该那么多。
或者尝试捕获异常并忽略它们,以防止I / O反应器关闭。试验可以忽略的东西。请参见此处的示例https://hc.apache.org/httpcomponents-core-4.4.x/tutorial/html/nio.html#d5e477,搜索“I / O reactor异常处理”
尝试线程计数 - setIoThreadCount
确保您没有使用HTTP响应进行太多处理;这将阻止反应堆。