我们都知道,一次RPC调用是从客户端发起,然后请求到服务端,再响应给客户端的过程。
一般来说,一次调用过程中,主要的耗时都是在服务端的同步代码执行上。但是,有的时候,会非常诡异的出现客户端显示超时,但服务端并未超时的情况。
一般就是客户端通过监控报警报出来某个接口存在超时(比如超过3000ms还没返回),然后对应的接口提供者,他通过查看监控,以及查看自己的日志发现自己并没有超时(比如200ms就返回了)。
那么,如果出现这个现象,可能是什么原因呢?
这种是最常见的一种情况,可以通过查看TCP重传率来查看服务端及客户端的网络是否存在延迟的情况。
服务端和客户端超时配置不一致(主要):RPC调用通常既有客户端的超时设置,也有服务端的超时设置。如果客户端的超时阈值设置得比服务端的超时阈值更低(即客户端配置2000ms超时,但是服务端配置的是3000ms超时),那么即使服务端没有超时,客户端也可能因为超过其自身的超时阈值而报告超时。
客户端处理能力(次要):如果客户端在处理请求时遇到资源瓶颈(如CPU、内存限制)或者客户端正在处理大量的并发请求,可能会导致某些请求处理时间较长,从而触发出现超时的现象。