什么是出访连接池?
基于HTTP协议的特性,同一个长连接上数据是串行传输的,请求方发送完第一个请求后必须等到应答后才能发第二个请求。出访连接池是指API网关到后端服务的连接池。
若购买的专享实例规格为api.s1.small,最大出访连接池大小为1200,如果后端服务每个请求的应答时间在1秒时,那么这个实例最大支持的出访RPS是1200,超过1200后,如果请求进入API网关,后端连接池被占满,API网关会让请求进入一个等待队列,等待500毫秒后如果仍然拿不到连接资源,就会给客户端返回Backend service connect failed `Connection lease request time out`。这时候我们可以通过配置出访连接池告警来及时发现出访连接池不够用的问题,并及时处理。
前提条件
已经配置记录API网关的日志,文档可参考通过日志服务查看API调用日志。
配置出访连接池告警
日志服务支持根据定义的检查频率、触发条件等配置告警规则,并在满足条件时触发告警。所以我们可以使用日志服务来进行告警。
当出访连接池不够用时,API网关就会给客户端返回Backend service connect failed `Connection lease request time out`。这个报错记录在日志中的errorMessage字段中,我们可以根据这个报错信息来配置告警,配置文档可参考快速设置日志告警。
其中步骤二的查询统计对话框中,可以根据实例ID,errorId以及报错信息来配置告警,查询和分析语句设置如下。
instanceId: apigateway-cn-XXXXX and errorId : D504CO and '`Connection lease request time out`'
出访连接池不够用如何解决
升级实例规格。
若是共享实例/Serverless实例,可以先购买专享实例,再通过API分组的归属实例迁移的方式将分组迁移至专享实例。
若是专享实例,可以直接在控制台对实例进行升配操作,文档参考实例变配。
观察日志中的serviceLatency(单位ms),这个字段记录的是后端服务响应时间,也就是API网关给后端发送请求到收到后端应答的耗时(网关给后端服务发出请求开始,网关从网卡中读取到后端服务应答的最后一个包截止)。若后端服务响应较慢,也会一定程度上导致出访连接池不够用。建议用户对serviceLatency值也配置监控告警,当serviceLatency值普遍较大时,可以及时优化后端响应速度,避免出现出访连接池不够用的情况。