Mysql semi-sync VS group replication, 谁快?
来源:互联网 发布:淘宝店铺装修模板 编辑:程序博客网 时间:2024/05/29 14:27
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 5.5 Semi-sync Replication安装配置、参数说明
- mysql semi-sync浅谈
- mysql5.5 semi-sync replication 安装维护
- MySQL Group Replication初测
- MySQL Group Replication 介绍
- MySQL Group Replication实践
- MySQL Group Replication 介绍
- MySQL Group Replication简介
- MySQL Group Replication 介绍
- Mysql Group Replication
- MySQL Group Replication 介绍
- MySQL 5.5中使用semi-sync replciation
- MySQL半同步Semi-sync原理介绍
- mysql semi-sync(半同步复制)
- MySQL Group Replication增加节点
- MySQL Group Replication 正式发布
- MySQL Group Replication 技术点
- 项目管理的经验(4年项目管理经验)
- AHA(American Heart Assosiation)数据库格式和MIT数据库格式
- jquery动态添加以及遍历option并获取特定样式名称的option
- 基于Tcp协议的简单Socket通信实例(JAVA)
- 如何将Tricaster非线性编辑的视频内容发布至网络进行网页直播
- Mysql semi-sync VS group replication, 谁快?
- Android中Uri的使用
- Spring Boot入门指南
- Mac中常用快捷键
- 有关MYSQL建库时有关时间戳字段的问题
- MAC版画图软件 paintbrush 推荐,类似 windows 上系统自带的画图软件
- cookie
- ORACLE操作备忘录
- mysql返回#1114 – The table ‘xxxx’is full解决方法