蓝印花布的历史由来


蓝印花布的历史由来

文章插图
1、概述在分布式服务时代,服务之间的请求域调用不再是简单的直连方式,注册中心的出现,让服务治理更加便利,也对服务之间的链路追踪提出了更高的要求 。
分布式链路追踪就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等
理论支撑 。目前比较主流的链路追踪产品都是启发于google发表的Dapper , Dapper阐述了分布式系统,特别是微服务架构中链路追踪的概念、数据表示、埋点、传递、收集、存储与展示等技术细节 。
标准化 。OpenTracing(http://opentracing.io/)是一个分布式跟踪框架 。OpenTracing通过提供平台无关、厂商无关的API,使得开发人员能够方便的添加(或更换)追踪系统的实现 。目前OpenTracing正在为全球的分布式追踪,提供统一的概念和数据标准 。
2、追踪理论 - Dapper为了实现链路追踪,dapper提出了trace,span,annotation的概念 。
Trace的含义比较直观,就是链路,指一个请求经过后端所有服务的路径,每一条链路都用一个全局唯一的traceid来标识 。
span之间存在着父子关系,上游的span是下游的父span,每个span由spanid和parentid来标识,spanid在一条链路中唯一 。
一个span一般由client和server两个部分的信息组成 。按照时间顺序来解释 , client节点(或者是调用方)首先发出请求,产生”client send”(cs)事件,紧接着server节点(或者是提供方)收到请求,产生”server receive”(sr)事件,server处理完成之后回复给client,产生”server send”事件 , 最后client收到回复,产生”client receive”事件 。Client与server两个节点的span信息合并成一次完整的调用 , 即一个完整的span 。
Dapper中还定义了annotation的概念,用于用户自定义事件 。
3、通用架构分析主流的链路追踪产品架构包含以下四大模块:采样、收集、存储与展示 。

蓝印花布的历史由来

文章插图
通用架构图
3.1 采样采样包含采集埋点、链路信息的传递以及链路信息上报,目前主流的埋点方式有三种 , 分别是应用拦截埋点,探针(Java agent)埋点,服务器拦截埋点 。其中应用拦截埋点有代码侵入,需要二次开发,其他二者与服务的耦合度较低,无需侵入 。
由于每一个请求就会生成一个链路 , 为了减少性能消耗,避免存储资源的浪费,dapper并不会上报所有的span数据,而是使用采样的方式 。通过采集端自适应地调整采样率,控制span上报的数量 , 可以在发现性能瓶颈的同时,有效减少性能损耗 。
3.2 收集收集端服务接收采集到的链路信息并进行分析,链路信息的传递有两种方 , 分别是http和grpc,其中http方式简单易用、维护成本低,使用率较高,grpc性能突出,但需要客户端代码 , 维护成本较高 。
3.3 存储分布式链路追踪系统支持海量的数据库存储 。Mysql、Hbase、ElasticSearch等关系型数据库和非关系型数据库均能存储链路信息,主流的存储选择是ElasticSearch,ElasticSearch可以提供高效的数据检索 , 为数据的应用提供可靠的性能支持 。
3.4 展示目前主流的分布式链路追踪框架大多有自己的链路展示UI,内容主要有服务拓扑、调用链时序图和检索等 。
4、主流的实现方式目前比较典型的分布式链路追踪框架主要有skywalking、istio和zipkin

相关经验推荐