全部产品
Search
文档中心

API 网关:TCP连接超时时间配置

更新时间:Aug 15, 2023

一.概述

用户的客户端调用API网关的引擎,API网关的引擎调用用户的后端服务,目前都使用的是TCP连接,关于TCP连接,一些超时时间的配置会影响到整个通信过程,配置不合理会导致不同情形的问题,甚至导致故障。本文档站在API网关的角度对API网关的客户端和后端服务做出TCP连接超时时间配置的建议,以便用户更好地使用API网关,避免遇到一些已知的问题。

关于基于HTTP协议的TCP超时时间,常见的有以下几个配置:

连接建立超时时间(ConnectionTimeout)

发送请求超时时间(WriteTimeout)

读取后端服务应答超时时间(ReadTimeout)

针对ConnectionTimeout和WriteTimeout,我们可以根据网络情况配置不同的值,如果是公网通信,一般需要配置大一点,比如ConnectionTimeout和WriteTimeout都配置成10秒,如果是内网通信,则可以配置小一点。

但对于ReadTimeout,需要根据后端服务的处理时间来配置,特别是网关场景,需要配置多个ReadTimeout的时候,需要遵守一定规则。

二.使用API网关的TCP连接超时时间配置原则

下图是用户的客户端在调用API网关时链路视图,链路比较简单,客户端的请求发送给API网关,API网关将客户端的请求转发给用户的后端服务,等用户的后端服务处理完业务逻辑返回应答后,API网关将后端服务的应答返回给用户的客户端。

image.png

在这个通信过程中,有两个超时时间的配置是需要特别关注的:

1.在客户端配置的API网关应答超时时间(ClientReadTimeout)

2.在API网关配置的后端服务超时时间(APIGatewayBackendTimeout)

根据上图的图示,我们可以看到:

ClientReadTimeout = T2 + T3 + T4 + T5

APIGatewayBackendTimeout = T2 + T3 + T4

因此我们在配置ClientReadTimeout和APIGatewayBackendTimeout的时候,一定要遵守一个原则:

  • APIGatewayReaderTimeout需要大于后端业务处理时间

  • ClientReadTimeout需要大于APIGatewayBackendTimeout

我们举个例子,如果后端服务对于一个API的处理时间绝大部分在10秒以内,那么我们将APIGatewayBackendTimeout设置为10秒,ClientReadTimeout设置为15秒。确保后端应答返回的时候TCP连接没有被关闭。

警告

如果不按照这个原则进行配置,那么在用户后端服务延时较大的情况下,客户端会在API网关返回应答前提前关闭TCP连接,导致API网关在应答的时候找不到可用的TCP连接报N502RE的错误,严重的时候可能会产生雪崩效应。这个配置请务必关注。

三.具体配置

上文说到的ClientReadTimeout需要在客户端的初始化HttpClient连接池的代码中配置,拿API网关提供的SDK举例,在下面代码中配置:

image.png

上文说到的APIGatewayBackendTimeout需要在API网关定义API的后端服务的时候配置,如下图所示:

image.png