日志是数据库的重要组成部份,按顺序以增量的方式记录了数据库上所有的操作,日志模块的设计对于数据库的可靠性、稳定性和性能都非常重要。 可靠性方面,在有一个数据文件的基础全量备份后,对运行中的数据库来说,日志文件的重要性大于数据文件,只要操作记录到日志中并完成落盘,就等于操作完成,无须等待数据文件落盘。因为日志的顺序和增量方式,使得数据库的增量实时备份(包括备库)成为可能,更可以使用异步、同步或Raft多数等方式通过保护日志来保护所有的数据。

稳定性方面,日志的增量模式减少了需要写出的数据量,日志的顺序写对于IO操作十分友好,可以充分节约寻道时间(机械硬盘)和写入缓存,使得日志的写操作可以十分平稳,在面对高并发的事务时,不易出现剧烈的抖动,从而得到高的稳定性和性能。按照日志的组织形式,可以分为物理日志和逻辑日志,物理日志使用更偏向底层数据块操作的方式来描述变更,逻辑日志则偏向于使用记录镜像或SQL语句的方式来描述变更,事务引挚一般使用物理日志的模式来记录事务的底层操作,而非事务引挚则一般使用逻辑日志的方式。

用编程语言来打比方的话,物理日志相当于使用汇编语言来记录了操作,而逻辑日志则相当于使用Go/Python等级别的语言来记录操作,物理日志相比逻辑日志具有更高的可靠性、稳定性和性能。回顾数据库的历史,商业数据库都只支持物理日志,从来没有逻辑日志的说法。MySQL因为其上下分层(SQL层和引挚层)的设计导致事务存贮引挚层必须有独立的物理日志,以及多引挚支持的原因,必须在SQL层设计逻辑日志以透明化不同存储引挚(主备可以不同引挚)的支持,形成了一个双日志的现状,对MySQL的稳定性和性能带来了极大的困难和挑战。

物理日志因其格式比较底层,使其非常难以创建只读实例,并且从只读实例切换为读写实例需要比较长的时间,可以参考Oracel数据库的发展历程,长久以来一直没有支持随时只读的备库,将备库切换为主库需要极期严格的步骤,需要比较长的时间,比较难以实现自动化,无法轻松实现互联网读扩展流量扩展的需求。而逻辑日志因其格式比较上层,使其非常容易创建只读实例,从只读实例转换为读写实例可以在秒级完成,并形成了一整套的增量数据订阅消费。MySQL在享受逻辑复制好处时,也承受了逻辑复制带来的一些限制:

  • 存储引挚层难以直接产生逻辑日志,为了数据的一致性,在物理日志和逻辑日志之间引入了XA(2PC)机制,给稳定性和性能带来了极大的限制和挑战,导致事务处理性能和传统商业数据库相比有较大差距,基于物理日志则差距极小。
  • 同一事务的MySQL逻辑日志需要连续写出,因此无法支持较大的事务操作,过大的事务会导致操作失败。基于物理日志,同一个操作的日志可以分段(事务开始、操作1、操作2、事务提交)写出,因此可以支持大事务操作。
  • MySQL现有逻辑日志保存了整条记录的前后镜象,造成逻辑日志写入量较大增加IO压力,易引起性能下降和抖动。物理日志只记录变化字段,格式紧凑以减少总日志量,具备较好的IO性能,不易引起性能下降和抖动,肯有更高的性能和稳定性。
  • MySQL逻辑日志,在回入时需要重新经过SQL层代码,执行路径较长,并且不易并行处理,易造成备库时延,即逻辑日志产生的速度超过回放的速度;物理日志因包含完整事务信息,更易用事务一致性实现并行回放,可极大提升备库恢复的速度,做到高压力下主备ms级时延。如下图:

  • MySQL逻辑日志,不包含事务信息,无法做连续性检测,可以从任意点开始恢复,不熟悉不专业的操作容易,造成问题;物理日志包含完整事务信息,可以做连续性检测,会自动识别上一次的中断点,减少人工判断操作,可有效防止人为误操作。

因此基于逻辑复制的MySQL在大表加字段、建索引等操作上,主备复制的体验非常不够好。POLARDB在充分认识到MySQL逻辑复制的优缺点后,选择以物理复制为基础实现复制节点(Replica),提升了主备复制的效率和体验,为广大客户提供了稳定、可靠、高性能能的只读节点,引领了新一代复制技术的发展。

原文链接
本文为云栖社区原创内容,未经允许不得转载。

深入解读阿里云数据库POLARDB核心功能物理复制技术的更多相关文章

  1. 深入解读阿里云数据库POLARDB核心功能会话读一致性

    POLARDB架构 我们知道,POLARDB是一个由多个节点构成的数据库集群,一个主节点,多个读节点.对外默认提供两个地址,一个是集群地址,一个是主地址,推荐使用集群地址,因为它具备读写分离功能可以把 ...

  2. 重新定义数据库的时刻,阿里云数据库专家带你了解POLARDB

    摘要:POLARDB是阿里云ApsaraDB数据库团队研发的基于云计算架构的下一代关系型数据库,其最大的特色是计算节点与存储节点分离,借助优秀的RDMA网络以及最新的块存储技术.POLARDB不但满足 ...

  3. 云数据库POLARDB产品解读之二:如何做到高性价比

    现在做任何事情都要看投入产出比,对应到数据库上其实就是性价比.POLARDB作为一款阿里自研数据库,经常被问的问题是:性能怎么样?能不能支撑我的业务?价格贵不贵?很显然,在早期调研阶段,对稳定性.可靠 ...

  4. 阿里云云服务器 ECS和云数据库 PolarDB的简单使用

    阿里云云服务器 ECS和云数据库 PolarDB的简单使用 仅作为记录自己的操作使用,主要是怕自己太久不用都忘了 登录阿里云以后点击控制台 然后找到云服务器ECS,点击进入 在左侧找到实例,点击进入 ...

  5. Future Maker | 领跑亚太 进击的阿里云数据库

    7月31日,阿里云马来西亚峰会在吉隆坡召开,阿里巴巴集团副总裁.阿里云智能数据库事业部总裁李飞飞在演讲中表示:“作为亚太地区第一的云服务提供商,阿里云数据库已为多家马来西亚知名企业提供技术支持,助力企 ...

  6. 选择阿里云数据库HBase版十大理由

    根据Gartner的预计,全球非关系型数据库(NoSQL)在2020~2022预计保持在30%左右高速增长,远高于数据库整体市场. 阿里云数据库HBase版也是踏着技术发展的节奏,伴随着NoSQL和大 ...

  7. 【IT名人堂】何云飞:阿里云数据库的架构演进之路

    [IT名人堂]何云飞:阿里云数据库的架构演进之路 原文转载自:IT168 ​ 如果说淘宝革了零售的命,那么DT革了企业IT消费的命.在阿里巴巴看来,DT时代,企业IT消费的模式变成了“云服务+数据”, ...

  8. 从运维的角度分析使用阿里云数据库RDS的必要性--你不应该在阿里云上使用自建的MySQL/SQL Server/Oracle/PostgreSQL数据库

    开宗明义,你不应该在阿里云上使用自建的MySQL or SQL Server数据库,对了,还有Oracle or PostgreSQL数据库. 云数据库 RDS(Relational Database ...

  9. 赋能时空云计算,阿里云数据库时空引擎Ganos上线

    随着移动互联网.位置感知技术.对地观测技术的快速发展,时空信息已从传统GIS行业渗透到大众应用及各行各业.从静态POI(兴趣点)到APP位置信息,从导航电子地图到车辆行驶轨迹,从卫星影像到三维城市建模 ...

随机推荐

  1. [转].Net-C#的委托(代理)和事件

    一.代理 首先我们要弄清代理是个什么东西.别让一串翻译过来的概念把大家搞晕了头.有的文章把代理称委托.代表等,其实它们是一个东西,英文表述都是“Delegate”.由于没有一本权威的书来规范这个概念, ...

  2. MyBatis(九) 使用association定义单个对象的封装规则

    (1)接口中编写方法 public Emp getEmpandDept(); (2)编写Mapper文件 <resultMap type="com.eu.bean.Emp" ...

  3. 限制输入字数JS

    <tr> <th><b>说明内容:</b><span id="content">(500字以内)</span> ...

  4. linux学习历程-不熟悉的linux命令

    一:man(执行查看帮助命令) 二:常用的系统工作命令 1:echo echo命令用于显示在终端输出字符串或变量提取后的值,格式“echo [字符串]|[$变量]” 2:date 用于显示系统的时间和 ...

  5. Redis配置参数详解

    Redis配置参数详解 /********************************* GENERAL *********************************/ // 是否作为守护进 ...

  6. Httpclient代码

    /// <summary> /// 显示 /// </summary> /// <returns></returns> public ActionRes ...

  7. 通过cmd命令,杀掉占用端口号的进程

    错误问题:[Error running public: Unable to open debugger port (127.0.0.1:53110): java.net.BindException & ...

  8. node-basis(提供nodejs开发的基础包)

    地址: https://github.com/flybirdsoft/use-node-basis

  9. ndk编译ffmpeg

    #!/bin/bash NDK=/opt/android-ndk-r9d SYSROOT=$NDK/platforms/android-9/arch-arm/ TOOLCHAIN=$NDK/toolc ...

  10. 【RL-TCPnet网络教程】第30章 RL-TCPnet之SNTP网络时间获取

    第30章      RL-TCPnet之SNTP网络时间获取 本章节为大家讲解RL-TCPnet的SNTP应用,学习本章节前,务必要优先学习第29章的NTP基础知识.有了这些基础知识之后,再搞本章节会 ...