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