如宝马3系和5系:PolarDB-X 与 DRDS 并驾齐驱

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS SQL Server,基础系列 2核4GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 在使用体验、架构、事务模型、性能提升上有所不同

作者:梦实



PolarDB-X 2.0(以下简称PolarDB-X)与DRDS(DRDS也称为PolarDB-X 1.0)都是阿里云上的分布式数据库产品。看起来她们都是Share-Nothing的架构,用水平扩展来解决单机数据库瓶颈问题。很多同学因此会有疑惑,她们俩到底有什么样的区别?


DRDS,其本质是搭建在标准MySQL(阿里云上的RDS For MySQL)上的分库分表中间件,具有很高的灵活性。


PolarDB-X是使用云原生技术的分布式数据库,具有一体化的数据库体验,其存储节点是经过了高度定制的MySQL,从而提供了大量中间件无法提供的能力(使用全局MVCC的强一致的分布式事务、私有RPC协议带来的性能提升、Follower上的一致性读能力等等)。


本文带大家从各个角度剖析下,PolarDB-X与DRDS的异同。


首先简单说下她们相似的地方:


  1. 她们都能基于Share-Nothing的架构,具备极强的水平扩展能力
  2. 她们都基于MySQL的生态体系,具有很高的MySQL兼容性
  3. 她们使用同样的SQL引擎,具备相似的SQL执行能力
  4. 她们均提供分布式事务、全局索引等常见中间件不具备的高阶能力
  5. 她们都在阿里巴巴内部广泛使用,历经多年双十一的考验,稳定可靠


接下来我们重点看下她们有哪些区别。




使用体验


抛开技术原理,我们先看下最直观的产品体验上有哪些异同。


  1. 购买实例


由于DRDS是一个中间件,所以其和MySQL的接线划分得比较清晰,DRDS本身不包含MySQL(RDS)资源,MySQL由用户单独购买。你需要在两个产品的控制台上单独进行购买,并在DRDS控制台上将其组装在一起。


PolarDB-X提供的是一个整体的数据库服务,你只需要创建一个PolarDB-X实例即可,其中包含了所需要的计算资源、存储资源。


  1. 建库


DRDS中,建库需要在控制台完成,并且在建库过程中需要选择已有或者购买新的MySQL资源:


1.png


PolarDB-X中,你可以像使用单机数据库一样,使用你习惯的工具进行连接,然后使用CREATE DATABASE指令创建数据库:


2.png


  1. 扩容


DRDS中,你需要评估每个MySQL的容量,并选择将哪些分库挪到新的MySQL存储上。


PolarDB-X中,你只需要选择节点数,数据将自动均衡地分布在各个存储节点上。


  1. 数据同步


如果你要将DRDS中的数据同步到下游,很多时候你需要使用DTS来订阅其中的每一个MySQL实例,并仔细处理同一个逻辑表的不同分表之间例如表名的差异等细节,并且DDL操作会让这个同步链路中断。


3.png


PolarDB-X提供一个统一的binlog服务,你可以使用DTS像订阅一个单机MySQL一样来订阅它。这个binlog服务完全兼容MySQL,其屏蔽了所有的分布式的细节,让下游服务认为它是一个普通的单机MySQL(例如PolarDB-X支持包括SHOW BINLOG EVENTS在内的所有BINLOG相关的指令)。


4.png


  1. 读写分离


DRDS中,你可以使用只读实例(备库)来进行一些高消耗的SQL,避免对在线业务产生影响。但是,你需要手动来判断这些SQL的类型,并通过HINT、不同的连接串等方式,将其放到正确的地方来执行。同时,你需要注意备库上存在延迟,你需要改造你的业务系统,使其能够容忍这种延迟。


PolarDB-X中,应用使用一个连接串即可,你无需关注这些SQL的类型和代价(用不着给它们加HINT),它的优化器会自动识别这些SQL的代价,并且使用正确的资源池来执行它们,尽最大可能避免AP的SQL影响到TP的SQL。


同时,PolarDB-X的存储节点,支持Follower上的一致性读,因此你不需要担心在备库上读取数据会读到老的数据,任何时候去读,都能读到最新的数据。


5.png


  1. 运维


由于DRDS允许使用你自己购买的MySQL实例进行组件,因此你拥有这些MySQL实例完整的运维权限,你可以对它们做任何你想做的事情,例如:
* 负载不均衡时,单独对其中一个节点进行规格的升级
* 将其中的某个存储节点给其他的业务使用
* 使用任意版本的RDS(5.6、5.7、8.0均可)
* 订阅任意一个RDS的binlog


但是,这种灵活性也存在一定的风险,例如,我们没有办法阻止你直接删除其中的一个分库,这会导致DRDS无法正常访问这个分库上的数据。


PolarDB-X对用户屏蔽了存储节点,你不能、也不需要直接访问其存储节点,它将一个数据库的整体视角呈现给用户,它通过自动的负载均衡、逻辑binlog、混合负载的HTAP等能力来减少你对存储节点直接访问的需求。目前PolarDB-X DN主要基于的的MySQL版本为5.7,后续8.0的支持也已经在规划中。




架构差异


以上的差异,很多由其架构决定,我们看下PolarDB-X与DRDS在架构上的差异点。


这是DRDS的架构图


6.png


DRDS的架构中,大量功能依赖外围管控系统完成,例如:


  • 扩容,使用内部一个叫精卫的组件来进行。
  • 元数据,一个地域内会共享一个叫Diamond的存储
  • 主备探活、切换,依赖一个叫ADHA的组件
  • 等等


这是PolarDB-X的架构图


7.png


PolarDB-X中,核心功能全部内聚到内核。


  1. PolarDB-X使用X-DB作为其DN(数据节点)。X-DB使用Paxos(PolarDB-X 一致性共识协议 —— X-Paxos)做到了RPO=0。
  2. PolarDB-X相比DRDS,引入了一个新的组件:GMS(Global Meta Service),他具备非常重要的作用:
  • 提供分布式事务所使用的全局自增的时间戳
  • 根据负载情况,调度数据的分布,使节点之间达到均衡
  • 提供统一的元数据,例如INFORMATION_SCHEMA
  • 对CN与DN进行管理,例如切换、上下线等
  1. DRDS的扩容基于binlog,依赖外围管控系统完成。PolarDB-X的扩容基于分布式事务,由内核完成。
  2. 架构继续往下细化,我们可以看一下其数据的分布情况:


DRDS下的RDS是传统的主备(或者三节点)架构,主备以实例级为单位,正常情况下备库不提供服务:


8.png


PolarDB-X下的DN,均为三节点架构,Paxos组以分片为单位,一个节点可以同时是一个分片的Leader与另一个分片的Follower,资源利用率更高:


9.png




事务模型


事务的实现机制,是一个数据库最根本的特征,PolarDB-X与DRDS上的事务机制,有着非常巨大的差异。


DRDS使用的是MySQL官方提供的XA事务。XA事务可以保证写入操作的原子性。


但是,标准的XA存在一个问题是,可能会在一个分片读到已提交的数据,再另一个分片读到未提交的数据。


例如,有两张空表t1(pk,name,addr) dbpartition by hash(pk),t2(pk,name,addr) dbpartition by hash(name)。假如应用在事务1中对两张表分别进行一个插入操作insert into t1 values (1,'sun','hz'),insert into t2 values (1,'sun','hz'):


begin;
insert into t1 (pk,name,addr) values (1,'sun','hz');
insert into t2 (pk,name,addr) values (1,'sun','hz');
prepare p1;
prepare p2;
commit p1;
commit p2;

注:*左右滑动阅览


同时,有另一个只读事务,分别对t1与t2进行count操作,它们就可能读到不一样的结果。


如下的时间线:


10.png


其中t1时刻,在一个事务内对t1和t2表进行查询,会得到不一样的记录数,这是一个不一致的结果。


DRDS中,为了解决这个问题,使用的是加锁的实现,在冲突多的情况下,有比较高的代价。


PolarDB-X使用自研的全局MVCC事务,在两阶段提交(2PC)的基础上,增加了事务快照时间戳(snapshot_ts)和提交时间戳(commit_ts)的支持。时间戳来自于全局 TSO 的分配,因此能做到外部一致的事务保证,并且避免了额外的加锁。在上述例子中,t1的时间由于比commit的时间晚,因此一定能读到两张表都是1的结果。


PolarDB-X的事务机制相对比较复杂,请大家参考:PolarDB-X 强一致分布式事务原理




性能提升


PolarDB-X的性能相对DRDS有很大的提升,主要体现在几个方面。


  1. 精简的网络结构


DRDS连接RDS,使用的是RDS标准的访问链路,中间需要经过SLB的中转,会增加一跳的网络延迟:


11.png


PolarDB-X的CN节点与DN节点均在一个物理网络中,中间是点对点的直连,不经过任何SLB/LVS等中转,具有最低的网络延迟,下图是一个CN到DN的网络拓扑示意:



  1. 私有RPC协议


DRDS使用标准的MySQL协议连接RDS,发送标准的SQL语句。但这里会有不少的开销,例如:


  • SQL经过DRDS优化器的优化后,还需被MySQL的优化器再次优化,如果涉及到多个MySQL分片,重复的次数会更多。
  • MySQL协议中有很多的冗余元素,例如结果集的头,里面存储了结果集每一行的名字、类型等信息,这些是不需要的。
  • MySQL协议返回的数据与DRDS内部计算使用的数据并不是一个格式,这中间需要经过再次转换。
  • DRDS使用连接池来连接MySQL,MySQL的连接与线程是绑定关系,同一个连接上同一时间只能执行一个SQL。这导致DRDS与RDS之间需要维持大量的连接。


PolarDB-X为了解决DRDS存在的这些问题,对MySQL进入了大量定制,中间的通信才用了私有的RPC协议,与MySQL协议相比有以下几个优势:


  • 传递的不再是SQL,而是执行计划,避免MySQL重复对SQL进行解析、优化的代价。
  • 使用异步模型,连接与线程、连接与会话不在是一一绑定的关系,使用比较少的连接即可满足需求。
  • 精简了通信中不需要的信息,例如结果集的头等。
  • 传输的数据格式与CN计算使用的格式完全一致,避免数据的二次转换。


通过使用私有的RPC协议,PolarDB-X相对于DRDS,在很多场景下得到了性能提升。


sysbench-select


  • 1.6亿行数据
  • 300并发
  • 计算节点和存储节点规格均为16c64g
  • +39%



节点CPU QPS
RT-AVG
RT-MAX
RT-95%
PolarDB-X 710.6% 97067.20
3.09ms
108.12ms
6.53ms
DRDS 1289% 69787.34
4.30ms
110.30ms
10.67ms


sysbench-oltp


  • 1.6亿行数据
  • 150并发
  • 计算节点和存储节点规格均为16c64g
  • +14.4%



节点CPU QPS
RT-AVG
RT-MAX
RT-95%
PolarDB-X 1139%
22587.23
119.52ms
757.47ms
471.02ms
DRDS 1236%
19732.12
136.82ms
798.47ms
415.74ms


  1. MPP引擎对分析类查询的加速


DRDS中使用的是SMP(单机并行)技术,PolarDB-X中使用的是MPP(多机并行)技术。这使得PolarDB-X相对于DRDS,在面对复杂分析查询时,可以使用更多的资源来加速。这个性能差异体现在TPC-H上非常显著。下面是同资源情况下,DRDS与PolarDB-X在TPC-H上的对比:



DRDS 总耗时386s,PolarDB-X总耗时274s。




小结


PolarDB-X与DRDS的差异是方方面面的,DRDS是分库分表中间件的代表,PolarDB-X是云原生分布式数据库。有一个形象的比喻,DRDS和PolarDB-X的关系相当于宝马3系和5系,她们将长期共存,为不同需求的用户提供服务。



【相关阅读】

PolarDB-X 存储架构之“基于Paxos的最佳生产实践”

PolarDB-X 私有协议:提升集群的性能和稳定性

技术解读 | PolarDB-X 分布式事务的实现

技术解读 | PolarDB-X 强一致分布式事务

PolarDB-X 一致性共识协议 (X-Paxos)

相关实践学习
快速体验PolarDB开源数据库
本实验环境已内置PostgreSQL数据库以及PolarDB开源数据库:PolarDB PostgreSQL版和PolarDB分布式版,支持一键拉起使用,方便各位开发者学习使用。
目录
相关文章
|
6月前
|
关系型数据库 分布式数据库 数据库
【PolarDB开源】PolarDB-X源码解读:分布式事务处理机制揭秘
【5月更文挑战第20天】PolarDB-X,PolarDB家族的一员,专注于大规模分布式事务处理,采用2PC协议保证ACID特性。源码解析揭示其通过预提交、一致性快照隔离和乐观锁优化事务性能,以及利用事务日志进行故障恢复。深入理解其事务处理机制对开发者掌握分布式数据库核心技术至关重要。随着开源社区的发展,更多优化方案将涌现,助力构建更强大的分布式数据库系统。
220 6
|
4月前
|
关系型数据库 分布式数据库 PolarDB
PolarDB产品使用问题之如何基于Docker进行PolarDB-X单机模拟部署
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
PolarDB产品使用问题之如何基于Docker进行PolarDB-X单机模拟部署
|
4月前
|
Oracle 关系型数据库 分布式数据库
PolarDB产品使用问题之使用pxd安装PolarDB-X出现报错,该怎么办
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
4月前
|
Kubernetes 关系型数据库 分布式数据库
PolarDB产品使用问题之PolarDB-X的架构形态有什么区别
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
4月前
|
关系型数据库 分布式数据库 PolarDB
PolarDB产品使用问题之原PolarDB-X集群无法连接且Docker容器已经被删除,如何恢复数据
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
4月前
|
运维 关系型数据库 MySQL
PolarDB产品使用问题之PolarDB MySQL版和PolarDB-X的区别是什么
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
4月前
|
关系型数据库 分布式数据库 数据库
PolarDB产品使用问题之将RDS切换到PolarDB-X 2.0时,代码层的SQL该如何改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
4月前
|
SQL 关系型数据库 分布式数据库
PolarDB产品使用问题之如何查看并进入您的PolarDB-X 2.0集群
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
4月前
|
存储 关系型数据库 MySQL
PolarDB产品使用问题之如何进行私有化部署PolarDB-X
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
5月前
|
关系型数据库 MySQL 分布式数据库
PolarDB产品使用问题之从MySQL迁移数据到PolarDB-X时,自定义函数不会自动迁移,该怎么办
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。

相关产品

  • 云原生分布式数据库 PolarDB-X
  • 云原生数据库 PolarDB