黑马程序员技术交流社区

标题: 【上海校区】分布式追踪 & APM 系统 SkyWalking 源码分析 ——... [打印本页]

作者: 不二晨    时间: 2018-7-24 13:29
标题: 【上海校区】分布式追踪 & APM 系统 SkyWalking 源码分析 ——...
1. 概述
本文主要分享 SkyWalking DataCarrier 异步处理库。
基于生产者消费者的模式,大体结构如下图:
下面我们来看看整体的项目结构,如下图所示 :
2. buffer
org.skywalking.apm.commons.datacarrier.buffer 包,主要包含 Channels 、Buffer 两个类。Channels 是 Buffer 数组的封装。
2.1 Buffer
org.skywalking.apm.commons.datacarrier.buffer.Buffer ,缓存区。
Buffer 在保存数据时,把 buffer 作为一个 “环“,使用 index 记录最后存储的位置,不断向下,循环存储到 buffer 中。通过这样的方式,带来良好的存储性能,避免扩容问题。But ,存储会存在冲突的问题:buffer 写入位置,暂未被消费,已经存在值。此时,根据不同的 BufferStrategy 进行处理。整体流程见 #save(data) 方法。
当 Buffer 被 Consumer 消费时,被调用 #obtain(start, end) 方法,获得数据并清空。为什么会带 start 、end 方法参数呢?下文揭晓答案。
2.2 Channels
org.skywalking.apm.commons.datacarrier.buffer.Channels ,内嵌多个 Buffer 的通道。
Channels 在保存数据时,相比 Buffer ,从 buffer 变成了多 buffer ,因此需要先选一个buffer 。通过使用不同的 IDataPartitioner 实现类,进行 Buffer 的选择。当缓冲策略为BufferStrategy.IF_POSSIBLE 时,根据 IDataPartitioner 定义的重试次数,进行多次保存数据直到成功。整体流程见 #save(data) 方法。
3. partition
org.skywalking.apm.commons.datacarrier.partition.IDataPartitioner ,数据分配者接口。定义了如下方法:
IDataPartitioner 目前有两个子类实现:
4. consumer
org.skywalking.apm.commons.datacarrier.consumer 包,主要包含 ConsumerPool 、ConsumerThread 、IConsumer 三个类。
4.1 IConsumer
org.skywalking.apm.commons.datacarrier.consumer.IConsumer ,消费者接口。定义了如下方法:
我们在使用时,自定义 Consumer 类,实现 IConsumer 接口。例如:RemoteMessageConsumer
4.2 ConsumerThread
org.skywalking.apm.commons.datacarrier.consumer.ConsumerThread ,继承 java.lang.Thread ,消费线程。
#run() 实现方法,不断、批量的消费数据。代码如下:
#consume() 方法,批量消费数据。代码如下:
4.3 ConsumerPool
org.skywalking.apm.commons.datacarrier.consumer.ConsumerPool ,消费者池,提供了对 Channels 启动指定数量的 ConsumerThread 进行消费。
#begin() 方法,启动 ConsumerPool ,进行数据消费。代码如下:
close() 方法,关闭 ConsumerPool 。代码如下:

#allocateBuffer2Thread() 方法,将 channels 的多个 Buffer ,分配给 consumerThreads 的多个ConsumerThread。一共会有三种情况:
4. DataCarrier
org.skywalking.apm.commons.datacarrier.DataCarrier ,DataCarrier 异步处理库的入口程序。通过创建 DataCarrier 对象,使用生产者消费者的模式,执行异步执行逻辑。
构造方法 ,代码如下:
设置消费者和消费线程数量:
生产消息
关闭消费


作者: 不二晨    时间: 2018-7-24 14:02
奈斯
作者: 摩西摩西OvO    时间: 2018-7-26 09:11

作者: 吴琼老师    时间: 2018-7-26 15:32

作者: 随梦而飞!!!    时间: 2021-6-27 10:33





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2