# 上游服务不存在或未响应
# 情景再现
当日产品反馈在测试环境中某个请求变红 (status code: 400)
# 捉虫
- 该请求为 GET,拿到 curl 进行多次重放,bug 复现
- sentry 顺利接收异常,获取到错误码
- 异常为自定义异常,未携带原始异常 (originalError)
- 在本地启动后端服务,curl 重放,bug 复现
- 检索代码,根据路由及错误码定位到异常位置: 一个请求考试服务(内部服务)的接口
- 打印该考试服务异常请求的 http request/response,reponse 为 502,上游服务不存在
# 原因
内部服务无疑应该是最健壮最稳定的服务,为什么会不存在?
原因是该考试服务对个别业务后端开启了分支环境,通过在 k8s 中为分支新建 service 来部署,而这些业务后端直接请求考试服务的分支环境。
而运维同学在近一天中清理了测试环境许多无用的分支环境(避免过多资源消耗),造成误杀。
# 解决
对考试服务切对应分支,git push,CICD 中自动部署分支环境,解决问题。
# 反思
从定位到解决问题,花费了近两个小时,而排查时间本可以更短。
而瓶颈处在于需要在本地调试服务,检索代码,定位异常,这大大加大了排查问题的时间
直接原因是自定义异常中丢失了原始异常信息(originalError),从而丢失了上下文信息,如 uri/request/response,需要在本地调试来获取这些丢失的上下文