开发者学堂课程【分布式链路追踪 Skywalking:Skywalking 介绍】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/743/detail/13152
Skywalking 介绍
什么是 Skywalking
1. Skywalking 概述
(1)一句话介绍:Skywalking 是基于 Open Tracing 规范使用了分布式链路追踪技术的 APM 系统。
根据官方的解释, Skywalking 不只是 APM 系统,同时还是一个可观测性分析平台(Observability Analysis Platform,简称 OAP),提供了在线分析的功能,和应用性能管理系统(Application Performance Management 简称 APM)。
提供分布式链路追踪、服务网格(Service Mesh)、遥测分析、度量(Metric)、聚合和可视化等一体化解决方案。
下面是 Skywalking 的几大特点:
①具备多语言自动探针。支持 Java、.Net Core 和 Node.JS 这些语言的探针。探针可以自动做集成,不需要手动添加代码。
②支持多种监控手段。除了语言探针,还支持微服务下比较热门的 service mesh。
③轻量高效。不需要额外搭建大数据平台(有些 APM 系统是需要额外搭建大数据平台的)。
④基于模块化架构。UI、存储、集群管理都可以模块化,也就是可以通过配置去进行替换,多种机制可选。
⑤支持告警功能。
⑥提供了优秀的可视化效果(5.0->6.0)。在 Skywalking 由5.0升级到6.0的提升下,UI 的效果也提升了很大的幅度。
(2)如图,Skywalking 整体架构如下:
解析:这张架构图实际上分为两个部分,首先是客服端,也就是说探针会在应用进行一个处理,把它的数据进行上报。然后服务端又分为两个部分,一个部分是观测平台,也就是说 UI 页面;另外一个部分是后端服务,这个后端服务相对来说比较复杂,要接收到探针上报的数据,包括 Service Mesh 上报的数据也可以接收,它是通过 gRPC 或 HTTP 协议进行接收;上报的数据分为两部分,第一个部分是 Tracing ,也就是分布式链路追踪,每一次调用都会有一个调用链进行上报,另一个部分是 Metric 这个概念,Metrics 实际上是一个可累加的数据,比如说当前的接口在十分钟内上报了多少次,平均的耗时是多少,这些都是一些统计性的数据,称为 Metrics 。这两个部分的数据会被 OPA 平台接收同时处理,把这些数据处理之后会存储到存储介质中。存储介质可以分为多种实现,如Elaticsearch、MYSQL TIDB、H2数据库等都可以进行存储。
如果此时 UI 页面想要访问这些数据,就会去调用 OAP 平台提供的查询引擎的接口,这样就能访问存储层的数据。
需要注意:①Metric 的特点是,它是可累加的:它们具有原子性,每个都是一个逻辑计量单元,或者一个时间段内的柱状图,例如:队列的当前深度可以被定义为一个计量单元,在写入或读取时被更新统计;输入 HTTP 请求的数量可以被定义为一个计数器,用于简单累加;请求的执行时间可以被定义为一个柱状图,在指定时间片上更新和统计汇总。
②Tracing 的最大特点就是,它在单词请求的范围内,处理信息。任何的数据、元数据信息都被绑定到系统中的单个事务上。例如:一次调用远程服务的 RPC 执行过程;一次实际的 SQL 查询语句;一次 HTTP 请求的业务性 ID。
③总结:Metric 主要用来进行数据的统计,比如 HTTP 请求数的计算。Tracing 主要包含了某一次请求的链路数据。
详细的内容可以查看 Skywalking 开发者吴晟翻译的文章,Metrics、Tracing 和 Logging 的关系:http://blog.oneapm.com/apm-tech/811.html
这里做一个总结,整体架构包含如下三个组成部分:
①探针(agent)负责数据的上报,包含了 Tracing 和 Metrics 两部分的数据,这个探针布置在应用服务所在的服务器上,agent 会被安装到服务所在的服务器上,以方便数据的获取。
②可观测性分析平台 OAP(Observability Analysis Platform),不只需要接收探针发送的数据,还需要对数据进行加工处理,即在内存中使用分析引擎(Analysis Core)进行数据的整合运算,然后将数据存储到对应的存储介质上,比如 Elasticsearch、MySQL 数据库、H2 数据库等。另外还提供了 UI 页面数据查询这个能力即同时 OAP 还使用查询引擎(Query Core)提供 HTTP 查询接口。
④Skywalking 提供单独的 UI 进行数据的查看,此时 UI 会调用 OAP 提供的接口,获取对应的数据,然后进行展示。
2. Skywalking 优势
Skywalking 相比较其它的分布式链路监控工具,具有以下特点:
- 社区相当活跃。Skywalking 已经进入 Apache 孵化阶段,目前的 star 数已经超过 11k;它的版本更新的很快,最新版本 6.5.0 已经发布。开发者吴胜是中国人,可以直接和项目发起人交流进行问题的解决。
- Skywalking 支持探针的语言很多:Java、.Net Core 和 Node.JS 语言。相对于其它平台:比如 Pinpoint 支持 Java 和 PHP,具有较大的优势。
- 探针无侵入性。对比 CAT 具有侵入性的探针需要进行代码编写,优势较大。不修改原有项目一行代码就可以把它引入进框架中进行集成。
- 探针性能优秀。有网友对 Pinpoint 和 Skywalking 的性能进行过测试,Pinpoint 每次收集的数据过多,所以对性能损耗较大,而 Skywalking 探针性能十分出色。
(5)支持组件较多。特别是对 RPC 框架的支持,这是其它框架所不具备的。Skywalking 对 Dubbo、gRPC 等有原生的支持,甚至连小众的 motan 和 sofarpc 都支持。
可以看到,Skywalking 对比其他有很大的优势,这也是人们选择 Skywalking 的原因。
3. Skywalking 主要概念介绍
(1)Skywalking 主要概念包含:服务(Service)、端点(Endpoint)和实例(Instance)
如图,使用如下案例来进行 Skywalking 主要概念的介绍:
上图中,编写了用户服务,这是一个 Web 项目,在生产中部署了两个节点:192.168.1.100 和 192.168.1.101。
浏览器发送了一个请求,这个请求的地址是usr query All,通过负载均衡器到达后端的用户服务集群,在这里,用户服务的概念是部署了很多用户服务的应用,这整个用户集群化的概念就叫服务,也称之为应用。由于服务暴露了接口也就是/usr/query/All,这个接口对于 Skywalking 来说就是一个端点,这个端点是可以经过其他服务来进行访问的。为了保证这个服务的高可用性,服务在集群上可能会部署多份,部署多份这个概念就叫做实例,比如说用户在192.168.1.100和192.168.1.101上部署了一个,也就是有两个实例分别进行了部署。
(2)总结:
服务就是指一个比较宽泛的概念,一份代码在线上上线了,就是一个服务。
这个服务在线上如果要保证高可用性,就需要部署多个节点,这个节点就是 Skywalking 的实例这个概念。
如果服务需要对外暴露接口,那么这些接口就称之为端点