存在的痛点
1: 如何定位线上故障?
a调用b, b调用c, c调用d, 这样的话就要一层一层迭代追查下去, 费时费力
2: 定位性能瓶颈?
单体架构, 可以自己打印时间, 可控, 但是别人的服务你不可控, 不好定位耗时等
3: 不合理调用, 导致扩缩容过程?
这个服务发现可以解决掉这个问题
如何知道自己的服务被哪些业务使用? 因为你的服务下线需要周知给所有相关人.
设计分布式追踪链路的难点
1: 跨进程标识, 对全链路的请求进行标识, 进行串联起来
2: 数据收集和可视化
3: 如何解决时序问题? 比如a->b->c, a,b,c在不同的机器上, 因为每个机器的时钟不是有序的.所以时间戳不可以.
3: 跨进程深度调度: 就是记录你是递归调用的还是平行调用的
4: 低成本解决上述问题, 特别是对于没有人力投入的初创公司
一般是如何做的?
1: 每个服务收到请求和处理完之后都要打日志, 有时候转发请求再到收到回复又是两个日志,
一共需要4个日志.
2: 所以日志都上报到日志中心(elk).
3: 所有请求都有一个reqid将其串联起来
4: 解决时序问题: 报头中加入id, 每经过一个链路就让id++,在reqid一样的前提下, 根据id排序即可