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, 谁快?相关推荐
- mysql mgr简介_MySQL Group Replication(MGR)使用简介与注意事项
MySQL Group Replication(MGR)是MySQL官方在5.7.17版本引进的一个数据库高可用与高扩展的解决方案,以插件形式提供.MGR基于分布式paxos协议,实现组复制,保证数据 ...
- MySQL Group Replication [Single-Primary Mode] 详细搭建部署过程
1,关于MySQL Group Replication 基于组的复制(Group-basedReplication)是一种被使用在容错系统中的技术.Replication-group(复制组)是由能够 ...
- MySQL 5.7.20 Group Relication(组复制)搭建手册
本博文介绍了Group Replication的两种工作模式的架构. 并详细介绍了Single-Master Mode的部署过程,以及如何切换到Multi-Master Mode. 当然,文末给出了G ...
- MySQL 5.7.17 Group Relication(组复制)搭建手册【转】
本博文介绍了Group Replication的两种工作模式的架构. 并详细介绍了Single-Master Mode的部署过程,以及如何切换到Multi-Master Mode. 当然,文末给出了G ...
- MySQL 5.7.17 Group Relication(组复制)搭建手册
本博文介绍了Group Replication的两种工作模式的架构. 并详细介绍了Single-Master Mode的部署过程,以及如何切换到Multi-Master Mode. 当然,文末给出了G ...
- plugin.super mysql_使用MySQ Clone Plugin部署MySQL Group Replication
1.文档背景介绍 本文主要介绍使 用MySQL8.0.17的新功能Clone插件来快速部署MySQL MGR,其中对于MySQL数据库的部署部分使用脚本化部署,不在本文细节范围(也就是默认已安装好My ...
- 从源码分析 MySQL Group Replication 的流控机制
Group Replication 是一种 Shared-Nothing 的架构,每个节点都会保留一份数据. 虽然支持多点写入,但实际上系统的吞吐量是由处理能力最弱的那个节点决定的. 如果各个节点的处 ...
- MySQL高可用框架--组复制(group replication)搭建测试
一.框架搭建 1.首先备份主库数据,有两种方法,冷备份和热备份.冷备份需要先停止master服务,sudo/etc/init.d/mysql stop,然后通过cp或者scp等命令将数据文 ...
- MySQL group replication
本篇文章主要讲解MySQL group replication介绍,文中有关MySQL,group的内容,希望对大家有所帮助. "MySQL group replication" ...
最新文章
- 思科路由器全局、接口、协议调试(下)
- 【数据库系统】核心知识归纳总结
- 剑指offer面试题[10]-二进制中1的个数
- w/atl的thunk技术
- 洞泾机器人园区地址_2020年4月上海市北新泾商圈写字楼市场租赁情况
- HQChart实战教程6-自定义分时图
- aaaa555555555
- 如果黑客转行干活动策划,我再也不怕开会睡着了
- 数字孪生坦克装置,让智慧战场监管透明化
- Vue中使用的el-upload开启multiple属性,但onSuccess部分数据status:uploading状态,影响图片回显
- 什么是平台,为何能成为平台?我们缘何进入了一个被平台控制的世界?
- COSCon'22 论坛集锦 1+16个论坛就等你了!
- DOS下常用BAT(cmd)命令
- 如何获取网页高度、屏幕高度、滚动高度?
- 爬虫入门—爬虫简介简单爬虫例子练习
- JavaScript new Date 处理毫秒转换成时间
- java赵云主角兵器谱游戏_完美武将:赵云兵器大盘点
- php如何对文字加超级链接_超链接怎么做
- Java工程师的进阶之路
- 征途2s不显示服务器列表,win10系统无法运行征途2的两种解决方法
热门文章
- 倒排文件索引(Inverted File Index)的建立
- tab翻页导致的问题
- 节后如何快速进入工作状态
- QueryBuilder : 打造优雅的Linq To SQL动态查询
- oracle dbms_sql.describe_columns,PL/SQL Challenge 每日一题:2017-3-6 DBMS_SQL.DESCRIBE_COLUMNS
- UVA1603Square Destroyer破坏正方形
- mysql差几年,MySQL两时间计算、年份差、月份差、天数差
- MyEclipse上Git的使用(包含导入和导出)
- CanvasRenderingContext2D(渲染上下文对象)
- TCP Fast Open知识