在java web-app中,我想根据以下要求最大化我的服务器吞吐量:
这是描述我的系统的基本图表:
因此对于每个请求我都是:
在这个设计中,我使用的是同步http客户端(在调用外部服务时),这意味着我的每个任务在进入第3步后都会被阻止,直到http响应返回。这可能需要几百毫秒。
我的问题是 - 我想知道使用异步http客户端是否可以帮助我提高吞吐量?使用异步http客户端,一旦我启动我的http请求,任务的线程就会被释放回池中并可用于其他处理,一旦http响应返回,就会分配一个新线程来继续执行任务。是否有意义?如果是这样,它是否取决于http外部调用完成所需的时间?如果响应在5ms后返回,我仍然可以获得额外的吞吐量吗?有人测量过类似的东西吗?
答案 0 :(得分:1)
假设异步客户端不是指Servlet异步上下文,而是支持Futures或Callbacks的HTTP客户端实现,使用异步http客户端不会带来任何好处。
因为您仍需要等待负责请求处理的容器线程中的HTTP客户端返回的Future。但是,如果您选择使用回调,我不确定该回调将如何重新启动容器线程以返回响应。 似乎使用回调执行此操作的正确方法是使用Servlet 3异步功能。
通过使用Servlet异步,您将能够节省容器线程的时间,并能够在相同的时间内处理更多的请求。同样在这种情况下,不需要使用异步HTTP客户端,因为HTTP API调用已经在Servlet异步线程中。
如果响应(HTTP API调用)在5ms内恢复,则不太可能获得吞吐量。也就是说我没有为此做过任何基准测试,看到这样的基准测试结果会很有意思。