美文网首页
Service chain丢失问题排查

Service chain丢失问题排查

作者: captain_fu | 来源:发表于2019-07-16 20:52 被阅读0次

    Service chain背景:
    带在请求的header上的信息,用来标记当前请求所属环境。支持Dubbo,消息队列,Rest。
    比如A调用B,如果A,B都在环境1中,那么走环境1中的A,B实例。如果环境1中没有B实例,走基础环境的B实例,以此来做环境隔离。

    prj环境:
    相互隔离的项目环境。
    StockCenter、trade-core:应用名称。
    etcd:注册中心,类似Zookeeper。

    sc-context:存储Service chain上下文。

    初步现象:ZanProxy配置prj环境,prj环境StockCenter部署成功,扣减一直走到StockCenter的基础环境。

    初步诊断:
    1. StockCenter扣减的请求走到了基础环境。
    2. 怀疑是Service Chain标识中途丢失,查看StockCenter扣减日志,确实没有prj的标。其他环境过来的请求是有prj的标的。
    3. 通过调用链排查,在扣减之前的调用链是完整的,到trade-core调用StockCenter调用链丢失。调用链丢失的问题是另外一个问题。
    4. debug prj环境的trade-core,可以走到,说明到trade-code是正常的,问题出现trade-code调用StockCenter。
    5. 查看etcd接口注册信息,发现StockCenter扣减接口注册正常,排除接口注册问题。

    进阶诊断:
    1. 找框组同学排查,走远程debug trade-core排查.
    2. 远程debug效率较低,先通过调用链找线索。
    3. trade-core链路中没有异步逻辑,排除异步造成的sc-context丢失。
    3. trade-core在调用StockCenter之前有一系列的调用,在进行了有赞云调用之后,sc-context信息丢失,怀疑这一步出现问题。
    4. 使用抓包工具到prj环境的trade-core中进行抓包,定位到修改sc-context的代码位置。
    5. 打开有赞云相应类源码,发现确实有读取sc-context进行修改的操作,并且丢失了部分信息。

    解决:
    1. 找到有赞云同学,修改代码,重新打包并发布了trade-core,问题解决。

    总结:
    1. 一开始就应该怀疑是Service Chain问题,定位sc-context丢失的地方。
    2. 抓包工具要学好,看框架组排查问题效率很高。

    相关文章

      网友评论

          本文标题:Service chain丢失问题排查

          本文链接:https://www.haomeiwen.com/subject/nndxlctx.html