选300平米别墅还是90平米小平层?一文带你读懂PolarDB分布式版集分一体化

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 1月17日,在阿里云PolarDB开发者大会上,阿里云PolarDB分布式产品部负责人黄贵发表了《分布式的PolarDB:分布式的能力,一体化的体验》主题演讲。

1月17日,在阿里云PolarDB开发者大会上,阿里云PolarDB分布式产品部负责人黄贵发表了《分布式的PolarDB:分布式的能力,一体化的体验》主题演讲。

黄贵表示,PolarDB分布式版(简称“PolarDB-X”) 早期一直聚焦分布式形态,我们在 2023 年 10 月公有云和开源同时新增集中式形态,将分布式中的DN 多副本单独提供服务,支持 Paxos 多副本、lizard分布式事务引擎,可以100%兼容MySQL。同时,PolarDB-X 内核上具备了集中式分布式一体化的技术融合,支持集中式和分布式两种形态可以无缝切换,我们简称为“集分一体化”。
image.png

阿里云PolarDB分布式产品部负责人黄贵

1. 什么是PolarDB分布式版集分一体化

我们可以用一个买房子的场景来做简单的类比:

集中式数据库可以类比为90平米的小平层。大部分情况下,对于大部分三口之家来说,买一个90平米左右的两室一厅小平层就足够了。这样的房子面积适中,价格适中,打扫起来也不用花费太多的精力,能满足一家人日常的需求。但有可能偶尔也会出现房子不够住的情况,比如,有亲戚朋友来的时候。同样地,大部分情况下,对于大部分中小企业来说,集中式数据库就能满足其日常的业务需求,其资源规模适中,成本适中,运维起来也比较简单。但在少部分场景下,中小企业可能也会出现业务突增的情况,需要高并发高吞吐的数据库来处理业务,对数据库的扩展性有一定的要求。

分布式数据库可以类比为300平米的复式别墅。复式别墅的一个优点是空间大,足够一个三世同堂甚至四世同堂的大家庭居住。复式别墅的设施也比较齐全,餐厅、会客厅、衣帽间、化妆间、储藏室、车库、花园等等一应俱全,功能丰富。但它的缺点也很明显,价格昂贵,普通家庭很难负担。另外,由于空间较大,使用起来也不太方便。例如,需要上下楼梯;楼层之间的WiFi信号可能不太好,可能需要组个局域网;打扫起来不太方便,可能需要雇佣专门的人打扫。同样地,分布式数据库具备较高的性能,能够处理复杂的业务场景,满足客户对高吞吐、大存储、低延时、易扩展和超高可用数据库服务的需求。但是,分布式数据库的价格较高,技术门槛和运维成本都较高,对大部分中小企业来说其适用范围比较窄。

那么,偶尔需要扩展居住空间的小家庭应该怎么办呢?有没有这样一种房子,既有复式别墅的大空间和齐全设施,又不需要业主为此付出高昂的成本呢?在现实生活中,这应该是不太容易实现的,但在数据库这个领域,我们正在努力通过集分一体化技术满足客户的这种诉求。

所谓集分一体化,就是兼具分布式数据库的扩展性和集中式数据库的功能和单机性能,两种形态可以无缝切换。在集分一体化数据库中,数据节点被独立出来作为集中式形态,完全兼容单机数据库形态。当业务增长到需要分布式扩展的时候,架构会原地升级成分布式形态,分布式组件无缝对接到原有的数据节点上进行扩展,不需要数据迁移,也不需要应用侧做改造。

2. PolarDB分布式版为什么要做集分一体化

可能有人会问,既然大部分中小企业都没有使用分布式数据库的需求,那分布式数据库还是不是真正有效的需求?答案是肯定的,分布式数据库的需求是显性的,我们已经有客户在使用分布式数据库了,可扩展、高并发、高吞吐的分布式数据库已经运行了很多年了。

我们现在应该探讨的问题是,分布式数据库能不能给大部分情况下没有分布式需求、但偶尔有分布式需求的客户来用?从功能上讲,分布式数据库当然可以给没有分布式需求的客户用,就好比300平米的复式别墅当然可以给一个普通的三口之家用。但问题是分布式数据库的成本太高了,在常规的业务场景里,没有分布式的需求,使用分布式数据库是否有一种“杀鸡用牛刀”的感觉?对此,我们秉持的理念是“在业务无需分布式时,客户不应为此付出成本”。

PolarDB分布式版之所以要做集分一体化,就是要解决一个问题:扩展使用场景来降低用户的使用门槛,同时省去分布式数据库带来的额外成本。

我们用Demo来展示下PolarDB分布式版集分一体化的产品体验。

PolarDB-X标准版升级到企业版

3. PolarDB分布式版怎样实现集分一体化

要实现集分一体化,需要突破一系列的关键技术,我们的核心技术理念:

  1. 用分布式技术提升集中式的可靠性与扩展性。

  2. 用集中式优化分布式的性能与体验。

3.1 Paxos多副本高可用

Paxos是一种解决分布式系统一致性问题的共识协议。

PolarDB分布式版的集中式形态,基于分布式中的DN节点提供单独服务,全面享受了分布式的技术红利,基于Paxos协议的多副本,保障数据多副本之间的一致性,满足RPO=0以及RTO<30秒,可以很好地满足金融级场景的容灾诉求。
image.png

3.2 无缝升级切换

PolarDB分布式版跨形态的无缝升级切换,支持将集中式形态下的DN,逆向恢复为分布式下挂的DN节点(过程中需要构建分布式元数据、以及带DNS域名的一键切换),整个升级过程中原有集中式的数据不动,分钟级完成分布式的整体切换。
image.png

3.3 分布式事务优化

PolarDB分布式版结合DN存储节点复制组的边界,引入TableGroup(简称表组)的概念,其中一个表有多个分区,表组内所有表相同序号的分区称为分区组(Partition Group)。分布式水平扩展后会自动调度数据,但会根据调度算法保持一个分区组内涉及的多张表数据都在相同的DN存储节点上。
image.png

例如,user、orders这两张表都以hash(user_id)作为分区函数,属于一个表组,对应的分区按照分区组进行绑定调度,确保相同user_id的数据都在一个DN存储节点上,这样的事务称为单分区组事务,因为所有的事务状态都发生在一个DN存储节点上,针对该场景的事务读和写都可以简化交互流程,我们称为集中式场景的下推优化。

事务下推

PolarDB分布式版针对分布式事务的标准流程是采用2PC(Two-Phase Commit)机制,CN节点(作为TM事务管理器)会通过XA协议接口和DN节点(作为RM资源管理器)进行事务交互。标准2PC事务提交的流程会有1次全局时间戳获取+2次协议交互,整体的网络交互成本会比较高,影响分布式事务的响应时间。
image.png

上图展示了PolarDB分布式版基于表组模型下的单分区组事务的相关优化:

针对autocommit=true的单分区读和写场景,可以利用单个DN节点的单机事务机制,可以减少通过GMS元数据获取GCN,与集中式相比并不会增加任何多余的网络请求,我们称之为事务 0 PC。
针对autocommit=false的单分区写场景,可以利用单个DN节点的单机事务机制,采用COMMIT ONE PHASE语义,与分布式2PC相比少了一次PREPARE的网络阶段,我们称之为事务1PC。
其余不满足单分区组的事务场景,采用标准的2PC事务提交流程。

3.4 按需分布式演进

image.png

如上图,PolarDB分布式版在面向分布式线性扩展设计上,针对集中式的能力,引入存储池和Locality的概念:

存储池:指的是将DN存储节点划分为互不交叉的池,支持在单个存储池维度通过添加/减少DN存储节点。

Locality:指的是将数据库中的对象(数据库、表、分区)通过Locality属性关联到不同的资源池。

典型的按需演进分布式的场景:
image.png

原始业务的多个单表,可以继续保持单表的形态,演进为分布式的垂直拆分,通过扩展单个存储池内的分布式节点后,可以实现多个单表在存储池多DN节点上的均衡分布。
原始业务的大表,可以在线变更为分布式表,演进为分布式的水平扩展,通过扩展单个存储池内的分布式节点后,分布式表的partition会自动进行数据均衡调度。
原始业务的多张表,大表在线变更为分布式表,单表继续保持并划分到多个存储池,整体演进为分布式的垂直拆分、水平拆分的组合场景,通过资源扩展实现线性能力。
按需演进分布式,除了基础的存储池模型定义,核心技术挑战在于如何支持更灵活的在线表变更能力(分布式DDL),目前PolarDB分布式版支持了完整的多种表类型之间的在线变更、迁移、分裂和合并等。

4. PolarDB分布式版集分一体化的落地实践

PolarDB分布式版的集分一体化自发布以来,已经在客户的业务场景中得到了实践,为客户提供了丝滑的无缝升级切换体验,解决了客户的业务痛点。识货APP的案例就是一个典型的案例。

4.1 客户痛点

识货APP是一个帮助消费者做网购决策的平台,为喜欢追求性价比的消费者提供网购优惠资讯,产品覆盖国内外主流购物商城,提供的商品比价、价格订阅等特色服务为消费者在选购商品时提供了及时而精准的推荐。

这一切归功于识货的数据加工平台,该平台负责收集同类商品全网渠道的价格信息、折扣信息、满减政策,并计算出同类商品在不同平台不同渠道的售价,然后通过数据服务平台推送给消费者,便于消费者准确锁定性价比最高的渠道。

4.1.1 大促期间,数据加工性能难以保证

现在各渠道平台大促期间满减、折扣越来越多样,越来越复杂。商品价格变更瞬息万变,为了在第一时间向消费者推送最及时的价格信息,数据加工的性能就尤为关键。

在以往的大促期间,最核心的价格变更动作就需要数小时完成,导致大促期间商品价格波动情况更新不及时,业务部门投诉比较多。客户也曾尝试使用顶配MySQL实例(104核),通过增加只读节点、读写分离、业务模块剥离等一系列举措,但问题始终得不到有效的解决。

4.1.2 商城扩品在即,平台处理能力捉襟见肘

识货的商品交易总额(GMV)已突破百亿,规模持续增长,预计未来几年内商城将扩品3~5倍,对识货整个数据加工平台的存储和计算能力都是很严峻的考验。目前核心业务的数据库已经是集中式的最高规格,升无可升,在过去的几年大促里,资源使用率偏高,处理能力急需突破。

4.2 PolarDB分布式版的解决方案

4.2.1 集中分布式一体化,性能提升400%

在过去的几年里,客户试图通过各种方式解决加工平台的性能瓶颈,也调研过市面上主流的分布式数据库产品,但是市面上的分布式数据库产品架构、技术各不相同,为了发挥其最佳性能,都需要遵循各自的最佳实践。识货的核心渠道库经过十多年的沉淀,积累了众多的业务模块,各个业务板块相互依赖关系错综复杂,且开发设计完全是单机习惯。一方面,客户很难将业务进行剥离。另一方面,短期内也不具备分布式改造的可能。所以客户一直未能坚定地迈出分布式升级这条路。

PolarDB分布式版为客户指出了一条不一样的分布式升级之路。PolarDB分布式版是一个集中式分布式一体化的数据库,每一个表既可以打散到不同的节点,也可以单节点存储。识货核心渠道库的特点是表的个数非常多,但单表体量有限,最大的日志表也只到亿级别。结合这两个特性,PolarDB分布式版给出了如下方案:
image.png

● 按业务模块区分,各个模块的表以单表形式存储在不同节点。

● 通过不同规格的DN支撑不同业务的特性,避免同一规格的DN带来的资源浪费。

● 通过Locality+存储池的能力,确保任何表都具备在任意节点间腾挪的能力,应对未来业务模型发生变化带来的挑战。

识货运维总监翟晟荣是这样介绍这次分布式升级的:“这就好比,我们拿出一个大规格的DN当做垃圾桶,所有理不清的业务逻辑的表先统一放在这里,一些核心流程上的关键业务表,我们给它提供单独的DN处理,上层通过分布式CN统一管理调度,对业务代码完全无感,而底层已经悄悄地完成了分布式改造。”

大促实战证明,经过这样的分布式改造后,数据处理能力提升了6倍,价格变更场景性能提升了4倍,从小时级别缩短到分钟级别。

整体的业务效果:
image.png

4.2.2 平滑迁移,性价比提升500%

PolarDB分布式版自身除了提供极致的MySQL兼容,确保了客户业务代码的0修改之外,在整个迁移过程中,也提供了丰富的功能,使迁移更丝滑。

▶︎ 热力分区图

image.png

从集中式向分布式演进的过程中,数据会被打散到不同的节点,客户普遍担心的问题包括:相关联的表是否被打散到了不同的节点带来了性能瓶颈?访问频繁的表是否被打散到了同一个节点上?为了解决这样的困扰,PolarDB分布式版提供了分区热力图的功能,可视化实时观测各节点的容量和访问的瓶颈,通过准确定位大幅降低了迁移和日常运维的难度。

▶︎ 智能压测

image.png

核心渠道库的大量信息是来自淘宝、亚马逊、拼多多等渠道的实时价格信息,在测试环境下无法模拟这些信息,导致客户无法在测试环境进行有效业务压测,这给割接带来了很大的风险。

阿里云提供了智能压测方案CMH-DOA(也称frodo),frodo可以全量采集原生产端MySQL的SQL审计,在目标端PolarDB分布式版进行完整的流量回放,同时支持倍速回放模拟更大的生产压力场景。通过真实流量的压测验证,有效降低了割接的风险,也为未来大促扩容提供了很好的参考依据,目前该工具目前已开源。

▶︎ 性价比大幅提升

以往在大促期间,识货MySQL的QPS一旦超过15w之后,性能明显下降,通过只读实例、应用限流等一系列手段后,整体QPS也只能勉强接近20w。迁移到PolarDB分布式版之后,客户在大促期间可以增加数据加工的并发,QPS峰值可以达到60w,而资源使用不超过50%。通过国际公认的性价比计算公式:price/performance,也就是月消费/QPS峰值,计算出每个QPS的成本,可以发现性价比提升了500%。

4.2.3 平台突破瓶颈,未来可期

渠道、商品、用户是整个识货最核心的板块,借助PolarDB分布式版集分一体化的能力轻松完成分布式演进,识货运维总监翟晟荣表示:“一次识货核心业务的分布式改造,我们没有让研发部门修改任何一行代码,性能就得到了质的飞跃。去年双11期间我们价格清洗需要4小时完成,而今年只花了15分钟,真正做到了代码0修改的分布式迁移。在618、双11等多个大促期间,我们做到了数据库0故障的表现。我们运维部门今年也真正做到了4个9的SLA,这对我们团队来说是很大的提升。”

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
3月前
|
存储 关系型数据库 分布式数据库
PolarDB 并行查询问题之分布式查询执行过程中的数据分发如何解决
PolarDB 并行查询问题之分布式查询执行过程中的数据分发如何解决
45 1
|
3月前
|
存储 缓存 负载均衡
【PolarDB-X 技术揭秘】Lizard B+tree:揭秘分布式数据库索引优化的终极奥秘!
【8月更文挑战第25天】PolarDB-X是阿里云的一款分布式数据库产品,其核心组件Lizard B+tree针对分布式环境优化,解决了传统B+tree面临的数据分片与跨节点查询等问题。Lizard B+tree通过一致性哈希实现数据分片,确保分布式一致性;智能分区实现了负载均衡;高效的搜索算法与缓存机制降低了查询延迟;副本机制确保了系统的高可用性。此外,PolarDB-X通过自适应分支因子、缓存优化、异步写入、数据压缩和智能分片等策略进一步提升了Lizard B+tree的性能,使其能够在分布式环境下提供高性能的索引服务。这些优化不仅提高了查询速度,还确保了系统的稳定性和可靠性。
90 5
|
3月前
|
存储 SQL 运维
“震撼发布!PolarDB-X:云原生分布式数据库巨擘,超高并发、海量存储、复杂查询,一网打尽!错过等哭!”
【8月更文挑战第7天】PolarDB-X 是面向超高并发、海量存储和复杂查询场景设计的云原生分布式数据库系统
110 1
|
3月前
|
C# UED 定位技术
WPF控件大全:初学者必读,掌握控件使用技巧,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用程序开发中,控件是实现用户界面交互的关键元素。WPF提供了丰富的控件库,包括基础控件(如`Button`、`TextBox`)、布局控件(如`StackPanel`、`Grid`)、数据绑定控件(如`ListBox`、`DataGrid`)等。本文将介绍这些控件的基本分类及使用技巧,并通过示例代码展示如何在项目中应用。合理选择控件并利用布局控件和数据绑定功能,可以提升用户体验和程序性能。
66 0
|
3月前
|
Cloud Native 关系型数据库 分布式数据库
什么是云原生数据库PolarDB分布式版
本文介绍什么是云原生数据库PolarDB分布式版,也称为PolarDB分布式版,本手册中简称为PolarDB-X。
94 0
|
1月前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
|
3月前
|
NoSQL Redis
基于Redis的高可用分布式锁——RedLock
这篇文章介绍了基于Redis的高可用分布式锁RedLock的概念、工作流程、获取和释放锁的方法,以及RedLock相比单机锁在高可用性上的优势,同时指出了其在某些特殊场景下的不足,并提到了ZooKeeper作为另一种实现分布式锁的方案。
112 2
基于Redis的高可用分布式锁——RedLock
|
3月前
|
缓存 NoSQL Java
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
这篇文章是关于如何在SpringBoot应用中整合Redis并处理分布式场景下的缓存问题,包括缓存穿透、缓存雪崩和缓存击穿。文章详细讨论了在分布式情况下如何添加分布式锁来解决缓存击穿问题,提供了加锁和解锁的实现过程,并展示了使用JMeter进行压力测试来验证锁机制有效性的方法。
SpringBoot整合Redis、以及缓存穿透、缓存雪崩、缓存击穿的理解分布式情况下如何添加分布式锁 【续篇】
|
8天前
|
NoSQL Redis
Redis分布式锁如何实现 ?
Redis分布式锁通过SETNX指令实现,确保仅在键不存在时设置值。此机制用于控制多个线程对共享资源的访问,避免并发冲突。然而,实际应用中需解决死锁、锁超时、归一化、可重入及阻塞等问题,以确保系统的稳定性和可靠性。解决方案包括设置锁超时、引入Watch Dog机制、使用ThreadLocal绑定加解锁操作、实现计数器支持可重入锁以及采用自旋锁思想处理阻塞请求。
41 16
|
1月前
|
缓存 NoSQL Java
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
59 3
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁