說MGR - 成員間的通信模塊Part2

通信模塊分爲3部分。


1.本地數據包接收部分負責接收本地成員向其它模塊的數據發送請求,接收到的數據包被放入本地數據隊列等待處理。

2.成員間的通信部分負責和其它成員通信。通信工作包括:從本地數據隊列讀取數據包發送給其它成員,以及接收其它成員發送過來的數據包。各個成員之間通信使用了Paxos協議。

3.全局數據包發送部分將所有的數據包按順序返回給本地成員上的全局事務認證模塊。


當各個成員的通信模塊接收到上層模塊的數據發送請求時,這些併發的數據請求是無序的,如3個成員分別有1個數據包,分別是T1、T2和T3產生的數據包。這些併發、無序的數據包會通過Paxos協議匯聚到每個成員上,並且排序。最終每個成員的通信模塊都會擁有同樣的數據包,這些數據包會按照同樣的順序發送到各自成員上的全局事務認證模塊。


Paxos協議的核心工作就是對所有的數據包進行匯聚和排序,爲了完成這些功能,Paxos協議本身會進行3次TCP通信。


·發送數據包給其它成員的通信模塊。

·其它成員的通信模塊迴應收到的數據包。

·當超過半數的通信模塊(包括它自己)迴應後,發送消息告訴所有成員,這個數據包同步成功。只有當Paxos協議的三個步驟成功完成後,通信模塊纔會把這個數據包發送給全局認證模塊。


Paxos在通信上有如下特點。


·數據包同步成功需要三次TCP傳輸。

·每個數據包都要發送到所有的成員上,因此需要傳輸多份,傳輸的數據量會被放大。

·假設數據包發送到所有成員的過程是併發進行的,那麼數據包同步成功需要的時間是成員間最慢的那條鏈路上完成三次TCP通信的時間。


這些特點決定了MGR在延時大、帶寬小的網絡中的效率會比較低。MGR爲了提高Paxos對網絡的適應性,做了以下優化。


·使用LZ4壓縮算法對事物信息進行壓縮,當數據包的大小超過一個閾值時會自動壓縮,具體信息查看變量group_replication_compression_threshold的含義。

·Paxos會將多個本地事務信息封裝到一個數據包內進行通信,大大減少了Paxos通信的次數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章