Mysql semi-sync VS group replication, 谁快?
mysql 的group replication 各節點之間需要通過paxos協議來進行通訊,通訊模型遠比semi-sync復雜。同時,group replication 還需要檢查是否寫沖突(即使在single primary的模式下,也存在需要進行檢查沖突的可能)。所以,在處理事務時,不管是通訊模型還是處理流程,group replicaiton都要比semi-sync復雜的多。 因此,可能就會理所當然的得出semi-sync比group replication要快,至少不會慢。 這個結論應該沒有毛病。
? ? ? ? ?以上是推論,為了更嚴謹一些,咱們來做一下測試,實踐出真知嘛(其實,有個時候,也會表象掩蓋事實。)
?測試環境:
? ? 同樣的一套機器(3臺),上面裝了mysql的semi-sync跟group replicaiton, 設置的innodb buffer也一樣。
? ? ?采用的測試方式也一樣,sysbench, 測試命令也一樣。
下面是group replication的測試結果:
tps:8887, 最短響應時間0.99ms, 最大響應時間1260.68ms, 也就是1.2秒。性能還不錯。
我們再來看看semi-sync的測試結果:
半同步的模式:1主2從,ack count設置為1,接到一個從庫的ack后事務完成并返回客戶端。
semi-sync的測試結果:tps 7555, 最短響應時間0.84ms, 最大響應時間228.44,平均響應時間3.97ms
結果對比: group replicaiton的tps 比semi-sync高,最短的響應時間,group replication都比semi-sync要大,因為group replication要多進行一次通訊,所以最短的響應時間長。但平均響應時間,居然group replication比semi-sync要短。為什么? 后面解釋。
? ? ?對比TPS之后,前面提過,group replication各節點之間通訊模型比semi-syn復雜得多,我們來證明一下。
? ? ?因為主節點需要處理sql ,有sql輸入還有執行結果返回帶來的額外流量,所以我們來僅僅比較從庫節點的流量。
? ? ?group replication從節點的流量(secondary 節點)
? ?從圖片可以看到,group replication 的從節點:接收流量大約12.5M/s ,發送流量5.1M/s
再來看看semi-sync的從節點
? semi-sync從節點,發送流量183K/s ?,接收流量4081KB?
放在一起進行比較:
? ?semi-sync從節點:接收流量4081K/s,發送流量183K/s ?,
???group replication 從節點:接收流量大約12.5M/s ,發送流量5.1M/s
? ? ? group replicaiton的tps8887,semi-sync7555, 除去這個(8887-7555)/7555=0.149, 即149%的tps差異。假如group replicaiton 也按照7555的tps執行,網絡流量大概是:接收流量10.6M/S,發送流量為4.1M/S.發送流量跟semi-sync模式下的接收流量大致相等。 因此,猜測從節點從主節點接收到binlog的之后,還會將binlog發送給另外一個從節點(paxos協議在group replication 還在學習中,尚未完全確認其內部通訊機制,paxos協議的實現還是比較復雜)。
? ? 一個事務的執行,在semi-sync跟group replicaiton模式下,在binlog提交之前所有的處理邏輯是一模一樣的,唯一的差別就是binlog復制到從庫的方式不一樣,完全相同的單個事務,在group replication模式下節點間的網絡通訊流量要比semi-sync大一倍多(僅比較接收流量),但是group replication卻比semi-sync有更高的tps,?只能說,semi-sync的日志傳輸效率太low.?
? ? ? ?確實如此: semi-sync模式下,發送接收日志后ack的信息的線程只有一個, 主庫發送日志的時候,也是一個一個event的發送,而不是作為一個大包發送。
而group replicaiton采用是多個paxos machine來接收跟發送日志,paxos machine之間可以并行,因此它的通信效率遠比semi-sync的模式高。
? ? ??? 因此, 如果semi-sync的日志發送機制采用類似group replicaiton這樣的發送機制,將大大提高semi-sync的性能(半同步跟異步之間的性能差別太大,唯一的區別就是需要多等一個ack,如果半同步的通信效率倍增,性能將也幾乎倍增),在這方面,優化的余地是非常的大的。希望官方在這方面進行更多的改進。 但,道聽途說,以后group replication是mysql的發展方向, 不知官方是否還有興趣繼續優化semi-sync的通訊機制。?
? ? ? 測試之后,group replication的表現還是讓作者有點意外,居然比semi-sync快。這個確實始料不及,也證明在mysql 在group replication在通訊機制上下了不少功夫,目的是實現paxos協議的同時解決可能存在的網絡通訊效率瓶頸。
總結
以上是生活随笔為你收集整理的Mysql semi-sync VS group replication, 谁快?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Node.js Electron的扩展
- 下一篇: 全球最权威人脸识别测试,中国团队依图科技