有没有办法维持与平静的Web服务的连接?

问题描述:

我正在研究一个巨型应用程序。我们在我们的路线图中有一些功能,我认为这些功能可以适用于微服务架构,并且正在为此构建它们。有没有办法维持与平静的Web服务的连接?

我的问题:应用程序在峰值时间每秒处理〜150个请求。这些请求来自始终保持活动状态的原始TCP/IP连接。我们有非常严格的延迟要求(我们的大部分要求都在25-50毫秒内响应)。每个请求都需要消耗1到多个微服务。我担心的是,消耗多个宁静的Web服务(特别是每次使用服务时创建/销毁连接以及TLS握手)都会导致处理这些请求的时间过长。

我的问题:当多个线程使用该Web服务时,是否有可能(并且有最佳做法)维护连接到一个宁静的Web服务的状态?每个使用Web服务的请求都是自包含的,但我们只需保持物理连接处于活动状态。

+0

假设您使用HTTP作为传输协议,如果客户端和服务器都支持HTTP 2,则可能会获得所需内容。 –

JVM自然地为HttpURLConnection池池(通过http://docs.oracle.com/javase/8/docs/technotes/guides/net/http-keepalive.html)HTTP连接。所以,应该为JAX-WS和JAX-RS开箱即用。通常,其他基于非HttpURLConnection的框架(如netty)也支持http连接池。所以很可能你不需要在代码中自己担心这一点。你需要计算你需要连接多少个连接,但这是一种配置。

通过嗅探来自应用程序的流量tcpdumpWireshark并获取结果后检查是否没有TCP FIN发生,您可以检查TCP连接是否未关闭。