网易视频云:MySQL 5.7 并行复制实现原理与调优

网易视频云:MySQL 5.7 并行复制实现原理与调优

ID:47103104

大小:267.58 KB

页数:8页

时间:2019-08-03

网易视频云:MySQL 5.7 并行复制实现原理与调优_第1页
网易视频云:MySQL 5.7 并行复制实现原理与调优_第2页
网易视频云:MySQL 5.7 并行复制实现原理与调优_第3页
网易视频云:MySQL 5.7 并行复制实现原理与调优_第4页
网易视频云:MySQL 5.7 并行复制实现原理与调优_第5页
资源描述:

《网易视频云:MySQL 5.7 并行复制实现原理与调优》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、vcloud.163.com网易视频云:MySQL5.7并行复制实现原理与调优网易视频云是网易倾力打造的一款基于云计算的分布式多媒体处理集群和专业音视频技术,为客户提供稳定流畅、低时延、高并发的视频直播、录制、存储、转码及点播等音视频的PaaS服务。在线教育、远程医疗、娱乐秀场、在线金融等各行业及企业用户只需经过简单的开发即可打造在在线音视频平台。现在,网易视频云与大家分享一下MySQL5.7并行复制实现原理与调优。MySQL5.7并行复制时代众所周知,MySQL的复制延迟是一直被诟病的问题之一,然而在Inside君之前的两篇博客中(1,2)中都已经提到了MySQL5.7版本已经支持“真

2、正”的并行复制功能,官方称为为enhancedmulti-threadedslave(简称MTS),因此复制延迟问题已经得到了极大的改进,甚至在Inside君所在的网易电商应用中已经完全消除了之前延迟长达几小时的问题。然而,Inside君发现还是有很多小伙伴并不了解这个足以载入史册的“伟大”的特性,故作分享。总之,5.7版本后,复制延迟问题永不存在。MySQL5.6并行复制架构诚然,MySQL5.6版本也支持所谓的并行复制,但是其并行只是基于schema的,也就是基于库的。如果用户的MySQL数据库实例中存在多个schema,对于从机复制的速度的确可以有比较大的帮助。MySQL5.6并行

3、复制的架构如下所示:在上图的红色框框部分就是实现并行复制的关键所在。在MySQL5.6版本之前,Slave服务器上有两个线程I/O线程和SQL线程。I/O线程负责接收二进制日志(更准确的说是二进制日志的event),SQL线程进行回放二进制日志。如果在MySQvcloud.163.comL5.6版本开启并行复制功能,那么SQL线程就变为了coordinator线程,coordinator线程主要负责以前两部分的内容:§若判断可以并行执行,那么选择worker线程执行事务的二进制日志§若判断不可以并行执行,如该操作是DDL,亦或者是事务跨schema操作,则等待所有的worker线程执行完

4、成之后,再执行当前的日志这意味着coordinator线程并不是仅将日志发送给worker线程,自己也可以回放日志,但是所有可以并行的操作交付由worker线程完成。coordinator线程与worker是典型的生产者与消费者模型。上述机制实现了基于schema的并行复制存在两个问题,首先是crashsafe功能不好做,因为可能之后执行的事务由于并行复制的关系先完成执行,那么当发生crash的时候,这部分的处理逻辑是比较复杂的。从代码上看,5.6这里引入了Low-Water-Mark标记来解决该问题,从设计上看(WL#5569),其是希望借助于日志的幂等性来解决该问题,不过5.6的二进

5、制日志回放还不能实现幂等性。另一个最为关键的问题是这样设计的并行复制效果并不高,如果用户实例仅有一个库,那么就无法实现并行回放,甚至性能会比原来的单线程更差。而单库多表是比多库多表更为常见的一种情形。MySQL5.7并行复制原理MySQL5.7基于组提交的并行复制MySQL5.7才可称为真正的并行复制,这其中最为主要的原因就是slave服务器的回放与主机是一致的即master服务器上是怎么并行执行的slave上就怎样进行并vcloud.163.com行回放。不再有库的并行复制限制,对于二进制日志格式也无特殊的要求(基于库的并行复制也没有要求)。从MySQL官方来看,其并行复制的原本计划是

6、支持表级的并行复制和行级的并行复制,行级的并行复制通过解析ROW格式的二进制日志的方式来完成,WL#4648。但是最终出现给小伙伴的确是在开发计划中称为:MTS:Preparedtransactionsslaveparallelapplier,可见:WL#6314。该并行复制的思想最早是由MariaDB的Kristain提出,并已在MariaDB10中出现,相信很多选择MariaDB的小伙伴最为看重的功能之一就是并行复制。MySQL5.7并行复制的思想简单易懂,一言以蔽之:一个组提交的事务都是可以并行回放,因为这些事务都已进入到事务的prepare阶段,则说明事务之间没有任何冲突(否则就

7、不可能提交)。为了兼容MySQL5.6基于库的并行复制,5.7引入了新的变量slave-parallel-type,其可以配置的值有:§DATABASE:默认值,基于库的并行复制方式§LOGICAL_CLOCK:基于组提交的并行复制方式支持并行复制的GTID如何知道事务是否在一组中,又是一个问题,因为原版的MySQL并没有提供这样的信息。在MySQL5.7版本中,其设计方式是将组提交的信息存放在GTID中。那么如果用户没有开启GTI

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。