PolarDB for PostgreSQL 架构解析:计算存储分离与HTAP技术详解
PolarDB-for-PostgreSQL 项目地址: https://gitcode.com/gh_mirrors/pol/PolarDB-for-PostgreSQL
引言
PolarDB for PostgreSQL(以下简称PolarDB)是阿里云自主研发的一款企业级云原生数据库系统。作为PostgreSQL的兼容分支,PolarDB通过创新的计算存储分离架构,解决了传统数据库在扩展性、成本效益和可用性等方面的诸多挑战。本文将深入解析PolarDB的核心架构设计,重点介绍其计算存储分离机制和混合事务分析处理(HTAP)能力。
传统数据库的局限性
在业务数据量持续增长的背景下,传统数据库系统面临以下主要挑战:
- 存储容量受限:单机存储容量存在上限,难以应对数据爆炸式增长
- 扩展成本高昂:增加只读实例需要分配独立存储,造成资源浪费
- 实例创建缓慢:数据量越大,创建只读实例所需时间越长
- 主从同步延迟:主备节点间的数据复制存在显著延迟
PolarDB的核心优势
PolarDB通过计算存储分离架构带来以下显著优势:
- 弹性扩展:计算节点和存储节点可独立扩展,按需伸缩
- 成本优化:多个计算节点共享同一份存储,大幅降低存储成本
- 读写分离:集群包含一个主节点和多个只读节点,天然支持读写分离
- 高可靠性:数据三副本存储,秒级备份能力确保数据安全
架构设计概览
PolarDB的架构创新主要体现在两大方面:
计算存储分离架构
计算存储分离是PolarDB的架构基础,它解决了传统共享无架构(Shared-Nothing)的扩展性问题:
- 计算资源不足时,可单独扩展计算集群
- 存储容量不足时,可单独扩展存储集群
在这种架构下,主节点和只读节点共享同一物理存储,这带来了新的技术挑战:
- 过时页面问题:只读节点从共享存储读取的页面版本早于内存版本
- 未来页面问题:只读节点读取的页面版本晚于内存版本
- 故障切换问题:主备切换时,新主节点需要恢复脏页
HTAP混合负载处理
PolarDB通过共享存储MPP架构实现HTAP能力:
- 单机执行引擎:处理高并发的OLTP查询
- 分布式执行引擎:处理大型OLAP查询
这种架构具有以下特点:
- 性能可达传统MPP数据库的90%
- 支持SQL语句级别的弹性扩展
- 无需数据重分布即可增加OLAP计算资源
计算存储分离技术详解
共享存储的挑战
计算存储分离架构面临以下核心技术挑战:
- 数据一致性:如何保证计算集群N份数据与存储集群1份数据的一致性
- 读写分离:如何实现低延迟的数据复制
- 高可用性:如何进行故障恢复和切换
- I/O模型:如何从缓冲I/O优化为直接I/O
共享存储基本原理
PolarDB的共享存储遵循以下原则:
- 主节点可读写,只读节点仅可读
- 只有主节点可写入共享存储,确保数据一致性
- 只读节点通过应用WAL日志保持内存页面同步
- 主节点将WAL日志写入共享存储,仅复制元数据到只读节点
- 只读节点从共享存储读取并应用WAL日志
数据一致性保障
共享无架构的内存页面同步
在传统数据库中,主实例将WAL日志复制到只读实例,只读实例读取并应用这些日志,这是复制状态机的基本原理。
共享存储架构的内存页面同步
在PolarDB中,主节点将WAL日志写入共享存储,只读节点从共享存储读取最新WAL日志并应用,确保内存页面同步。
- 主节点刷出页面200版本的WAL日志到共享存储
- 只读节点读取并应用WAL日志,将页面从100版本更新到200版本
过时页面问题
当只读节点从内存移除已更新的页面后,再次查询时会从共享存储读取旧版本页面,导致过时页面问题。
解决方案是引入LogIndex机制:
- 只读节点维护页面到WAL日志的映射索引(LogIndex)
- 查询时根据LogIndex读取并应用相关WAL日志
- 日志应用采用惰性模式,仅对脏页应用WAL元数据
未来页面问题
当主节点刷出WAL日志速度快于只读节点应用速度时,只读节点可能读取到"未来"页面。
解决方案是控制主节点刷出速度:
- 主节点按LSN顺序刷出WAL日志
- 只刷出到已达成一致性的LSN位置
低延迟复制优化
传统流复制问题
传统方式复制完整WAL日志,路径长、延迟高。
优化方案:仅复制WAL元数据
只读节点可从共享存储读取WAL内容,主节点只需发送WAL元数据,大幅减少网络传输量。
HTAP技术实现
PolarDB的HTAP能力通过以下关键技术实现:
- 共享存储MPP架构:表或索引树整体存储,不分片
- 双引擎设计:OLTP引擎和OLAP引擎协同工作
- 资源隔离:OLTP和OLAP查询互不干扰
- 弹性扩展:按需分配OLAP计算资源
这种架构既保留了OLTP场景的工作流程,又无需修改应用数据模型,即可获得强大的分析能力。
总结
PolarDB for PostgreSQL通过创新的计算存储分离架构和HTAP能力,为企业级应用提供了高性能、高可用、高扩展的数据库解决方案。其核心技术包括:
- 基于共享存储的计算存储分离架构
- LogIndex机制解决数据一致性问题
- 元数据复制优化降低同步延迟
- 共享存储MPP实现HTAP混合负载
这些技术创新使PolarDB能够同时满足OLTP和OLAP场景的需求,为云时代的企业应用提供了理想的数据库基础设施。
PolarDB-for-PostgreSQL 项目地址: https://gitcode.com/gh_mirrors/pol/PolarDB-for-PostgreSQL
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考