Dubbo Monitor 实现原理?

Consumer端在发起调用之前会先走filter链;provider端在接收到请求时也是先走filter链,然后才进行真正的业务逻辑处理。

默认情况下,在consumer和provider的filter链中都会有Monitorfilter。

1、 MonitorFilter向DubboMonitor发送数据

2、 DubboMonitor将数据进行聚合后(默认聚合1min中的统计数据)暂存到ConcurrentMap statisticsMap,然后使用一个含有3个线程(线程名字:DubboMonitorSendTimer)的线程池每隔1min钟,调用SimpleMonitorService遍历发送statisticsMap中的统计数据,每发送完毕一个,就重置当前的Statistics的AtomicReference

3、 SimpleMonitorService将这些聚合数据塞入BlockingQueue queue中(队列大写为100000)

4、 SimpleMonitorService使用一个后台线程(线程名为:DubboMonitorAsyncWriteLogThread)将queue中的数据写入文件(该线程以死循环的形式来写)

5、 SimpleMonitorService还会使用一个含有1个线程(线程名字:DubboMonitorTimer)的线程池每隔5min钟,将文件中的统计数据画成图表

发表评论

后才能评论