微服务可观测平台 (二)- 链路跟踪 & 数据变更跟踪设计

微服务可观测平台 (二)- 链路跟踪 & 数据变更跟踪设计,第1张

服务可观测平台 (二)- 链路跟踪 & 数据变更跟踪设计 1.   背景

增强服务可观测性,预测与发现系统性能瓶颈,透视系统状态,为系统调优和改进提供可靠数据

2.  规划特性

Ø  服务日志: 记录时间,用户,用户地点(ip),服务节点(ip),服务名称,模块名称,参数(可配置),支持异步写入,减少服务正常执行影响

Ø  服务性能指标,RT,请求数(1m/5m/15m),异常数(1m/5m/15m),失败数(1m/5m/15m)

Ø  服务调用链路,服务调用拓扑,调用关系性能,topN(最忙服务,最慢服务)

Ø  业务日志,如,拉单每秒字节数,数据笔数,拉单作业数

Ø  监控门户,仪表盘,告警  Prometheus+grafana(运维);elasticsearch agg+数据可视化(开发)

*日志收集 ELK 不在本次计划

*系统监控,如 cpu,线程数(jvm),内存(jvm),磁盘 io,网络 io 直接使用 Prometheus,不在本平台范围

3. 技术架构

链路跟踪和数据跟踪位于蓝框部分,链路跟踪(service-tracing)还负责数据变更跟踪,服务日志数据变更

4. 服务日志

参看 微服务可观测平台(二)-服务日志设计与实现

5.  链路跟踪

     分布式系统每个请求由多个服务接力完成,服务构成调用链, 链路跟踪穿透所有服务(实例),包括 okhttp,httpclient,mq 等,采集每个服务的信息,以及环境信息,最终展现服务调用链,服务间调用时间,常用于排障,应用性能监控,topN 最忙服务,topN 最慢服务

5.1  技术架构

探针/报告器/发送器   3 组件与探测目标服务同在一个进程,以拦截器方式低侵入集成到服务,采集数据,支持自定义 tag; 异常捕获

zipkin server

  查询  rest api 查询服务拓扑,跨度(span)

  采集器  与报告器对接,接收数据(span),协议与发送器对应

  存储 支持多种存储,elasticsearch 其中一种

canal 和关联计算作业 参看部分

5.2  探针

链路技术组件分两部分,探针和服务,探针部署于采集目标进程,采集执行环境信息(span);服务收集采集信息, 存储,提供链路查询和展现。

本平台采用 open zipkin,zipkin 服务满足需要,直接使用

探针组件使用 spring cloud sleuth

技术特性

报告/发送支持:http, rabbitmq, kafka

探测框架支持: http client,okhttp3,rabbitmq,spring mvc/servlet,feign

6.  数据变更跟踪

数据变更跟踪是服务日志一部分,借助链路跟踪的 tracingId,关连服务调用日志和数据变更

6.1  技术架构

服务日志写入索引,canal 捕获服务写数据的变更,也写入索引,两者有同一个 tracingId,

关联计算作业关联两索引,数据变更写入服务日志

6.2  逻辑架构

业务跟踪作业 调度作业,定时执行

业务跟踪服务 分片遍历服务日志,根据 tracingId 获取关联数据变更日志,写入服务日志,使用 onesearch 组件的 getter 机制,数据字典,转换服务,api,数据库,表,字段等为可读名称

数据跟踪服务 canal client 监听数据库的行变更事件,写入 elasticsearch

数据字典 定义服务,api,数据库,表,字段的名称

*业务服务跟踪没有直接依赖服务日志,拷贝服务日志模型类作 dto 用

业务跟踪逻辑模型

业务跟踪包括两部分,业务服务日志和业务数据

业务服务跟踪使用服务日志组件生成的服务日志

业务数据 canal-sync 捕获并写入到 elasticsearch

6.3  数据变更捕获(canal-sync 组件)

canal-sync 组件,组件采用观察者模式,逐级细化事件处理

Message—>LogEvent-->RowsLogEvent

canal 伪装成 mysql slave,向 mysql 同步 binlog,解释 binlog 封装为事件

canal client 监听事件,binlog 事件多种类型,事务事件,ddl 事件,本组件只关心行变更事件(RowLogEvent)

6.4  组件架构

onesearch 本人开发另一个组件,搜索引擎 SDK,相关文章以后发布,敬请关注

shard 分片小组,负责资源(包括数据表,文档)分片,处理位点记录

7. 代码解释 7.1  工程结构

tracing-business-core  调度作业,接入调度引擎定时执行,依赖 tracing-business-servcie,独立服务

tracing-business-data  canal client,数据变更跟踪,独立服务

tracing-business-servcie  包括业务跟踪,业务服务跟踪,业务数据跟踪 3 个服务

tracing-business-query  服务日志查询服务,独立服务

tracing-datadict  数据字典服务

tracing-extension  扩展包,mybatis 拦截器,用于插入 tracing_id 字段;feign 拦截器,用于传递 from header

7.2  单元测试

Ø  Core

ShardingTest 构建分片

BusinessTracingJobTest 作业测试

Ø  Data

IndexTest 构建 tracing-data 索引

BinlogSyncTest 数据变更同步, 直接跑应用也可以,比较轻量

Ø  Query

BusinessTracingQueryTest  bean 方式测试

ServiceLogSearchTest 构建搜索表达式测试

Ø  Service

TracingBusinessIndexTest 构建索引测试

BusinessDataTracingTest 业务数据 tracing 测试

BusinessServiceTracingTest 业务服务 tracing 测试

BusinessTracingTest 业务跟踪测试

7.3  环境

>spring cloud Hoxton.SR4

> spring boot 2.2.6.RELEASE

>spring cloud alibaba 2.2.4.RELEASE

> nacos 1.4.2

> canal server 1.1.4

> elasticsearch  6.8.7

> 调度任务

> zipkin-server  2.21.7

> rabbitmq

>数据库日志配置 binlog+row 模式

8.  测试 8.1  demo 工程

demo 全链路的测试,包括网关(zuul),服务 a,服务 b,其中服务 a 是业务服务(网关调用),记录业务日志,服务 a 调用服务 b,包括 feign,okhttp,httpclient,rabbitmq,服务 b 数据库 *** 作

8.2  api

api 测试脚本,postman

查询 api 脚本,postman

8.3  效果图 链路跟踪

Ø  feign/httpclient/okhttp/rabbitmq

数据日志/服务日志

服务日志最终的形态,业务跟踪作业跑过后,写入了数据变更,转换名称,xxxAlias

8.  代码(收费)

tracing-business 业务跟踪/数据跟踪

service-tracing.zip-Java文档类资源-CSDN下载

tracing-business-demo

service-tracing-demo.zip-Java文档类资源-CSDN下载

以上依赖放在 lib

关联代码

service-log 服务日志

service-log.zip-Java文档类资源-CSDN下载

canal-sync canal 数据同步,捕获数据变更

canal-sync.zip-Java文档类资源-CSDN下载

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5696070.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存