第三方验证码服务故障,注册接口的请求全部卡在三秒超时上,四十分钟内一个新用户都没进来,监控上只有 504,没有降级记录。日志里能对上时间点,这种反而好排。
验证码校验是同步调用,超时设成三秒且没有捕获异常,错误直接冒到接口层。也没有开关能在故障时切到备用方案。这一点先确认清楚,后面就不用反复试。
try {
ok = await verifyCaptcha(token, {timeout: 800});
} catch (e) {
ok = true; risk.mark('captcha_down');
}
「验证码服务降级」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。
改完顺手把文档补一句,省得下次自己重新推一遍。
处理上按这个顺序:给验证码调用设 800 毫秒超时,失败走备用校验或放行加风控标记;加一个配置开关,出问题能手动关掉验证码;压测时把验证码服务打成超时,看注册是否还能走。
结果对不对很好判断,验证码服务挂掉时注册仍能完成,日志里能看到降级标记。
