美文网首页项目微服务可观测平台springcloud
微服务可观测平台 (二)- 链路跟踪 & 服务日志2数据变更日志

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

作者: 中间件XL | 来源:发表于2022-01-04 00:14 被阅读0次

    1. 背景

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

    2.  规划特性

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

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

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

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

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

    3. 技术架构

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

    4. 服务日志

    参看https://xie.infoq.cn/article/12cd563863c5581e7348630a5

    5.  链路跟踪

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

    5.1  技术架构

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

    zipkin server

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

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

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

    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 业务跟踪/数据跟踪

    https://download.csdn.net/download/szlhj/73533918

    tracing-business-demo

    https://download.csdn.net/download/szlhj/73534166

    以上依赖放在 lib

    关联代码

    service-log 服务日志

    https://download.csdn.net/download/szlhj/43622303

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

    https://download.csdn.net/download/szlhj/73535768

    相关文章

      网友评论

        本文标题:微服务可观测平台 (二)- 链路跟踪 & 服务日志2数据变更日志

        本文链接:https://www.haomeiwen.com/subject/nuofcrtx.html