03-分布式链路追踪系统简介
·
2.1:APM概述
APM系统:即应用性能管理。
早期APM工具功能比较单一,主要监控CPU使用率,I/O,内存资源,网速等网络基础设施,后来随着中间件技术不断发展,APM也开始监控缓存,数据库,MQ等各种基础设施性能。
微服务兴起后,系统功能被模块化,再加上k8s与容器化的兴起及应用数量爆炸增长,各模块和服务的调用链路,响应时间,负载越来越不好通过传统的工具进行监控和统计,此时APM系统诞生。
2.2:APM开源产品
1、CAT
由国内美团点评开源的,基于java语言开发,目前提供java, c/c++,nodejs,ptrhon,go等语言的客户端,监控数据会全量统计,国内很多公司再用,例如美团点评,携程,拼多多。CAT需要开发人员手动在应用程序中埋点,对代码侵入性比较强。
2、Zipkin
由Twitter公司开发并开源,基于JAV语言实现,侵入性相对于CAT要低一点,需要对web.xml等相关配置文件修改,但依然对系统有一定侵入性,Zipkin可以轻松与sparing ckloud进行集成,也是spring cloud推荐的APM系统。
3、Jaeger
是Uber推出的一款开源分布式追踪系统,主要使用go语言开发,对业务代码侵入性较少。
4、Pinpoint
韩国团队开源的APM产品,运用了字节码增强技术,只需要在启动时添加启动参数可实现APM功能。
5、SkyWalking
是国人开发,2017年skywalking成为Apache国内个人孵化项目,2019年skywalking从Apache毕业成为顶级项目,目前skywalking支持java,go,python等探针,数据存储支持MYSQL,ElasticSearch等。对业务代码无侵入。
6、开源的piwik
https://piwik.com/
7、商业:
百度统计/growingio等
8、APM对比

2.3:skywalking简介
2.3.1:特点
1、实现从请求追踪,指标收集和日志记录的完整信息记录。
2、多语言自动探针,支持Java,GO,PHP等客户端
3、内置服务网格可观察性,支持从Istio+Envoy Service mesh收集和分析数据
4、模块化架构,存储,集群管理,使用插件集合都可以进行自由选择。
5、支持告警。
6、优秀的可视化效果
2.3.2:组件
OAP平台(observability Analysis Platform,可观测性分析平台)或OAP server: 是一个高度件化的轻量级分析程序,兼容各种探针receiver,流失分析内核和查询内核三部分组成。
探针:基于无侵入式的收集,并通过HTTP或者GRPC方式发送数据到OAP Server
存储实现:支持多种存储并且提供了标准接口,可支持不同的存储后端。
UI:通过标准的GraphQL(Facebook在2012开源)协议进行统计数据查询和展示。

2.3.3:协议设计模式
面向协议设计:面向协议设计是skywalking从5.X开始严格遵守的首要设计原则,组件之间使用标准的协议进行数据交互。协议有探针协议和查询协议。
2.3.3.1:探针协议
探针上报协议: 协议包括语言探针的注册,metrics数据上报,Tracing数据上报等标准,Java,Go等探针都需要严格遵守此协议的标准。
探针交互协议:因为分布式追踪环境,探针间需要借助HTTP header,MQ header在应用之间进行通信和交互,探针交互协议定义了交互的数据格式。
Service Mesh协议:是skywalking对service mesh抽象的专有协议,任何mesh类的服务都可以通过此协议直接上传指标数据,用于计算服务的指标数据和绘制拓扑图。
第三方协议:对大型的第三方开源项目,尤其是service mesh核心平台Istio和Envoy,提供核心协议适配,支持针对Istio+Envoy Service Mesh进行无缝对接。
2.3.3.2:数据查询协议
元数据查询:查询在skywalking注册的服务,服务实例,Endpoint等元数据信息;
拓扑关系查询:查询全局,或者单个服务,endspoint的拓扑图及依赖关系
Metrics指标查询:查询指标数据
聚合指标查询:区间范围均值查询及Top N排名数据查询等
Trace查询:追踪数据的明细查询
告警查询:基于表达式,判断指标数据是否超出阈值。
2.3.4:skywalking设计
模块化设计:
探针负责收集数据
前端负责展示数据
OAP Server负责从后端存储读写数据
后端存储负责持久化数据
轻量化设计:
skywalking在设计之初提出了轻量化设计理念,skywalking使用了最轻量级的jar包模式,实现了强大的数据处理和分析能力,可扩展能力和模块化能力。
2.3.5:优势
兼容性好:
支持传统的微服务部署架构dubbo和spring cloud,也支持云原生中的istio和envoy.
易于部署和后期维护:
组件化,可以自定义部署,后期横向扩容简单
高性能:
每天数T的数据无压力
易于二次开发:
标准的http和grpc协议,开源的项目,企业可以自主二次开发
更多推荐
所有评论(0)