达永编程网

程序员技术分享与交流平台

PolarDB-X V2.3 集中式和分布式一体化开源发布

点击链接阅读原文,获取更多技术内容:PolarDB-X V2.3 集中式和分布式一体化开源发布-阿里云开发者社区


2023年云栖大会,PolarDB-X 正式发布 2.3.0版本,重点推出PolarDB-X标准版(集中式形态),将PolarDB-X分布式中的DN节点提供单独服务,支持paxos协议的多副本模式、lizard分布式事务引擎,可以100%兼容MySQL。同时在性能场景上,采用生产级部署和参数(开启双1 + Paxos多副本强同步),相比于开源MySQL 8.0.34,PolarDB-X在读写混合场景上有30~40%的性能提升,可以作为开源MySQL的最佳替代选择。


架构简介

PolarDB-X 采用 Shared-nothing 与存储分离计算架构进行设计,系统由5个核心组件组成。

  • 计算节点(CN, Compute Node) 计算节点是系统的入口,采用无状态设计,包括 SQL 解析器、优化器、执行器等模块。负责数据分布式路由、计算及动态调度,负责分布式事务 2PC 协调、全局二级索引维护等,同时提供 SQL 限流、三权分立等企业级特性。
  • 存储节点(DN, Data Node) 存储节点负责数据的持久化,基于多数派 Paxos 协议提供数据高可靠、强一致保障,同时通过 MVCC 维护分布式事务可见性。
  • 元数据服务(GMS, Global Meta Service) 元数据服务负责维护全局强一致的 Table/Schema, Statistics 等系统 Meta 信息,维护账号、权限等安全信息,同时提供全局授时服务(即 TSO)。
  • 日志节点(CDC, Change Data Capture) 日志节点提供完全兼容 MySQL Binlog 格式和协议的增量订阅能力,提供兼容 MySQL Replication 协议的主从复制能力。
  • 列存节点 (Columnar)

列存节点负责提供列式存储数据,基于行列混存 + 分布式计算节点构建HTAP架构,预计24年4月份会正式开源。


版本说明

梳理下PolarDB-X 开源脉络:

  • 2021年10月,在云栖大会上,阿里云正式对外开源了云原生分布式数据库PolarDB-X,采用全内核开源的模式,开源内容包含计算引擎、存储引擎、日志引擎、Kube等。
  • 2022年1月,PolarDB-X 正式发布 2.0.0 版本,继 2021 年 10 月 20 号云栖大会正式开源后的第一次版本更新,更新内容包括新增集群扩缩容、以及binlog生态兼容等特性,兼容 maxwell 和 debezium 增量日志订阅,以及新增其他众多新特性和修复若干问题。
  • 2022年3月,PolarDB-X 正式发布 2.1.0 版本,包含了四大核心特性,全面提升 PolarDB-X 稳定性和生态兼容性,其中包含基于Paxos的三副本共识协议
  • 2022年5月,PolarDB-X正式发布2.1.1 版本,重点推出冷热数据新特性,可以支持业务表的数据按照数据特性分别存储在不同的存储介质上,比如将冷数据存储到Aliyun OSS对象存储上。
  • 2022年10月,PolarDB-X 正式发布2.2.0版本,这是一个重要的里程碑版本,重点推出符合分布式数据库金融标准下的企业级和国产ARM适配,共包括八大核心特性,全面提升 PolarDB-X 分布式数据库在金融、通讯、政务等行业的普适性。
  • 2023年3月,PolarDB-X 正式发布2.2.1版本,在分布式数据库金融标准能力基础上,重点加强了生产级关键能力,全面提升PolarDB-X面向数据库生产环境的易用性和安全性,比如:提供数据快速导入、性能测试验证、生产部署建议等。

2023年10月份,PolarDB-X 正式发布 2.3.0版本,重点推出PolarDB-X标准版(集中式形态),将PolarDB-X分布式中的DN节点提供单独服务,支持paxos协议的多副本模式、lizard分布式事务引擎,同时可以100%兼容MySQL,对应PolarDB-X公有云的标准版:
https://help.aliyun.com/zh/polardb/polardb-for-xscale/pricing-of-polardb-x


01 集中式与分布式

1. 架构形态

PolarDB-X V2.3.0新增了标准版(集中式形态),因此后续的PolarDB-X开源形态主要分为:

  • PolarDB-X 标准版,主打集中式架构,支持单机MySQL形态(100%兼容MySQL),基于自研分布式共识算法(X-Paxos)提供RPO=0的数据库能力
  • PolarDB-X 企业版,主打分布式架构,高度兼容MySQL生态,支持强一致分布式事务和分布式并行查询,支持分布式水平扩展,可以从最小1个节点(集中式)扩展到1024个节点(分布式),构建集中式和分布式一体化的架构能力,后续的开源版本会发布HTAP行列混存架构,支持一键构建列存副本,通过行列混合查询全面加速在线分析能力。

架构形态的特点和选型建议:

形态

标准版(集中式)

企业版(分布式)

优缺点

特点:

  1. 主打MySQL 100%兼容性
  2. 小规格下(比如CPU<=32核),相比于分布式有性能优势,未来大规格需求可以平滑升级分布式

缺点:

  1. 单机MySQL下的B+Tree大表并发问题,单表行记录建议控制在500万~5000万
  2. 单机的scale up存在上限

特点:

  1. 主打分布式线性扩展,最大可支持1024节点,PB级别的数据规模
  2. 金融级容灾,支持同城3机房、两地三中心等容灾形态
  3. HTAP行列混存,内置列存副本加速在线分析能力

选型建议

  1. 需要MySQL,支持跨机房容灾,且满足RPO=0
  2. 需要低成本MySQL,且满足开源,业务可上可下
  1. 需要分布式并发扩展,解决订单交易类高并发
  2. 替代开源分库分表,解决运维问题
  3. 解决MySQL大表问题,基于分布式进行数据分片
  4. 需要分布式架构升级,且满足开源

2. 快速部署和体验

PolarDB-X 标准版采用一主一备一日志的三节点架构,性价比高,通过多副本同步复制,确保数据的强一致性。面向具备超高并发、复杂查询及轻量分析的在线业务场景。

现在我们来快速部署一个 PolarDB-X 标准版集群,它仅包含 1 个由三副本组成的DN节点。执行以下命令创建一个这样的标准版集群:

2.1. 基于k8s部署标准版

echo "apiVersion: polardbx.aliyun.com/v1
kind: XStore
metadata:
  name: quick-start
spec:
  config:
    controller:
      RPCProtocolVersion: 1
  topology:
    nodeSets:
    - name: cand
      replicas: 2
      role: Candidate
      template:
        spec:
          image: polardbx/polardbx-engine-2.0:latest
          resources:
            limits:
              cpu: "2"
              memory: 4Gi
    - name: log
      replicas: 1
      role: Voter
      template:
        spec:
          image: polardbx/polardbx-engine-2.0:latest
          resources:
            limits:
              cpu: "1"
              memory: 2Gi" | kubectl apply -f -

你将看到以下输出:

xstore.polardbx.aliyun.com/quick-start created

使用如下命令查看创建状态:

$ kubectl get xstore -w
NAME          LEADER                    READY   PHASE     DISK      VERSION   AGE
quick-start   quick-start-4dbh-cand-0   3/3     Running   3.6 GiB   8.0.18    11m

当 PHASE 显示为 Running 时,PolarDB-X 标准版集群已经部署完成!

注意:生产环境部署时建议内存>=8GB,参考:
https://doc.polardbx.com/deployment/topics/environment-requirement.html

2.2. 基于pxd部署标准版

version: v1
type: polardbx
cluster:
  name: pxc_test
  dn:
    image: polardbx/polardbx-engine-2.0:latest
    replica: 1
    nodes:
      - host_group: [172.16.201.11,172.16.201.11,172.16.201.11]
    resources:
      mem_limit: 2G

说明:replica数据节点数目,标准版中默认设置为 1,分布式形态可以设置为多个

执行如下命令,即可在集群内一键部署 PolarDB-X:

pxd create -file polardbx.yaml

部署完成后,pxd 会输出 PolarDB-X 集群的连接方式,通过 MySQL 命令行即可登录 PolarDB-X 数据库进行测试。

3. 性能测试

PolarDB-X 标准版集中式实例,基于Lizard分布式事务系统优化事务并发能力、相比于开源MySQL 8.0.34,在读写混合场景上有30~40%的性能提升。

详细性能测试情况如下:

机器用途

机型

规格

压力机

ecs.hfg7.6xlarge

24c96g

数据库机器

ecs.i4.8xlarge * 3

32c256g + 7TB的存储,单价:7452元/月

场景1:sysbench,表16张,单张表大小1千万

场景

50

100

150

200

250

300

oltp_point_select

317151.01

464316.53

485389.86

487124.91

489078.48

487684.83

oltp_read_only

291317.42

401566.17

420416.04

388937.68

382861.20

413884.86

oltp_read_write

156294.12

199195.62

214608.23

228713.64

254317.93

265322.61

oltp_write_only

38574.92

52876.25

59393.07

62235.96

65523.25

66866.19

oltp_update_index

38005.13

51803.68

58119.58

62263.46

63918.22

64203.57

oltp_update_non_index

39712.23

54418.94

64213.46

67319.67

69110.39

70028.34

场景2:TPC-C,1000仓

场景

50

100

150

200

250

300

1000 仓

173916.76

224736.03

241440.77

246228.18

247217.83

249902.01

场景3:对比开源MySQL(采用相同的主机硬件部署)

场景

并发数

MySQL 8.0.34
主备异步复制

PolarDB-X 标准版集中式
Paxos多数派

性能提升

sysbench oltp_read_write

300并发

200930.88

265322.61

32%

TPCC 1000仓

300并发

170882.38

249902.01 tpmC

46%


02 MySQL兼容性

PolarDB-X V2.3版本在分布式形态上,继续完善MySQL兼容性,降低用户从MySQL迁移的使用门槛。

1. 分区表

MySQL的分区表功能是指将一个大表拆分成多个较小的逻辑单元,每个单元被称为分区,并将这些分区存储在不同的物理存储介质上,这种分区机制非常贴合分布式的分区理念。因此,PolarDB-X 的分区表全面兼容并扩展MySQL分区表的语法,将MySQL的多个分区扩展到了分布式节点中,基于分布式的多节点进一步提高了并发能力。

PolarDB-X 分区表支持常见的分区方式:

  1. 范围分区(Range、Range Columns):根据列的范围将表的数据进行分区。可以根据某个列的数值范围(如日期、价格等)将数据分布到不同的分区中。
  2. 列表分区(List、List Columns):根据列的值列表将表的数据进行分区。可以将特定列的值匹配到预定义的分区列表中,每个分区可以包含多个值。
  3. 哈希分区(Hash、Key):根据列值的哈希结果将表的数据进行分区。哈希分区将表的数据按照哈希算法将数据均匀地分布到不同的分区中。

PolarDB-X 除了可以对表进行一级分区外,还可以对分区进行二级分区。二级分区是在一级分区的基础上再次将数据进行细分,一级分区与二级分区是完全正交的关系,支持使用任意两种分区策略进行组合,组合分区的数目支持达 36 种。

同时在PolarDB-X中,二级分区可以分为模板化分区和非模板化分区两种方式。

  1. 模板化分区(Template-based Partitioning):模板化分区是指通过定义一个模板来创建二级分区。模板包含了一系列分区规则,用于指定每个一级分区的子分区数量和名称。使用模板化分区,可以快速创建具有相同结构的二级分区。

以下是一个示例,展示了使用模板化分区创建二级分区的语法:

CREATE TABLE partitioned_table (
    ...
)
PARTITION BY RANGE COLUMNS(column1)
SUBPARTITION BY HASH(column2)
SUBPARTITIONS 4
SUBPARTITION TEMPLATE (
    SUBPARTITION s1,
    SUBPARTITION s2,
    SUBPARTITION s3,
    SUBPARTITION s4
) (
    PARTITION p1 VALUES LESS THAN (100),
    PARTITION p2 VALUES LESS THAN (200),
    ...
);

在上述示例中,通过SUBPARTITION TEMPLATE关键字定义了一个二级分区模板,指定了每个一级分区的四个子分区名称。然后在每个一级分区中,通过指定SUBPARTITION TEMPLATE将使用相同的子分区模板。


内容剩余60%,完整内容可点击下方链接查看:PolarDB-X V2.3 集中式和分布式一体化开源发布-阿里云开发者社区

阿里云开发者社区,千万开发者的选择。百万精品技术内容、千节免费系统课程、丰富的体验场景、活跃的社群活动、行业专家分享交流,尽在:阿里云开发者社区-云计算社区-阿里云

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言