大白话剖析调用链监控原理
目前的微服务全景架构图
接近完美的架构了,我们也借助Spring Cloud实现了,但是,如果服务一旦发生问题,如何快速定位并解决问题呢?

两点需求
如果用传统方式定位是比较困难的,一般来说,在实际开发中,会使用调用链监控工具
这又是啥?两个念头:
1、调用链监控工具真是个好东西,在微服务中肯定都要用上吧?(微服务必备组件)
2、调用链监控工具真神奇,是不是有什么黑科技?
调用链监控原理1
网络异常,图片无法展示
|
在内容中心去调用用户中心的服务场景中,如果发生以上描述的故障,如何监控呢?
一张数据表就可以描述并解决(回忆一下服务发现的时候,也是用数据库来类比的)
网络异常,图片无法展示
|
一次调用分为四个阶段:
1、client send:内容中心向用户中心发送请求的瞬间
2、server receive:用户中心接收到请求的瞬间
3、server send:用户中心向内容中心发送响应的瞬间
4、client receive:内容中心接收到响应的瞬间
trace表含义:
- span_id: 唯一标识
- pspan_id: parent_span_id的简写(典型的自关联树形设计)
- service_name:服务名称
- api: 调用的api接口端点
- stage: cs、sr、ss、cr分别为client send、server receive、server send、client receive的缩写,表示一次调用的四个阶段
- timestamp:这条数据的时间戳
四条数据组成了一次服务调用的过程,如果正常的调用,应该有四条数据
如何借助这张表分析故障?
- 比如如果只有 cs、sr,是什么问题?
- 比如只有cs、sr、ss,是什么问题?
如何借助这张表定位瓶颈?
思考表中数据含义
t2-t1是什么? 请求的网络延时
t3-t2是什么? 用户中心执行这个API的耗时
t4-t3是什么? 响应的网络延时
t4-t1是什么? 内容中心 /shares/1这个API的总耗时
你可以对这些数据进行各种计算,找出瓶颈,找出具体API的耗时、瓶颈等
大致原理如此,实际项目中调用链监控工具往往是集界面、存储、分析于一身的,不同的工具实现也有些差别,但是原理相通。
业界流行的调用链监控工具
- Spring Cloud Sleuth + Zipkin
- Skywaking、Pinpoint
整合Sleuth
- 什么是Sleuth
- Sleuth术语
- 整合Sleuth
Sleuth是Spring Cloud的分布式跟踪解决方案,可以通俗地理解为Sleuth是调用链监控工具的客户端,它集成在每个微服务上,负责产生监控数据
Sleuth术语:
- span:一条数据
- trace:一组数据组成的树状结构
- Annotation:cs、sr、ss、cr

Span(跨度):Sleuth的基本工作单元,它用一个64位的id唯一
标识.除ID外,span还包含其他数据,例如描述,时间戳事件,键
值对的注解(标签),spanID,span父ID等.
trace(跟踪):一组span组成的树状结构称为trace
整合Sleuth,放到Zipkin一起
Zipkin搭建与整合
1、下载
https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec
2、启动
java -jar zipkin-server-2.12.9-exec.jar
3、输入 http://localhost:9411/zipkin/ 访问Zipkin Server首页
网络异常,图片无法展示
|
加依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId></dependency>
写配置
spring:
application:
name: user-center
zipkin:
base-url: http://localhost:9411/
discoveryClientEnabled: false
sleuth:
sampler:
# 抽样率,默认是0.1(10%)
probability: 1.0
Zipkin服务端界面



网络异常,图片无法展示
|
发生了微服务之间调用的完整链路监控数据
据持久化(Elasticsearch)
- Mysql
- Elasticsearch
- Cassandra
依赖关系图


