系统设计

分布式追踪系统设计

  • 低侵入性,应用透明:作为非业务组件,应当尽可能少侵入或者无侵入其他业务系统,对于使用方透明,减少开发人员的负担。

  • 低损耗:服务调用埋点本身会带来性能损耗,这就需要调用跟踪的低损耗,实际中还会通过配置采样率的方式,选择一部分请求去分析请求路径。

  • 大范围部署,扩展性:作为分布式系统的组件之一,一个优秀的调用跟踪系统必须支持分布式部署,具备良好的可扩展性。

关键技术点

埋点和生成日志

埋点即系统在当前节点的上下文信息,可以分为客户端埋点、服务端埋点,以及客户端和服务端双向型埋点。埋点日志通常要包含以下内容:TraceId、RPCId、调用的开始时间,调用类型,协议类型,调用方 ip 和端口,请求的服务名等信息;调用耗时,调用结果,异常信息,消息报文等;预留可扩展字段,为下一步扩展做准备;

抓取和存储日志

日志的采集和存储有许多开源的工具可以选择,一般来说,会使用离线 + 实时的方式去存储日志,主要是分布式日志采集的方式。典型的解决方案如 Flume 结合 Kafka 等 MQ。

分析和统计调用链数据

一条调用链的日志散落在调用经过的各个服务器上,首先需要按 TraceId 汇总日志,然后按照 RpcId 对调用链进行顺序整理。调用链数据不要求百分之百准确,可以允许中间的部分日志丢失。

计算和展示

汇总得到各个应用节点的调用链日志后,可以针对性的对各个业务线进行分析。需要对具体日志进行整理,进一步储存在 HBase 或者关系型数据库中,可以进行可视化的查询。

上一页