我正在开发一个整体应用程序。我们的路线图中有一些功能,我认为这些功能适用于微服务架构,并且正在努力构建它们。
我的问题:应用程序在高峰时段每秒处理~150个请求。这些请求来自原始TCP / IP连接,这些连接始终保持活动状态。我们有非常严格的延迟要求(我们的大多数请求都在25-50毫秒内响应)。每个请求都需要消耗1到多个微服务。我担心的是,消耗多个宁静的Web服务(特别是每次使用服务时创建/销毁连接以及TLS握手)都会导致处理这些请求的延迟太多。
我的问题:当多个线程使用该Web服务时,是否有可能(并且有最佳实践)维护与restful Web服务的连接状态?每个使用Web服务的请求都是自包含的,但我们只是保持物理连接的活动。
答案 0 :(得分:1)
JVM自然地为HttpURLConnection
(通过http://docs.oracle.com/javase/8/docs/technotes/guides/net/http-keepalive.html)汇集HTTP连接。因此,开箱即用的JAX-WS和JAX-RS应该会发生。通常,其他非基于HttpURLConnection
的框架(如netty)也支持http连接池。因此,您很可能不必在代码中自己担心这一点。您需要计算您需要连接的连接数,但它是一种配置类型。
通过tcpdump
或Wireshark
嗅探来自您的应用程序的流量并在获得结果后检查是否没有TCP FIN发生,您可以在获取HTTP响应后检查TCP连接是否未关闭。