我在天蓝色的云上托管我的服务,有时我会在没有任何明显原因的情况下得到“BackendConnectionFailure”,经过调查,在大多数情况下,我发现此异常与自动缩放(缩小)之间几乎同时存在相关性。
根据文档,终止宽限期默认为 30 秒,就是这种情况。pod 将被标记为终止,负载均衡器将不再考虑它,因此不再接收请求。据此,如果我的服务花费的时间远少于 30 秒,则我的应用程序中不需要 prestop 挂钩或任何特殊实现(如果我错了,请纠正我)。
如果上一段是正确的,为什么这个异常会比较频繁的发生呢?我的想法是当 pod 被标记为终止并且负载均衡器不再向 pod 转发请求时,它应该这样做。
编辑1:
架构就是这样
客户端 -> 防火墙(azure) -> API(azure APIM) -> 微服务(Spring boot) -> 后端(第三方) 或 Azure RDB,具体取决于服务
我认为异常来自 APIM,我发现此异常有两种模式:
Message The underlying connection was closed: The connection was closed unexpectedly. Exception type BackendConnectionFailure Failed method forward-request
Response time 10.0 s
Message The underlying connection was closed: A connection that was expected to be kept alive was closed by the server. Exception type BackendConnectionFailure Failed method forward-request
Response time 3.6 ms