- 单体架构:
我们的程序在服务器上跑起来之后,会遇得到各种各样的问题。
如简单的电商系统,如下图所示:

当用户在浏览器发送一个请求之后,服务器会响应用户请求,查询数据库之后返回数据就完成了一次数据交互。
如果这个过程中间出现任何异常,我们分析电商系统的日志就可以找到根源。
- 微服务架构:
如果在一个庞大的微服务架构体系之中,某一个微服务出现了错误,那么请问该如何排查这个错误呢?
慢慢排查所有的微服务的错误,这个结果只有一个,不是你崩溃,就是系统被彻底的崩溃了…


-
怎么办?
-
我们需要快速定位到到底是哪个调用服务出现了问题,我们可以用到Skywalking
-
我们需要监控服务的性能指标,我们还可以用到Skywalking


Skywalking原理
想要搞清楚Skywalking的工作原理我们首先要搞清楚以下几个概念:
-
APM系统
-
分布式链路追踪
-
OpenTracing
APM系统
应用性能管理系统,是对企业系统即时监控以实现 对应用程序性能管理和故障管理的系统化的解决方案。
APM系统是可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和 解决问题。
分布式链路追踪
随着分布式系统和微服务架构的出现
-
一次用户的请求会经过多个系统
-
不同服务之间的调用关系十分复杂
-
任何一个系统出错都可能影响整个请求的处理结果
以往的监控系统往往只能知道单个系统的健康状况、一次请求的成功失败,无法快速定位失败的根本原因。除此之外,复杂的分布式系统也面临这下面这些问题:
-
性能分析:一个服务依赖很多服务,被依赖的服务也依赖了其他服务。如果某个接口耗时突然变长 了,那未必是直接调用的下游服务慢了,也可能是下游的下游慢了造成的,如何快速定位耗时变长 的根本原因呢?
-
链路梳理:需求迭代很快,系统之间调用关系变化频繁,靠人工很难梳理清楚系统链路拓扑(系统 之间的调用关系)。
为了解决这些问题,Google 推出了一个分布式链路跟踪系统 Dapper ,之后各个互联网公司都参照 Dapper 的思想推出了自己的分布式链路跟踪系统,而这些系统就是分布式系统下的APM系统。
OpenTracing
分布式链路跟踪最先由Google在Dapper论文中提出而OpenTracing通过提供平台无关、厂商无关 的API,使得开发人员能够方便的添加(或更换)追踪系统的实现。
下图是一个分布式调用的例子,客户端发起请求,请求首先到达负载均衡器,接着经过认证服务,订单服务,然后请求资源,最后返回结果

虽然这种图对于看清各组件的组合关系是很有用的,但是存在下面两个问题:
-
它不能很好显示组件的调用时间,是串行调用还是并行调用,如果展现更复杂的调用关系,会更加 复杂,甚至无法画出这样的图。
-
这种图也无法显示调用间的时间间隔以及是否通过定时调用来启动调用。
一种更有效的展现一个调用过程的图:

基于OpenTracing我们就可以很轻松的构建出上面这幅图。
我们可以根据上面的图,看出哪些服务,哪些进程调用所需要的时间,就可以初步判断哪里出了问题。
skywalking简介
SkyWalking是apache基金会下面的一个开源APM项目,为微服务架构和云原生架构系统设计。
它通过 探针自动收集所需的指标,并进行分布式追踪。通过这些调用链路以及指标,Skywalking APM会感知 应用间关系和服务间关系,并进行相应的指标统计。Skywalking支持链路追踪和监控应用组件基本涵盖 主流框架和容器,如国产RPC Dubbo和motan等,国际化的spring boot,spring cloud。
官方网站: http://skywalking.apache.org/
概述
根据官方的解释
Skywalking是一个可观测性分析平台(Observability Analysis Platform简称OAP)
和应用性能管理系统(Application Performance Management简称APM)。
提供分布式链路追踪、服务网格(Service Mesh)遥测分析、度量(Metric)聚合和可视化一体化解决方案。
下面是Skywalking的几大特点:
-
多语言自动探针,Java,.NET Core和Node.JS。
-
多种监控手段,语言探针和service mesh。
-
轻量高效。
-
不需要额外搭建大数据平台。
-
模块化架构。
-
UI、存储、集群管理多种机制可选。
-
支持告警。
-
优秀的可视化效果。
整体架构

整体架构包含如下三个组成部分:
-
探针(agent)负责进行数据的收集,包含了Tracing和Metrics的数据,agent会被安装到服务所在的 服务器上,以方便数据的获取。
-
可观测性分析平台OAP(Observability Analysis Platform),接收探针发送的数据,并在内存中使 用分析引擎(Analysis Core)进行数据的整合运算,然后将数据存储到对应的存储介质上,比如 Elasticsearch、MySQL数据库、H2数据库等。同时OAP还使用查询引擎(Query Core)提供HTTP查 询接口。
-
Skywalking提供单独的UI进行数据的查看,此时UI会调用OAP提供的接口,获取对应的数据然后 进行展示。
主要概念
使用如下案例来进行Skywalking主要概念的介绍,Skywalking主要概念包含:
-
服务(Service)
-
端点(Endpoint)
-
实例(Instance)

图中,我们编写了用户服务,这是一个web项目
在生产中部署了两个节点:192.168.1.100和 192.168.1.101。
-
用户服务就是Skywalking的服务(Service),用户服务其实就是一个独立的应用(Application),在 6.0之后的Skywalking将应用更名为服务(Service)。
-
用户服务对外提供的HTTP接口/usr/queryAll就是一个端点,端点就是对外提供的接口。
-
192.168.1.100和192.168.1.101这两个相同服务部署的节点就是实例,实例指同一服务可以部署多个。
对以上概念了解之后,我们接下来着手搭建SkyWalking这个环境。
传送门:
(一)初探 Skywalking
(二)安装 Skywalking
(三)使用 Skywalking
(四)Skywalking的UI页面RocketBot




