Vadim Yatsenko:Awide Labs 开源 Awide Polar——一款具备计算存储分离与 HTAP 能力的 PostgreSQL 分支
内容提要
Awide Labs 开源了基于阿里 PolarDB 的 PostgreSQL 分支 Awide Polar,包含增强的 PolarFS 存储层和 Polar Proxy。它采用计算存储分离架构,主节点负责写入,只读副本共享同一数据文件,支持 HTAP。pgbench 读写测试中达到每秒超 15 万事务。主要改进包括:引擎内 WAL 流水线和 CSN MVCC 降低争用;PolarFS 用无锁队列和零拷贝 I/O,随机读写 IOPS 分别提升约 11 倍和 7 倍;代理实现一致性读;扩展 Patroni 高可用并移植 DataMax。
延伸解读
共享存储架构的取舍
Awide Polar 采用计算存储分离,主节点负责写入,只读副本共享同一数据文件,因此增加副本无需复制完整数据库。但文章明确指出这仍是单写架构,写入吞吐的提升依赖引擎优化,副本仅扩展读和分析能力。读者需注意:存储层仍是共享资源,分析负载与事务负载会竞争 I/O,HTAP 并非完全隔离。
性能数字的适用边界
文章给出两组独立基准:pgbench 读写测试超过每秒 15 万事务;fio 512 客户端下,随机写 IOPS 约为上游 PolarFS 的 7 倍,随机读约为 11 倍。后者是文件系统层结果,不能直接等同于数据库 TPS 提升。读者应区分测试场景,避免将 IOPS 倍数误读为整体事务性能的同比改进。
代理一致性读的局限
Polar Proxy 基于 ProxySQL 增加 LSN 感知路由,支持会话一致性和全局模式,让客户端通过副本读到自己的写入。但文章说明,代理级全局模式不同于全局协调的事务快照,后者仍是计划工作。因此,跨会话的强一致读尚未完全实现,对一致性要求极高的场景需谨慎评估。
高可用与数据安全要点
项目扩展 Patroni 以识别共享存储拓扑,并移植 DataMax 作为 WAL 中继,使远程备库延迟不占用主库提交路径。文章强调,无损恢复依赖已确认的 WAL 在包括 DataMax 在内的位置保持可用。此外,PolarFS 增加跨主机读写租约防止竞争写入,并修复 fsync 错误处理等问题,这些是评估存储安全时需关注的实际改动。
Q&A
Awide Polar 是什么?它和 PostgreSQL 有什么关系?
Awide Polar 是 Awide Labs 开源的一个 PostgreSQL 分支,基于阿里 PolarDB for PostgreSQL 构建,包含增强的 PolarFS 存储层和 Polar Proxy。它采用计算存储分离架构,支持 HTAP,并在 pgbench 读写测试中达到每秒超过 15 万事务。
Awide Polar 的计算存储分离架构是怎么工作的?
Awide Polar 采用单写多读架构:主节点负责写入,只读副本共享同一份底层数据文件,因此增加副本不需要复制完整数据库。读和数据分析的计算能力可以独立于存储扩展,无需应用层分片。
Awide Polar 在数据库引擎层面做了哪些性能优化?
Awide Polar 将 PolarDB 11 的 WAL 流水线和基于 CSN 的 MVCC 引入 PostgreSQL 17 分支,并设有专用的 WAL 写入和刷盘 worker 来组织提交路径。同时增加了 WAL 插入、缓冲区映射、flush 列表和 LogIndex 的锁分区,并减少了副本上的同步开销,以应对高并发会话争用共享资源的场景。
Awide PolarFS 相比上游 PolarFS 有哪些提升?
Awide PolarFS 用无锁队列和 futex 唤醒替代轮询通信,通过注册共享缓冲区实现 PostgreSQL 与存储守护进程之间的零拷贝 I/O,并采用分片缓存和更细粒度锁降低守护进程内的争用。在 512 客户端的 fio 测试中,随机写 IOPS 约为上游的 7 倍,随机读 IOPS 约为 11 倍。
Polar Proxy 如何保证副本读一致性?
Polar Proxy 在 ProxySQL 基础上增加了 LSN 感知路由。会话一致性模式允许客户端通过副本读到自己的已提交写入;全局模式则让副本读等待该代理跨会话观察到的最新写入 LSN。集成支持预处理语句和扩展查询协议,LSN 协调设计避免额外网络往返。
Awide Polar 如何实现高可用和灾难恢复?
Awide Polar 扩展了 Patroni 以理解 PolarDB 的共享存储拓扑和节点角色,并将仅传输 WAL 的 DataMax 移植到 Awide Polar 17。附近的 DataMax 可同步接收 WAL 并异步转发到远程备库,使远程复制延迟不占用主库提交路径。受保护的提升允许备库在接管前获取剩余 WAL。
Awide Polar 的 HTAP 能力是如何实现的?
Awide Polar 利用 Polar 的弹性并行查询引擎,将分析工作分布到副本 worker 上执行,同时访问相同的底层行式数据。这样事务处理和分析可以共享同一数据集,无需 ETL 管道将数据导入独立分析数据库。弹性并行查询已移植到 Awide Polar 15,向 17 的移植正在进行中。