cat client设计

一、整体介绍

1.1 设计理念

Cat客户端设计理念主要考虑如下几点

  • 对业务低影响、对业务低影响、对业务低影响

1.2 整体流程

在这里插入图片描述
具体步骤

  1. 业务线程埋点,生产消息,交给消息生产器Producer
  2. 消息生产者将消息放入当前线程的消息栈中
  3. 业务线程在消息构建结束时,将消息栈产生消息树放入消息队列中
  4. 消息发送者线程将消息队列中的消息树序列化为消息报文上传给Cat服务端

1.3 客户端配置

默认cat的配置文件为/data/appdatas/cat/client.xml 这个配置里面记录了集中的cat配置。

cat通过这个里面的配置地址向服务端发送请求,或者真正的路由CAT路由地址

1.4 MessageId的设计

由四段组成

CAT消息的Message-ID格式domain-0a2b4266-437960-8680,CAT消息一共分为四段:

第一段是应用名:domain。

第二段是当前这台机器的IP的16进制格式:0a2b4266

第三段是系统当前时间除以小时得到的整点数:437960

第四段是表示当前这个客户端在当前小时的顺序递增号(AtomicInteger自增,每小时结束后重置):8680

1.5 MessageTree组成

在这里插入图片描述

二、源码解析

2.1 Cat初始化

Cat在做任意打点时,会检测是否初始化,没有初始化再初始化,初始化MessageProducer,MessageManager,启动监视器,发送器,聚合器
在这里插入图片描述

2.2 Message代码结构

Cat: Cat门面类,一般直接用此类打点

Message: 消息抽象,有Transaction,Metric,Event,Heartbeat,Trace(已废弃)。Transaction保存了Message列表,可嵌套,其他类型都是原子的

MessageProducer: 封装了所有埋点接口

MessageManager: CAT客户端核心类,消息入出栈

Context: 保存消息上下文信息

TCPSocketSender:负责发送消息

MessageTree:消息树

2.3 几个后台运行线程

Monitor:StatusUpdateTask

(JVM,System,Http,DataSource,Classloader,ETC。。。)

Sender: TcpSocketSender
(MessageQueue,ChannelManager–Netty,IdFactory-CreateMessageId,MessageCodec - 编码消息,run用来消费消息,offer方法是用来添加消息的) 一小时前消息丢弃

2.4 消息创建过程分析

下面以创建Transaction消息为例说明消息创建过程
在这里插入图片描述
首先通过消息管理者MassageManager判断是否存在消息上下文context,如果不存在则在setup中创建消息上下文。

start会将消息入栈
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果时间到来,或者长度到了直接截断发送,否则加到子Transaction里

初始化Context时创建消息树,Context属于MessageManager的内部类。可以认为MessageManager的其中一个功能是作为context的一个代理,MessageManager的start、add、end等方法,核心都是调用当前线程context的start、add、end方法。

complete时调用MessageManager的End方法,最后会调用发送。且清除Context信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其他类型消息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.5 MessageCodec

消息序列化,反序列化
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参考

Cat客户端设计

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值