PolarDB PostgreSQL版Serverless技术原理解读

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 数据库是现代企业IT系统中非常重要的一部分。在创建数据库时,客户往往需要比较保守地去配置数据库集群的资源,包括CPU、内存、存储以及连接数等多种参数配置,以确保业务能够在波峰和波谷都能平稳运行。在这种情况下,客户购买的集群资源在业务波谷时期会被闲置,导致整体成本偏高;而在业务压力增长阶段,集群资源又应对不足。Serverless数据库可以很好地解决这个问题。它能够让数据库集群资源随客户业务负载动态弹性扩缩,将客户从复杂的业务资源评估和运维工作中解放出来。本文描述PolarDB PostgreSQL版Serverless的构建中, 如何实现弹得快、弹得准、弹得稳、弹得广的几个关键技术点。

PolarDB PostgreSQL版Serverless技术原理解读

背景

数据库是现代企业IT系统中非常重要的一部分。在创建数据库时,客户往往需要比较保守地去配置数据库集群的资源,包括CPU、内存、存储以及连接数等多种参数配置,以确保业务能够在波峰和波谷都能平稳运行。在这种情况下,客户购买的集群资源在业务波谷时期会被闲置,导致整体成本偏高;而在业务压力增长阶段,集群资源又应对不足。Serverless数据库可以很好地解决这个问题。它能够让数据库集群资源随客户业务负载动态弹性扩缩,将客户从复杂的业务资源评估和运维工作中解放出来。
本文描述PolarDB PostgreSQL版Serverless的构建中, 如何实现弹得快、弹得准、弹得稳、弹得广的几个关键技术点。

关键技术点

弹得快

为了有效应对突发流量场景,Serverless形态实例以更少的任务步骤、更轻量的变配操作以及更智能的弹升策略完成了更快的规格弹升。
整体Serverless管控流程如下:
在PolarDB数据库的同主机上, 附带有采集组件, 负责获取数据库实例的性能数据。当数据库资源水位持续到达一定阈值之后, 采集组件立即通知扩缩容决策组件进行决策, 决策组件会根据本机资源情况, 对实例所在cgroup以及规格参数进行调整。PolarDB通过下面两个优化使该流程更加高效。

原地弹升优先

PolarDB通过监控组件实时采集宿主机上节点的资源使用水位。当资源使用达到预警值时,会率先尝试在当前宿主机内进行资源申请(PolarDB对Severless实例所在的宿主机上均有资源预留池以及资源管理组件,可以成功响应90%以上的资源申请请求)。在完成资源申请后,实例节点会立即扩展内核资源(如shared buffer等),整个原地弹升过程可以轻易做到秒级弹升。
image
当宿主机资源无法满足时,才会将实例节点从当前宿主机立即迁移至另一个资源充足的宿主机上去,整个迁移过程通过连接保持技术实现数据库连接在不同节点间的迁移,从而减少业务的性能抖动。

弹性可变步长

为了应对突发业务流量场景,PolarDB PostgreSQL版Serverless会在决策时确定弹升步长:根据实例当前的规格,以及节点实际CPU使用率高于预设的目标使用率的程度来确定下一次的弹升步长。
image
如上图所示,应对突发压力时,PolarDB PostgreSQL版Serverless在30s内以逐渐增大的扩容步长,由初始的1PCU达到预设扩容上限值(16PCU),期间单次弹升粒度由0.5PCU提升至4PCU。

弹得准

相对以往的固定规格形态而言,Serverless形态不仅仅使资源变配变得更加迅速,更重要的是,Serverless准确评估了业务负载对资源的使用,将技术人员从复杂的资源与成本配置问题中解放出来,所有的成本计算均以实际使用为准,真正做到了按需、按量使用。

多维度评估与弹升弹降

PolarDB PostgreSQL版为了实现弹得更准,在CPU资源使用、内存资源、以及内核资源使用等多个维度实现了资源评估,不同指标在弹升与弹降时采取的评估策略不同。
对于弹升场景,由单一指标满足弹升条件后触发;对于弹降场景,由多个指标联合满足条件后触发。其中,在CPU资源使用上,PolarDB PostgreSQL版以目标CPU使用率为基准来调控单次弹升弹降的粒度,在兼顾弹升更快的特性基础上,实现了弹得更准。
举例而言,扩缩容分别需要满足以下基础条件(根据节点实际的使用情况,节点扩缩容的情况可能会更加复杂):
单节点扩容:

  • 当单节点的CPU使用率高于85%,会触发本节点资源扩展。
  • 当单节点的内存使用率高于85%,会触发本节点资源扩展。

单节点缩容:

  • CPU使用率低于 55% 且内存使用率低于40%。

物理实例级独立弹性

独立弹性也是PolarDB PostgreSQL版Serverless保证准确弹性的重要手段。独立弹性指数据库代理与数据库节点之间的弹性是独立的,数据库节点与节点之间的弹性也是独立的。PolarDB PostgreSQL版在不同组件维度上实现独立弹性,以实现资源使用与业务负载的准确匹配。

内核组件细粒度弹性

资源方面, Serverless已经支持CPU和内存的弹性, 但原生PostgreSQL并未在buffer pool上实现在线扩缩容的能力, 导致buffer pool无法即时利用弹升出来的内存。
PolarDB PostgreSQL版基于PostgreSQL的DSM(Dynamic Shared Memory)机制进行了改进, 抽象出动态内存管理层DSGA(Dynamic Shared Global Area)。如下图所示, DSGA以granule为粒度对共享内存进行管理, 支持了上层各个带业务语义的共享内存组件的在线扩缩容能力, 如Buffer Pool、logindex memtable等。每一个共享内存组件均可独立进行扩缩容。
image

弹得稳

根据业务负载的变化而改变资源使用是Serverless实例最大的特点,业务流量是弹性的触发器。业务流量突发场景下做到稳定的秒级弹升是PolarDB PostgreSQL版Serverless的目标,当业务流量不稳定时,做到实例性能稳定也是PolarDB PostgreSQL版Serverless的目标。

瞬时抖动稳定

PolarDB PostgreSQL版在决策弹性时,会对一段时间窗口内的监控指标进行评估,由决策算法识别业务流量的模式,从而决策是否进行弹升或者弹降。例如,当稳定的业务流量出现瞬时抖动时,Serverless不受瞬时抖动的影响,依旧保持原有规格来保证实例性能的稳定。
image
如上图所示,Serverless实例随业务压力打满CPU后,PCU数量迅速抬升;期间由于业务不稳定因素,CPU使用率出现瞬时抖动,PolarDB PostgreSQL版Serverless能够根据历史的业务使用模式准确判断抖动,维持Serverless规格不变;当识别到业务对CPU使用率持续较低时,能够在10s内触发弹降,及时缩容。

内核扩缩容

在内核共享内存各组件的扩缩容流程上, 也存在两个挑战点:一是扩缩容时效性,二是控制扩缩容过程中对性能的影响。
时效性上, 由于设计上进行了分层,整体扩缩容流程使用了两阶段的感知协议:扩容时DSGA层先扩容,再通知使用共享内存的各个component扩容;缩容时先通知component缩容,DSGA再释放内存。为了提升时效性, 首先将两阶段在单个进程内的实现中合并为一个步骤,其次在跨进程感知的过程中使用了通知+轮询相结合的方式,提升感知的效率,确保整体扩容能在秒级内完成。
image
性能影响上, 在具体的Buffer Pool动态扩缩容实现中, 为了降低扩缩容过程中对性能的影响, 对buffer pool的持锁粒度进行了控制:

  • 扩容过程中,只在不遍历Nbuffers逻辑时做reload,新buffer添加仅需在串联进freelist时加一次spinlock。

image

  • 缩容过程中,对要缩容的granule,将其内部所有buffer设置为SHRINK状态,确保不会再次被复用,直至buffer锁均被释放,然后对未使用的脏页刷脏,最终回收freelist,整个过程仅需对granual3的buffer上锁。

image
从整体测试来看, 8 PCU规格下,使用pgbench压测连续进行20次扩缩容,性能曲线平滑,无可见影响。
image

弹得广

除了垂直扩缩容之外, 为了充分利用到PolarDB的一写多读能力,让读实现更好的线性扩展,PolarDB PostgreSQL版Serverless还支持了水平扩缩RO节点的能力。
横向扩容:以一个初始有一个 RW 节点的 Serverless 实例为例,集群设置的 PCU 最大值为 32,并且设置了自动横向扩容 RO 节点的范围,比如 1~4 个(最多可以支持扩容到 7 个)。在通过集群地址访问时,伴随着访问压力的增加,RW 节点会先进行独立弹升到最大 32 PCU 后。如果继续有扩容需求,会触发横向扩容 RO 节点事件,此时会伴随着一个新的 RO 节点扩容出来。新扩容的 RO 节点也会独立弹升,当弹升到最大 32 PCU 后,也会进一步触发扩容新 RO 的事件。由于每个节点都会独立弹升,并可能同时触发扩容新 RO 的决策,引入了静默机制,避免在短时间内频繁增加 RO 节点。
横向缩容:我们会监控整个 Serverless 集群的各个 RO 节点在一定时间窗口内的负载情况,并且满足一定时间窗口内某个 RO 节点为低负载时,会自动删除对应的 RO 节点,实现横向缩容,降低集群使用成本。

弹性测试

表数量:16
单表数据量:500000
压力阶梯数:16(连续上升8个阶梯,连续下降8个阶梯)
每压力阶梯并发数:4并发
每压力阶梯持续时间:30s

oltp_read_only

image

oltp_write_only

image

oltp_read_write

image

免费体验

目前PolarDB PostgreSQL版Serverless已在产品控制台开放公测, 公测持续三个月,您可以在PolarDB购买页直接开通Serverless免费实例进行体验。您还可前往PolarDB PostgreSQL Serverless弹性&价格力观测体验馆进行免费体验。
如有任何问题,欢迎加入“PolarDB PG Serverless用户交流群”钉钉群(群号: 75850003226)进行咨询、交流和反馈。

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
2天前
|
数据库
|
2月前
|
关系型数据库 分布式数据库 数据库
开源云原生数据库PolarDB PostgreSQL 15兼容版本正式发布
PolarDB进行了深度的内核优化,从而实现以更低的成本提供商业数据库的性能。
|
3月前
|
关系型数据库 Serverless 分布式数据库
ICDE’24 | 中国企业首获最佳论文,详解PolarDB Serverless如何在0.5秒内实现跨机迁移
数据库领域顶会 ICDE 2024于5月13-17日在荷兰乌特勒支(Utrecht, Netherlands)举办。ICDE (The International Conference on Data Engineering) 与VLDB、SIGMOD被公认为是国际数据管理领域三大顶级学术会议,此次在荷兰召开的ICDE 2024大会,共吸引北京大学、清华大学、浙江大学、MIT、斯坦福等机构,以及谷歌、微软、阿里云、华为、字节等公司的近1000名人员参会,共同探讨AI、数据库、数据处理领域的前沿技术问题。
|
3月前
|
关系型数据库 Serverless 分布式数据库
揭秘PolarDB Serverless:大促洪峰秒级应对,无感伸缩见证科技魔法!一探云数据库管理的颠覆性革新,强一致性的守护神来了!
【8月更文挑战第13天】在云计算背景下,阿里巴巴的云原生数据库PolarDB Serverless针对弹性伸缩与高性能一致性提供了出色解决方案。本文通过一个电商平台大促活动的真实案例全面测评PolarDB Serverless的表现。面对激增流量,PolarDB Serverless能秒级自动扩展资源,如通过调用`pd_add_reader`快速增加读节点分摊压力;其无感伸缩确保服务平滑运行,不因扩展中断;强一致性模型则保障了数据准确性,即便在高并发写操作下也确保库存等数据的同步一致性。PolarDB Serverless简化了数据库管理,提升了系统效能,是追求高效云数据库管理企业的理想选择。
96 7
|
4月前
|
关系型数据库 分布式数据库 数据库
PolarDB产品使用问题之如何进行PostgreSQL(简称PG)的全量和增量备份管理
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
4月前
|
存储 关系型数据库 分布式数据库
PolarDB产品使用问题之如何查看PolarDB for PostgreSQL的备份信息
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
4月前
|
关系型数据库 MySQL Serverless
体验阿里云PolarDB MySQL Serverless集群
体验阿里云PolarDB MySQL Serverless集群
|
18天前
|
关系型数据库 MySQL 分布式数据库
零基础教你用云数据库PolarDB搭建企业网站,完成就送桌面收纳桶!
零基础教你用云数据库PolarDB搭建企业网站,完成就送桌面收纳桶,邀请好友完成更有机会获得​小米Watch S3、小米体重称​等诸多好礼!
零基础教你用云数据库PolarDB搭建企业网站,完成就送桌面收纳桶!
|
2月前
|
关系型数据库 MySQL Serverless
探索PolarDB MySQL版:Serverless数据库的灵活性与性能
本文介绍了个人开发者对阿里云PolarDB MySQL版,特别是其Serverless特性的详细评测体验。评测涵盖了产品初体验、性能观测、Serverless特性深度评测及成本效益分析等方面。尽管试用过程中遇到一些小问题,但总体而言,PolarDB MySQL版表现出色,提供了高性能、高可用性和灵活的资源管理,是个人开发者和企业用户的优秀选择。
|
3月前
|
关系型数据库 MySQL 分布式数据库
PolarDB 与传统数据库的性能对比分析
【8月更文第27天】随着云计算技术的发展,越来越多的企业开始将数据管理和存储迁移到云端。阿里云的 PolarDB 作为一款兼容 MySQL 和 PostgreSQL 的关系型数据库服务,提供了高性能、高可用和弹性伸缩的能力。本文将从不同角度对比 PolarDB 与本地部署的传统数据库(如 MySQL、PostgreSQL)在性能上的差异。
192 1

相关产品

  • 云原生数据库 PolarDB