大众点评分布式系统监控开源框架cat源码阅读(个人笔记)

cat 数据接收 TcpSocketReceiver
该类中startServer(port)方法用于启动netty,设置消息解码器MessageDecoder和消息编码器ClientMessageEncoder
消息传输使用消息header+消息body格式,解码器中消息前4个字节即int类型用于存储消息body的长度,当消息可读长度
大于等于消息头所读长度时,读取整个消息,调用CodecHandler类中的静态方法decode进行解析,该方法先读取消息body
的前3个字节并转成String,如果是"PT1"则调用PlainTextMessageCodec类进行解析,如果是"NT1"则调用NativeMessageCodec
类进行解析,否则抛出异常.解析成功之后返回 MessageTree 接口类型的实现类.
默认系统有两个实现类DefaultMessageTree和NullMessageTree

PlainTextMessageCodec 的解析过程
PlainTextMessageCodec实现MessageCodec接口,public decode方法首选调用ByteBuf的readInt()目的向后移动4字节,
readIndex指向消息body开头部分,并创建DefaultMessageTree对象,调用private方法decode继续解析,
该方法通过成员属性ThreadLocal对象尝试获取Context对象,Context类有两个成员对象一个是ByteBuf,一个是char[],
ByteBuf用于存放消息body,可以通过动态赋值,并在decode方法退出前被移除,而char[]只能在对象创建时初始化为1MB,充当缓存使用,如果未获取到则创建,保证每个NIOEventLoop线程上只有一个Context对象.decode方法中调用decodeHeader方法解析一些基本数据例如id,domain,hostname等等,然后判断消息体时候后剩余数据,有则调用decodeMessage方法解析

PlainTextMessageCodec类中decodeHeader(ctx, tree)方法解析过程
decodeHander方法通过调用成员属性BufferHelper对象解析,该方法需要传入Context对象和数据流分隔符,
从源码可以看出,cat中将一些换行符使用2字节得文本替换,因此在未找到分隔符之前
遍历读取每个byte,并替换2字节换行符文本为1字节换行符,一旦找到则停止读取,并将读取得byte转为字符串
数据流得读取会一定readIndex,但是decodeHeader方法却多次调用该方法解析id,domain,hostname等等,因为
可以推断cat客户端数据在推送到服务端时,一定是按照该顺序传入的字节流.

未完待续...

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CAT大众点评开发的,基于 Java 的实时应用监控平台,包括实时应用监控,业务监控CAT 支持的监控消息类型包括:Transaction 适合记录跨越系统边界的程序访问行为,比如远程调用,数据库调用,也适合执行时间较长的业务逻辑监控,Transaction用来记录一段代码的执行时间和次数。 Event 用来记录一件事发生的次数,比如记录系统异常,它和transaction相比缺少了时间的统计,开销比transaction要小。 Heartbeat   表示程序内定期产生的统计信息, 如CPU%, MEM%, 连接池状态, 系统负载等。 Metric 用于记录业务指标、指标可能包含对一个指标记录次数、记录平均值、记录总和,业务指标最低统计粒度为1分钟。 Trace 用于记录基本的trace信息,类似于log4j的info信息,这些信息仅用于查看一些相关信息 消息树 CAT监控系统将每次URL、Service的请求内部执行情况都封装为一个完整的消息树、消息树可能包括Transaction、Event、Heartbeat、Metric和Trace信息。 完整的消息树 可视化消息树 分布式消息树【一台机器调用另外一台机器】 要求 Java 6 Maven 3 MySQL 快速上手 1、在CAT目录下,用maven构建项目mvn clean install -DskipTests 2、配置CAT的环境mvn cat:install Note: Linux\Mac  需要对/data/appdatas/cat和/data/applogs/cat有读写权限 Windows    则是对系统运行盘下的/data/appdatas/cat和/data/applogs/cat有读写权限 3、(Optional)如果安装了hadoop集群,需到/data/appdatas/cat/server.xml中配置对应hadoop信息。将localmode设置为false,默认情况下,CAT在开发模式(localmode=true)下工作。 4、运行CATcd cat-home;mvn jetty:run 然后打开浏览器,输入http://localhost:2281/cat/。 或者在cat目录下输入 mvn eclipse:clean eclipse:eclipse 然后将项目导入到eclipse中,运行cat-home项目里得‘com.dianping.cat.TestServer’来启动CAT。 介绍内容来自:高可用架构 标签:大众点评

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值