统一认证鉴权协议错误导致服务器假死大量报504和502错误

2021-11-24 16:24:10 浏览数 (1)

背景:生产环境功能测验证时大量报错504和502,准入网关假死

原因:

在压测过程中,使用了过期的cookie导致访问应用接口鉴权失败,访问接口走协议里约统一认证里面去了。里约统一认证压测多次,准入网关假死,报错504与502

排障过程:

1。通过产研初步定位,问题确认是网关配置问题,使用错误的cookie请求会去查询redis数据库,对接入网关配置文件进行修改,排查目前有出现接入请求到准入网关的时候没有负载均衡的情况,通过修改网关配置文件后复测重复压测依旧发现修改不成功,依旧会出现假死

2.拉通网关人员上会,排查出是认证过程中会走协议到wwlocal identity init onGo ,此函数会报错,经过分析排查此函数存在逻辑BUG,发现请求会重复执行wwlocal identity init规则onGo函数来res.writeHead.导致准入网关出现Crash后经产研人员修复BUG,定位到问题

切入点:RIO报错日志Cannot set headers after they are sent to the client,造成网关worker重启,回溯栈在认证规则函数onGo里,里面先执行res.writeHead(),后执行res.end(),其中res.end()即是“sent to the client”。

外围代码发现有一处if内调用onGo,if之后缺少else,再次调用onGo的,会产生先调用res.end(),再调用res.writeHead()的时序,加上else后压测情况恢复,不再遇到网关假死情况。

无else

有else

0 人点赞