【问题标题】:Is there a way to maintain a connection to a restful web service?有没有办法保持与宁静 Web 服务的连接?
【发布时间】:2017-05-26 20:47:45
【问题描述】:

我正在开发一个单体应用程序。我们的路线图中有一些我认为适合微服务架构的功能,并且正在尝试构建它们。

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

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

【问题讨论】:

  • 假设你使用 HTTP 作为传输协议,如果客户端和服务器都支持 HTTP 2,你可能会得到你想要的。

标签: java performance web connection microservices


【解决方案1】:

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 来检查收到 HTTP 响应后 TCP 连接是否未关闭。

【讨论】:

    猜你喜欢
    • 2013-07-29
    • 1970-01-01
    • 2018-04-21
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 2019-03-17
    • 2013-07-21
    相关资源
    最近更新 更多