# 上游服务不存在或未响应

# 情景再现

当日产品反馈在测试环境中某个请求变红 (status code: 400)

# 捉虫

  1. 该请求为 GET,拿到 curl 进行多次重放,bug 复现
  2. sentry 顺利接收异常,获取到错误码
  3. 异常为自定义异常,未携带原始异常 (originalError)
  4. 在本地启动后端服务,curl 重放,bug 复现
  5. 检索代码,根据路由及错误码定位到异常位置: 一个请求考试服务(内部服务)的接口
  6. 打印该考试服务异常请求的 http request/response,reponse 为 502,上游服务不存在

# 原因

内部服务无疑应该是最健壮最稳定的服务,为什么会不存在?

原因是该考试服务对个别业务后端开启了分支环境,通过在 k8s 中为分支新建 service 来部署,而这些业务后端直接请求考试服务的分支环境。

而运维同学在近一天中清理了测试环境许多无用的分支环境(避免过多资源消耗),造成误杀。

# 解决

对考试服务切对应分支,git push,CICD 中自动部署分支环境,解决问题。

# 反思

从定位到解决问题,花费了近两个小时,而排查时间本可以更短。

而瓶颈处在于需要在本地调试服务,检索代码,定位异常,这大大加大了排查问题的时间

直接原因是自定义异常中丢失了原始异常信息(originalError),从而丢失了上下文信息,如 uri/request/response,需要在本地调试来获取这些丢失的上下文

Last Updated: 2/27/2021, 8:18:04 AM