摘要:基本功能介紹是基于開發(fā)的業(yè)務監(jiān)控,異常監(jiān)控的分布式監(jiān)控平臺。主要功能是管理消息的發(fā)送,類消息的歸集,等消息的管理工作。在中,使用了類型作為當前線程消息管理的上下文,通過這個對象線程安全地實現(xiàn)消息的添加,合并,發(fā)送等等。消息傳輸層以及以及。
Cat基本功能介紹
CAT是基于JAVA開發(fā)的業(yè)務監(jiān)控,異常監(jiān)控的分布式監(jiān)控平臺。
CAT可以提供以下幾種模型的監(jiān)控:
Transaction 適用于記錄程序跨系統(tǒng)邊界進行的訪問行為,比如遠程調(diào)用,數(shù)據(jù)庫調(diào)用,長時間的業(yè)務邏輯監(jiān)控,Transaction用來記錄一段代碼的執(zhí)行時間和次數(shù)。
Event 適用于記錄事件的發(fā)生,比如系統(tǒng)異常的記錄,相比于Transaction缺少時間的統(tǒng)計
Heartbeat 適用于記錄程序內(nèi)定期產(chǎn)生的統(tǒng)計信息,如CPU,MEM,連接池狀態(tài),系統(tǒng)負載等
Metric 用于記錄業(yè)務指標,包含對一個指標記錄次數(shù)或其他統(tǒng)計
Trace 用于記錄基本的trace信息
Cat Client 主要類介紹Client的主要入口是cat-client包中的Cat類
Cat類以及Cat的依賴類層級結(jié)構如下
從圖中可以看出,Cat client從上到下總共分為三層
接口層Cat類以及CatProducer類。主要功能是為外部提供api,Cat主要作用是與plexus框架做集成,CatProducer是處理api的主要類
PS:額外說一下,Cat這個項目很【有特色】地用了plexus作為管理容器,初次接觸的時候真是讓人頭大,plexus的基本功能和spring可以說別無二致,但是很多地方的注入竟然都需要手動處理,真是讓人尷尬,雖然作者說spring太重了,plexus的作用已經(jīng)足夠
消息處理層MessageManager以及其內(nèi)部類Context。主要功能是管理消息的發(fā)送,Transaction類消息的歸集,等消息的管理工作。在MessageManager中,使用了ThreadLocal
類型作為當前線程消息管理的上下文,通過這個對象線程安全地實現(xiàn)消息的添加,合并,發(fā)送等等。
PS:MessageManager管理的消息Message是基于Cat的監(jiān)控模型創(chuàng)建的,其中最主要的區(qū)別是Transaction類和其他消息不太一樣,Transaction消息是一個鏈表的模型,每一個消息后面都鏈接著下一個消息,所以MessageManager對Transaction的處理也不同,別的消息都是放到Context中直接從消息處理層flush到下一層,Transaction是放到Context的棧中,直到過了預定時間,或者消息達到規(guī)定的最大長度才flush到下一層。
消息傳輸層TransportManager以及TcpSocketSender以及ChannelManager。主要功能是把消息管理層發(fā)下來的消息進行發(fā)送,對于與多個發(fā)送的目的服務器進行Channel管理,保證有可用服務器能接受消息。TransportManager主要功能是根據(jù)配置文件初始化TcpSocketSender,TcpSocketSender主要實現(xiàn)把Message進行編碼(如果是Transaction還會進行合并)并放置到待發(fā)送隊列中,再同時由ChannelManager消費隊列中的消息,將消息發(fā)送給狀態(tài)為active的server端
PS:暫存消息的隊列用的是LinkedBlockingQueue,實際上LinkedBlockingQueue屬于生產(chǎn)消費者隊列的標配了,因為這個類對于添加和移除的消耗小,線程安全,而且達到隊列容量時會成為blocking狀態(tài),所以基本上都會用這個類,或者基于這個類進行擴展來實現(xiàn)相關需求。相對來說還有ConcurrentLinkedQueue可以用,和blockingqueue的主要區(qū)別是,Concurrent超過主要容量會直接返回false,不會block,所以如果想馬上就返回的可以用Concurrent隊列。
CatClientModule類中的StatusUpdateTask由于Cat用了十分村的plexus作為容器,所以在加載Cat類的時候會從靜態(tài)方法中加載各個Module,CatClientModule就是Cat client工程中首要Module
CatClientModule在加載過程中會從StatusUpdateTask中啟動一個線程來每隔一段時間發(fā)送一個HeartBeatMessage,其中包括了客戶端能拿到的各種信息,包括CPU,Memory,Disk等等,開發(fā)者也可以通過實現(xiàn)StatusExtension接口的方式來實現(xiàn)對于HeartBeatMessage發(fā)送內(nèi)容的擴展。
其中比較重要的實現(xiàn)信息收集的是這行代碼
StatusInfoCollector statusInfoCollector = new StatusInfoCollector(m_statistics, m_jars); status.accept(statusInfoCollector.setDumpLocked(m_manager.isDumpLocked()));
m_statistics包含的是已經(jīng)發(fā)送過信息的容量,m_jars是通過classLoader加載的jar包名稱,StatusInfoCollector通過大量訪問者模式的代碼實現(xiàn)了將各種指標set到status中的功能,之后將status封裝到HeartBeatMessage中,按照一般對于message的處理流程,flush到消息傳輸層中
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/66630.html
摘要:之后,存儲端礦工節(jié)點會在一定時間間隔可配置,默認為秒自動啟動密封過程,即獲取之前微支付通道中暫存區(qū)域的所有數(shù)據(jù),并將其密封到礦工的承諾存儲區(qū)域中。 歡迎大家來到第四章,經(jīng)過前章 【Filecoin源碼倉庫全解析】第三章(下):存儲提供方(礦工)的配置操作的內(nèi)容閱讀后,我們應該會對Filecoin市場機制中的礦工對象有了更詳細的認知,對礦工事務的生命周期有了具象化地理解。 本章,我們將重...
摘要:前言本文為篤行日常工作記錄,爛筆頭系列。最終通過分析源碼了解到最終的確定是一個協(xié)商的過程,而不是簡單的配置生效。根據(jù)客戶端上報的和服務端自身的。如果上報的小于則設置為如果上報的大于則設置為如果介于兩則之間,則以上報的時間為準。 0.前言 本文為篤行日常工作記錄,爛筆頭系列。 源碼前面,了無秘密 — by 侯杰 近期的一個C++項目里使用了Zookeeper做服務發(fā)現(xiàn),期間遇到了Sess...
摘要:源碼版本簡介是下的一個監(jiān)控項目,用于進行容器集群的監(jiān)控和性能分析?;镜墓δ芗案拍罱榻B可以回顧我之前的一篇文章監(jiān)控之介紹。在源碼分析之前我們先介紹的實現(xiàn)流程,由上圖可以看出會從各個上獲取相關的監(jiān)控信息,然后進行匯總發(fā)送給后臺數(shù)據(jù)庫。 源碼版本 heapster version: release-1.2 簡介 Heapster是Kubernetes下的一個監(jiān)控項目,用于進行容器集群的監(jiān)控...
閱讀 3454·2021-10-13 09:39
閱讀 2157·2021-09-27 13:36
閱讀 3204·2021-09-22 16:02
閱讀 2718·2021-09-10 10:51
閱讀 1713·2019-08-29 17:15
閱讀 1603·2019-08-29 16:14
閱讀 3729·2019-08-26 11:55
閱讀 2633·2019-08-26 11:50