天天看點

叢集通信元件tribes之叢集的消息接收通道

與消息發送通道對應,發送的消息需要一個接收端接收消息,它就是ChannelReceiver。接收端負責接收處理其他節點從消息發送通道發送過來的消息,實際情況如圖每個節點都有一個ChannelSender和ChannelReceiver,ChannelSender向其他節點的ChannelReceiver發送消息。本質是每個節點暴露一個端口作為服務端監聽用戶端,而每個節點又充當用戶端連接配接其他節點的服務端,是以ChannelSender就是充當用戶端的集合,ChannelReceiver充當服務端。

叢集通信元件tribes之叢集的消息接收通道

    叢集消息複制過程中,每個節點ChannelReceiver負責接收來自其他節點的消息,假設一個n節點的叢集,一般情況下每個ChannelReceiver對應n-1個連接配接,因為叢集之間的通信連接配接都是長連接配接,長連接配接有助于提高通信效率,如下圖,4個節點的叢集,node1的ChannelReceiver的用戶端連接配接數為3,分别是node2、node3、node4三個節點作為用戶端發起的socket連接配接。這三個節點産生的資料會通過此通道同步到node1節點,同樣地,node2的ChannelReceiver擁有node1、node3、node4的用戶端連接配接,這三個節點産生的資料也會同步到node2節點。Node3、node4也擁有三個用戶端連接配接。為提高處理效率,此處還是使用NIO處理模型。

叢集通信元件tribes之叢集的消息接收通道

    除此之外,再接收操作中為了優化性能采取了很多措施,例如引入任務池,即是把接收任務提前定義好放入記憶體中,接收時可直接擷取使用而不用再執行個體化;例如一次擷取若幹個封包進行處理,即使用nio模式讀取消息到緩沖區後直接處理整個緩沖區的消息,它可能包含若幹個封包;網絡IO需要優化的地方及手段都比較多,tribes确實已經做了很多優化方面的工作。

<a target="_blank" href="https://item.jd.com/12185360.html">點選訂購作者《Tomcat核心設計剖析》</a>

繼續閱讀