随着现代应用微服务化,客户端的请求往往需要服务器端多个组件的协调工作。
事务的处理是由分布式的服务架构完成,在这个过程中,问题的定位变得较为困难,我们需要梳理组件之间的依赖,并准确定位到问题所在。
这时候我们需要借助一些手段实现问题的定位和跟踪。
通常的做法有两种:
- 静态链路拓扑绘制
在系统交付之前,我们需要对系统的各个组件及相互关系有个比较清晰的认识,能够绘制并展示各个模块的调用关系。
通过挥着组件链路拓扑能够帮助我们从理性的角度白盒方式定位问题。
这个思路适合于业务开发团队,因为自己对自己的系统有足够清晰的认识,能够更快速定位问题。 - 动态链路跟踪
通过在日志中添加traceID的方式跟踪调用关系。各个模块、组件运行过程中都使用同一个ID,这样方便可视化整个调用链路。
除了添加traceID这种针对单次request的定位能力,我们还可以添加模块标识。显式的勾勒出组件依赖关系。
不同组件通过特定的日志收集工具将日志汇总到ELK统一日志平台实现检索。
这里的4个策略,实际就是以上两种做法。
追踪的可以不止链路(日志),也可以是metrics,运行指标。
例如某个模块的性能指标变差,也是可以通过链路追踪来解决的。