java - 有没有办法保持与静态 Web 服务的连接?

标签 java performance web connection microservices

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

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

我的问题:当多个线程使用该 Web 服务时,是否可以(并且是否有最佳实践)维持与静态 Web 服务的连接状态?每个使用 Web 服务的请求都是独立的,但我们只需保持物理连接处于 Activity 状态即可。

最佳答案

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

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

关于java - 有没有办法保持与静态 Web 服务的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44167052/

相关文章:

java - 如何在 Intellij IDEA 运行之前启用 Hibernate 字节码检测?

java - 次要垃圾回收后 JVM 元空间被填满

python - scipy.spatial.ckdtree 运行缓慢

Java 性能不一致

url - 网站 URL - 堆栈溢出如何工作?

ios - webViewDidFinishLoad() 似乎没有在 Swift 中运行

java - 从单链表扩展创建双链表 - 获取空指针

java - 从 java 在 kubernetes 上部署 docker 镜像的示例

performance - 在 CUDA profiler nvvp 中, "Shared/Global Memory Replay Overhead"是什么意思?它是如何计算的?

python - 网页抓取客户评论