您的位置:首页 > 数据库 > MySQL

Mysql semi-sync VS group replication, 谁快?

2021-03-05 21:07 423 查看

   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协议的同时解决可能存在的网络通讯效率瓶颈。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: