我们有一个微服务架构,其中来自公共(移动应用)的单个请求在内部导致对不同服务的4个HTTP调用。
我观察到的另一个副作用是,在重负荷下,我们开始遇到错误"无法分配请求的地址"。
运行>>> import statistics
>>> statistics.median([1, 2, 3])
2
显示大约6万的计数,而通常它会徘徊在3k左右。
似乎我遇到了端口耗尽。我的应用程序是使用Apache HTTP Client用Java编写的。
解决此问题的最佳方法是什么?我想的解决方案很少,但我不确定它是否是正确的方法:
有什么想法吗?
答案 0 :(得分:2)
有几个原因可能会耗尽您的可用端口。 (为避免混淆,我会将面向用户的服务器称为“应用程序”。):
Connection: close
,或者您的应用程序不支持保持活动,则应用程序将在每次请求后关闭TCP连接。当TCP连接关闭时,关闭端进入TIME_WAIT 2xMSL(参见RFC 1122 section 4.2.2.13)。默认MSL再次因OS而异,但频繁的默认值为30秒。这意味着应用程序将无法使用该端口与60秒的同一微服务进行通信。Connection: close
),它们将进入TIME_WAIT,并且最终可能会在微服务端出现端口耗尽。端口耗尽的解决方案取决于上述哪种情况发生。这是我会尝试的:
我建议先使用keep-alives和连接池。