全链路设计与实践
背景 随着沪江业务的高速发展,公司服务之间的调用关系愈加复杂,如何理清并跟踪它们之间的调用关系就显的比较关键。线上每一个请求会经过多个业务系统,并产生对各种缓存或者 DB 的访问,但是这些分散的数据对于问题排查,或者流程优化提供的帮助有限。在这样复杂的业务场景下,业务流会经过很多个微服务的处理和传递,我们难免会遇到这些问题: 一次请求的流量从哪个服务而来? 最终落到了哪个服务中去? 为什么这个请求这么慢? 到底哪个环节出了问题? 这个操作需要依赖哪些东西? 是数据库还是消息队列? Redis挂了,哪些业务受影响? 设计目标 低消耗性:跟踪系统对业务系统的影响应该做到足够小。在一些高度优化过的服务,即使一点点损耗也容易察觉到,而且有可能迫使在线负责的部署团队不得不将跟踪系统关停 低侵入性:作为非业务组件,应当尽可能少侵入或者无侵入业务系统,对于使用方透明,减少开发人员的负担 时效性:从数据的收集产生,到数据计算处理,再到最终展现,都要求尽可能快 决策支持:这些数据是否能在决策支持层面发挥作用,特别是从 DevOps 的角度 数据可视化:做到不用看日志通过可视化进行筛选 实现功能 故障定位...

