基于调用链的服务治理系统的设计与实现
每一个节点都是一个Span,HTTP协议头添加唯一TraceID,以及调用层次和顺序的SpanID和ParentSpanID。出现故障时,通过TraceID把一整条调用链的所有调用信息收集到一个集合,通过SpanID和ParentSpanID回复调用树。
调用链结构
1. 采集器。从业务系统采集远程服务调用信息,给处理器。
2. 处理器。聚合调用链,存储在分布式存储中。分析,监控调用链。
3. 分布式存储系统
如何传递TraceID和SpanID
1. Java进程内, ThreadLocal
2. 服务之间。如果是RESTful,使用HTTP头。如果是RPC,在序列化协议添加定制化字段。
3. 主子线程间(异步)。放在子线程的ThreadLocal
4. 消息队列传递。将TraceID和SpanID增加到消息报文中。
5. 缓存数据库访问。
采集器的实现方法
1. 应用层主动推送
2. AOP推送
3. JavaAgent字节码增强
4. 代理推送