简介: 深入解读PolarDB-X的产品架构,以及分布式事务、透明分布式、水平扩展等技术内幕。

一、PolarDB-X是什么

PolarDB-X最早起源于阿里集团2009年提出用分布式架构替代传统商业数据库,阿里研发了TDDL分库分表中间件。2014年阿里集团开始全面上云,将TDDL升级成DRDS分布式数据库服务,实现了在线扩缩容以及数据拆分等能力。2018年后,国内分布式数据库技术进入一个百家争鸣的局面,阿里在这方面也做了很多探索,经过对X-DB、PolarDB等技术整合,诞生了PolarDB-X。

PolarDB-X结合了Sharding  On  MySQL、NewSQL、Cloud  Native  DB几种数据库理念的精华,具有云原生分布式的特性,底层使用了PolarDB云原生数据库的技术,上层用到了很多分布式技术。

二、PolarDB-X 技术架构

PolarDB-X采用经典的两层架构,分计算层和存储层。计算层用的PolarDB-X,可以独立水平扩展、扩缩容,各种能力完备。在整个系统里,一条SQL经过自研的解析器、优化器,得到分布式的执行计划;然后发送到存储节点执行;在中间的网络传输层,使用了定制的RPC协议,效率远高于传统的JDBC协议;之后执行计划会发送到PolarDB-X的执行引擎里去做具体的计算。

PolarDB-X目前具有高可用、高可扩展、极致弹性等几个特性,高兼容、HTAP、开放生态,在MySQL生态里是一款具有竞争力的产品。

三、PolarDB-X的几个关键技术

(一)分布式事务,如何实现ACID?

如果分布式数据库要支持金融转账场景,就必须支持分布式事务,才能保证一致性,不会发生数据丢失等异常。纵观业界技术,可以归成以下几类,第一类是基于MySQL的XA技术,实现两阶段提交;缺点是不能保证全局一致,不能保证全局快照。第二类是TSO技术做全局分配,实现给全局的事务定序,从而实现分布式快照。第三是HLC技术,也存在一定的局限性。第四类是在PG里比较多使用的GTM技术。这几项技术目前没有一个能完美解决所有场景,都需要在性能、可用性、扩展性方面去做权衡。PolarDB-X认为TSO是比较契合公有云以及混合云的技术。

PolarDB-X基于TSO技术实现全局分布式事务。第一个问题是如何去做全局时钟,也就是TSO。TSO会给分布式事务做定序,按照时间戳的顺序去做排序。第二个问题是如何基于MySQL的InnoDB做分布式事务。PolarDB-X对InnoDB的事务系统做了深度改造,从原本的ReadView的事务机制改造成基于时间戳的事务系统。有了基于时间戳的事务系统之后,结合TSO技术,就可以实现全局一致的分布式事务。除此之外,事务里还有很多的技术难点,如何处理长写事务以及做全局的垃圾回收。

用TSO技术有一个必须要解决的问题——通常会增加几十微秒到几百微秒的RT。因此,PolarDB-X实现了一阶段提交、2PC的异步提交等优化,能够尽量克服TSO带来的性能损失。

实现上述性能优化之后,经过与业界产品在sysbench和TPCC等测试集做了性能对比,PolarDB-X的性能相对来说非常有竞争力。

(二)透明分布式,如何优化易用性?

透明分布式主要解决的问题是分布式数据库的使用门槛。很多分布式数据库技术听起来很好,但用户却认为很难用。比如用户常常困扰,为什么某些场景的性能会不如一个单机系统,或者某些功能不具备,或者问题难以排查?从我们对服务用户的经验来看,用户在使用分布式数据库过程中通常会遇到以下几个门槛,即如何选择拆分键、如何优化分布式事务、如何优化慢查询。因此,我们研发了透明分布式的项目,试图降低用户使用分布式数据库的门槛。

第一,如何做Sharding。每个产品都有不同的解决方案,PolarDB-X结合了MySQL分区表语法,从语法上完全兼容MySQL列表,使用二级分区覆盖到用户的各种Workload。这背后是基于一致性哈希算法,实现分区级的动态分裂,大大降低扩缩容的代价。以Range分区为例,一开始可能是4千到5千这个数据范围,当这个Range的数据变多之后,它可以分裂成多个Range,迁移到多个机器上,避免数据过于集中。将这些技术融入PolarDB-X中,能够有效解决热点数据等问题。

第二,PolarDB-X做的跟其他产品有差异化的技术,是TableGroup。它解决的问题是Join下推,这是阿里的业务场景中非常常见。如果不能做Join的下推,做分布式Join的性能会比较差。在PolarDB-X中,多个表按一个分区方式做Partition,它们就会放置于同一个TableGroup,因此就可以实现Join下推。当然对应的,一个TableGroup中的分区分裂、迁移,都需要以PartitionGroup为单位了。

第三,扩缩容离不开的一个问题,就是Online DDL。例如PolarDB-X支持单表、拆分表、分区表,当用户对表类型进行修改,把分区键从买家ID改成卖家ID的时候,背后就是用Online DDL的技术。PolarDB-X支持多种的Online DDL,包括拆分键修改、创建索引、加减列等等,这些操作都可以在线上直接执行,对用户业务影响非常小。

PolarDB-X的透明分布式提供了分区表、全局索引、Online DDL等技术,使得用户的业务能够以很低的成本接入到分布式数据库中,并且后续随着业务的发展,数据库还可以做通过Scale-Up或者Scale-Out的方式提高性能。

(三)HTAP技术,如何提高分析能力

所谓HTAP,在PolarDB-X的理解中,即能否在线上数据库中执行复杂查询。它的价值有两方面,一方面是能够降低用户的使用成本、运维成本,另一方面,就是实时的分析,能够从实时数据获得实时洞察。做HTAP面对的技术挑战有几方面,分别是负载隔离、计算能力、存储能力。

对应到PolarDB-X的架构,会通过只读节点做负载隔离,简单查询发到读写节点,复杂查询发到只读节点执行,因此这两种负载能够得到较好的隔离,不会相互影响。这中间的智能路由是通过优化器的代价估算去实现,代价高的判定为AP查询,代价低的判定TP查询。除此之外,这种架构还需要解决的一个问题是一致性快照,PolarDB-X通过TSO技术,实现了只读节点的分布式事务。

接下来的问题是如何提升计算能力和存储能力。

提高计算能力主要通过MPP并行计算、向量化计算等方式。此前PolarDB-X主要面向TP场景,做算子下推,以及通过分区裁剪尽量查询更少的分片,优化TP场景的性能。而面对AP场景,需要的技术则很不一样。具体来说,PolarDB-X提供了原生的MPP支持,能够充分发挥多个节点的资源进行计算。为此,优化器里中增加了MPP优化阶段,在单机执行计划之后,中间加入Exchange,变成分布式的执行计划,实现多机并行。具体到执行器,也会有两种执行模式,一种是本地单机执行,另一种是MPP分布式执行。

具体来看,在MPP并行计算中,PolarDB-X做了两层的并行,第一层是节点之间的并行,第二层是计算节点内部的运行。分为两层的好处在于能够减少调度开销,减少数据传输的开销。除此之外,PolarDB-X还做了内存池化、流水线化、向量化等精细化的技术,通过向量化提高执行器的执行效率,通过流水线化增加并行度减少数据物化。这些技术使得PolarDB-X在执行复杂SQL查询时具有较高的效率。

除此之外,就是提高存储方面的性能。从技术角度看,单独做一个行存、列存都不难,难的是做一个能够实时更新的列存。PolarDB-X采用的方案是在写入节点用行存,在只读节点用列存,中间通过redo做异步复制,实现列存的实时更新。基于这样的架构,就可以实现行列混存,行存承担高并发写入,列存承担复杂查询。结合MPP、行列混存、向量化等技术,PolarDB-X实现了TPC-H场景的5-10倍的性能提升。这一成果也即将在公有云上线,敬请期待。

四、总结

PolarDB-X能够高度兼容单机MySQL,从SQL兼容到事务兼容到生态兼容。在此基础上,通过透明分布式的技术降低用户使用门槛,使得用户可以快速上手,适配各种用户业务,并通过弹性扩缩容的能力,适应用户的业务变化。而HTAP技术,将形成差异化的竞争力,使得用户能够从在线数据中获得实时洞察。

原文链接

本文为阿里云原创内容,未经允许不得转载。

深度干货|云原生分布式数据库 PolarDB-X 的技术演进的更多相关文章

  1. DTCC 2020 | 阿里云李飞飞:云原生分布式数据库与数据仓库系统点亮数据上云之路

    简介: 数据库将面临怎样的变革?云原生数据库与数据仓库有哪些独特优势?在日前的 DTCC 2020大会上,阿里巴巴集团副总裁.阿里云数据库产品事业部总裁.ACM杰出科学家李飞飞就<云原生分布式数 ...

  2. 保姆级教程!手把手教你使用Longhorn管理云原生分布式SQL数据库!

    作者简介 Jimmy Guerrero,在开发者关系团队和开源社区拥有20多年的经验.他目前领导YugabyteDB的社区和市场团队. 本文来自Rancher Labs Longhorn是Kubern ...

  3. 巨杉Talk | 拒绝数据碎片化,原生分布式数据库灵活应对数据管理需求

    2019年7月19-20日,以“运筹帷幄,数揽未来”为主题的DAMS中国数据智能管理峰会在上海青浦区成功举办.在DAMS峰会上,巨杉数据库为大家带来了题为“云架构下的分布式数据库设计与实践”的主题分享 ...

  4. Pulsar云原生分布式消息和流平台v2.8.0

    Pulsar云原生分布式消息和流平台 **本人博客网站 **IT小神 www.itxiaoshen.com Pulsar官方网站 Apache Pulsar是一个云原生的分布式消息和流媒体平台,最初创 ...

  5. Longhorn 企业级云原生分布式容器存储-券(Volume)和节点(Node)

    内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 云原生分布式块存储解决方案设计架构和概念 Longhorn 企业级云原生容器存储解决方 ...

  6. 云原生分布式文件存储 MinIO 教程

    文章转载自:https://mp.weixin.qq.com/s/_52kZ5jil1Cec98P5oozoA MinIO 提供开源.高性能.兼容 s3 的对象存储,为每个公共云.每个 Kuberne ...

  7. QCon笔记~《天下武功,唯快不破——面向云原生应用的Java冷启动加速技术》

    上周去听了QCon全球开发大会,其中有几场印象比较深刻的分享,除去几个比较概念化的话题,在Java技术演进这个Topic里的几个分享都是比较有干货的(但感觉工作中用不到) 首先是关于林子熠老师分享的冷 ...

  8. Longhorn,Kubernetes 云原生分布式块存储

    Longhorn 是用于 Kubernetes 的轻量级.可靠且功能强大的分布式块存储系统. Longhorn 使用容器(containers)和微服务(microservices)实现分布式块存储. ...

  9. Longhorn 云原生分布式块存储解决方案设计架构和概念

    内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? 目录 1. 设计 1.1. Longhorn Manager 和 Longhorn Engine 1.2 ...

  10. 云原生分布式 PostgreSQL+Citus 集群在 Sentry 后端的实践

    优化一个分布式系统的吞吐能力,除了应用本身代码外,很大程度上是在优化它所依赖的中间件集群处理能力.如:kafka/redis/rabbitmq/postgresql/分布式存储(CephFS,Juic ...

随机推荐

  1. 元宇宙解决方案——云端GPU在元宇宙中的作用

    GPU算力可以说是我们现在信息化时代的基础设施,在某种程度上说我们已经进入了算力时代,手机.电脑.车载等算力已经渗透到各行各业了. 当然算力对元宇宙也很重要,尤其是在可视化方面,元宇宙需要很逼真的渲染 ...

  2. 为什么数字化未来取决于3D实时渲染

    什么是实时3D? 如果你曾经看过2D图纸并将3D产品可视化,你就会知道这是多么具有挑战性.实时3D允许观众观看3D图像或场景并与之交互,例如在视频游戏中,这些图像或场景看起来是实时移动的. 实时3D成 ...

  3. python高级技术(进程二)

    一 进程对象及其他方法 '''一台计算机上面运行着很多进程,那么计算机是如何区分并管理这些进程服务端的呢?计算机会给每一个运行的进程分配一个PID号如何查看 windows电脑 进入cmd输入task ...

  4. python基础十一(异常)

    1.什么是异常异常是程序发生错误的信号,程序一旦出错就会抛出异常,程序的运行随即终止1)异常处理的三个特征异常的追踪信息异常的类型异常的内容2.为何处理异常为了增强程序的健壮性,即便是程序运行过程中出 ...

  5. python基础十(常用模块)

    一 time与datetime模块 1.time import time # 时间分为三种格式: # 1.时间戳:从1970年到现在经过的秒数 # 作用:用于时间间隔的计算 print(time.ti ...

  6. 记录--webpack和vite原理

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 每次用vite创建项目秒建好,前几天用vue-cli创建了一个项目,足足等了我一分钟,那为什么用 vite 比 webpack 要快 ...

  7. C# 通用OCR识别 文字识别 中文识别

    软件说明 基于以下两个开源项目,做了再次封装 https://github.com/paddlepaddle/PaddleOCR PaddleOCRSharp: 本项目是一个基于PaddleOCR的C ...

  8. mvn命令将 ueditor百度富文本编辑器 所需jar包上传到本地maven仓库

    1.需要的jar包位置 在解压后的路径中的jsp/lib下:(UEditor\jsp\lib) 2.打开命令行窗口 WIN+R 输入cmd并回车 直接在命令行输入如下命令:(一个一个输入运行,里面的路 ...

  9. #分类讨论#CF891A Pride

    题目 你有一个长度为 \(n\) 的数列 \(a\),你能执行一些操作. 每个操作是这样的:选择两个相邻的数 \(x\) 和 \(y\),把 它们中的一个 换为 \(\gcd(x,y)\). 问你把数 ...

  10. #扩展欧拉定理#CF906D Power Tower

    题目 给定一个数列,有\(m\)组询问 定义 \[\large f(x-1)={a_x}^{f(x)} \] 若 \(f(r)=a_r\) 求 \(f(l)\) 对固定的 \(mod\) 取模 分析 ...