<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                接下來一系列文章會對集群通信框架tribes進行源碼級別的分析,歡迎討論。 把若干機器組合成一個集群,集群為了能協同工作,成員之間的通信是必不可少的,當然可以說這也是集群實現中重點需要解決的核心問題,一個強大的通信協同機制是集群的基礎。 簡約地說,Tribes是一個具備讓你通過網絡向組成員發送和接收信息、動態檢測發現其他節點的組通信能力的高擴展性的獨立的消息框架。在組成員之間進行信息復制及成員維護是一個相對復雜的事情,因為不僅要考慮各種通信協議還要有必要的機制提供不同的消息傳輸保證級別,且成員關系的維護要及時準確,同時針對IO不同場景需提供不同的IO模式,這些都是組成員消息傳輸要遇到的需要深入考慮的幾點。而Tribes很好地將點對點、點對組的通信抽象得即簡單又相對靈活。 Tribes擁有消息可靠的傳輸機制,它默認基于TCP協議傳輸,TCP擁有三次握手機制保證且有流量控制機制,另外在應用層面的消息可靠保證分為三個級別: ①NO_ACK級別,這是可靠級別最低的方式,使用此種級別時則認為Tribes一旦把消息發送給socket的發送隊列則認為發送成功,盡管傳輸過程中發生異常導致接收方可能沒有接收到,當然這種級別也是發送最快的方式。 ②ACK級別,這是最推薦使用的一種方式,它能保證接收方肯定接能收到消息,Tribes向其他節點發送消息后只有接收到了接受者的確認消息才會認為發送成功,這種確認機制能在更高層面保證消息可靠性,不過發送效率會有影響,因為每個消息都需要確認,得不到確認的會重發。 ③SYNC_ACK級別,這種方式不僅保證傳輸成功還保證執行成功,Tribes向其他節點發送消息后接收者接收到不馬上返回ACK確認而是對接收到的消息進行處理,直到處理成功才返回ACK確認。如果接收成功處理失敗接收者會返回ACK_FAIL給發送者,發送者將會重發。當然這種級別消息發送效率是最低最慢的。 ?![](https://box.kancloud.cn/2016-01-15_5698bd8d413a3.jpg) 整個Tribes的設計核心可以用上圖表示,在IO層有三個重要的模塊,其中MembershipService模塊主要負責組成員關系的維護,包括維護現有成員及發現新成員,這些工作都是模塊自動運行完成,你無需關心組成員的維護工作;ChannelSender模塊負責向組內其他成員發送消息及其各種機制的詳細實現;ChannelReceiver模塊用于接收組內其他成員發送過來的消息及其各種機制的詳細實現。消息的可靠性就是通過ChannelSender及ChannelReceiver的協同得到不同級別的保證的。攔截器棧提供了在消息傳送到應用層之前對消息進行一些額外的操作,例如對某些信息進行過濾編碼等等操作;最后到應用層,多數情況下我們只需關注應用層的東西即能使用起來,應用層面主要就是一些監聽器,所以只要實現監聽器里面指定的方法即可以對IO層傳輸上來的消息做邏輯處理。 攔截器、監聽器的引入都是經典的模式,抽象一個底層作為數據處理層,實現各種復雜的通信及機制,而攔截器則是對底層數據的一種統一額外加工處理,監聽器則作為接口提供應用層對數據做業務邏輯處理,組成了一個優雅的設計方案。 喜歡研究java的同學可以交個朋友: ![](https://box.kancloud.cn/2016-01-15_5698bd8d22882.jpg)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看