【发布时间】:2015-11-18 08:19:20
【问题描述】:
在 java web 应用程序中,我想通过以下要求最大化我的服务器吞吐量:
- 获取多个并发 http 请求的系统。
- 对于每个请求都需要进行一些处理。
- 每个请求处理都由几个步骤组成。
- 最后一步调用外部 API(http 调用)。
这是描述我的系统的基本图:
所以对于每个请求,我都是:
- 创建 3 个可运行文件并提交(使用我的执行程序)。
- 然后我正在等待所有 3 个完成并继续处理结果(使用 Guava ListenableFuture 进行处理)
- 处理完所有返回响应的结果后
在这个设计中,我使用的是同步 http 客户端(在调用外部服务时),这意味着我的每个任务一旦进入第三步就会被阻止,直到 http 响应返回。这可能需要数百毫秒。
我的问题是 - 我想知道使用异步 http 客户端是否可以帮助我提高吞吐量?使用异步 http 客户端,一旦我启动我的 http 请求,任务的线程就会被释放回池中并可用于其他处理,一旦返回 http 响应,就会分配一个新线程来继续任务。是否有意义?如果是这样,它是否取决于 http 外部调用完成所需的时间?如果响应在 5 毫秒后返回,我还会获得额外的吞吐量吗?有人测量过类似的东西吗?
【问题讨论】:
标签: java multithreading http asynchronous