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, 谁快?相关推荐

  1. mysql mgr简介_MySQL Group Replication(MGR)使用简介与注意事项

    MySQL Group Replication(MGR)是MySQL官方在5.7.17版本引进的一个数据库高可用与高扩展的解决方案,以插件形式提供.MGR基于分布式paxos协议,实现组复制,保证数据 ...

  2. MySQL Group Replication [Single-Primary Mode] 详细搭建部署过程

    1,关于MySQL Group Replication 基于组的复制(Group-basedReplication)是一种被使用在容错系统中的技术.Replication-group(复制组)是由能够 ...

  3. MySQL 5.7.20 Group Relication(组复制)搭建手册

    本博文介绍了Group Replication的两种工作模式的架构. 并详细介绍了Single-Master Mode的部署过程,以及如何切换到Multi-Master Mode. 当然,文末给出了G ...

  4. MySQL 5.7.17 Group Relication(组复制)搭建手册【转】

    本博文介绍了Group Replication的两种工作模式的架构. 并详细介绍了Single-Master Mode的部署过程,以及如何切换到Multi-Master Mode. 当然,文末给出了G ...

  5. MySQL 5.7.17 Group Relication(组复制)搭建手册

    本博文介绍了Group Replication的两种工作模式的架构. 并详细介绍了Single-Master Mode的部署过程,以及如何切换到Multi-Master Mode. 当然,文末给出了G ...

  6. plugin.super mysql_使用MySQ Clone Plugin部署MySQL Group Replication

    1.文档背景介绍 本文主要介绍使 用MySQL8.0.17的新功能Clone插件来快速部署MySQL MGR,其中对于MySQL数据库的部署部分使用脚本化部署,不在本文细节范围(也就是默认已安装好My ...

  7. 从源码分析 MySQL Group Replication 的流控机制

    Group Replication 是一种 Shared-Nothing 的架构,每个节点都会保留一份数据. 虽然支持多点写入,但实际上系统的吞吐量是由处理能力最弱的那个节点决定的. 如果各个节点的处 ...

  8. MySQL高可用框架--组复制(group replication)搭建测试

    一.框架搭建       1.首先备份主库数据,有两种方法,冷备份和热备份.冷备份需要先停止master服务,sudo/etc/init.d/mysql stop,然后通过cp或者scp等命令将数据文 ...

  9. MySQL group replication

    本篇文章主要讲解MySQL group replication介绍,文中有关MySQL,group的内容,希望对大家有所帮助. "MySQL group replication" ...

最新文章

  1. 思科路由器全局、接口、协议调试(下)
  2. 【数据库系统】核心知识归纳总结
  3. 剑指offer面试题[10]-二进制中1的个数
  4. w/atl的thunk技术
  5. 洞泾机器人园区地址_2020年4月上海市北新泾商圈写字楼市场租赁情况
  6. HQChart实战教程6-自定义分时图
  7. aaaa555555555
  8. 如果黑客转行干活动策划,我再也不怕开会睡着了
  9. 数字孪生坦克装置,让智慧战场监管透明化
  10. Vue中使用的el-upload开启multiple属性,但onSuccess部分数据status:uploading状态,影响图片回显
  11. 什么是平台,为何能成为平台?我们缘何进入了一个被平台控制的世界?
  12. COSCon'22 论坛集锦 1+16个论坛就等你了!
  13. DOS下常用BAT(cmd)命令
  14. 如何获取网页高度、屏幕高度、滚动高度?
  15. 爬虫入门—爬虫简介简单爬虫例子练习
  16. JavaScript new Date 处理毫秒转换成时间
  17. java赵云主角兵器谱游戏_完美武将:赵云兵器大盘点
  18. php如何对文字加超级链接_超链接怎么做
  19. Java工程师的进阶之路
  20. 征途2s不显示服务器列表,win10系统无法运行征途2的两种解决方法

热门文章

  1. 倒排文件索引(Inverted File Index)的建立
  2. tab翻页导致的问题
  3. 节后如何快速进入工作状态
  4. QueryBuilder : 打造优雅的Linq To SQL动态查询
  5. oracle dbms_sql.describe_columns,PL/SQL Challenge 每日一题:2017-3-6 DBMS_SQL.DESCRIBE_COLUMNS
  6. UVA1603Square Destroyer破坏正方形
  7. mysql差几年,MySQL两时间计算、年份差、月份差、天数差
  8. MyEclipse上Git的使用(包含导入和导出)
  9. CanvasRenderingContext2D(渲染上下文对象)
  10. TCP Fast Open知识