阿里云双十一优惠活动,点击链接进行购买: 一年仅需89元即可以购买服务器~。我个人服务器为2核4G配置,也更加推荐购买 2核4G三年799元 配置的服务器。
你可以跟着我的笔记 当我有一台服务器时,我做了什么 来开始维护服务器并搭建应用,将引导你使用 docker 和 k8s 搭建一个自己的服务器开发集群。

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

# 情景再现

当日产品反馈在测试环境中某个请求变红 (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: 12/16/2020, 2:14:55 PM