接上篇:https://developer.aliyun.com/article/1223113?spm=a2c6h.13148508.setting.28.44ec4f0eNvAByn
二、 PolarDB企业级特性
PolarDB还实现了企业级特性。
架构方面,支持存储计算分离架构、HTAP架构以及三节点高可用架构。
1. 性能方面
• 实现了CSN快照用于解决单核场景下,随着核数增加其性能线性扩展的问题。
• 实现了WAL Pipeline功能,加速WAL日志的写入,提高写入吞吐量。
• 实现了预读和预扩展功能,一般做分析查询时需要大量扫描,而预读功能可尽可能地发挥共享存储大带宽的特性。
• 实现了RelSizeCache,查询时首先需要得到文件大小,此功能实现了对文件的元数据做缓存。
• 实现了CLOG优化以及FullPageWrite优化,主要为通过LogIndex以及页面多版本彻底避免FullPage的问题。FullPage在PolarDB里有两种解法。
。 解法一:如果共享存储提供了8k或8k以上的原子写,可直接将FullPage关闭。因为共享存储是软件定义的存储,其原子写可以大于硬件的页面单元。
。 解法二:如果共享存储原子写在8k以下,可以使用页面多版本,将FullPage内容从WAL日志剥离,即可大幅减少WAL日志容量。
2. 高可用方面
• 实现了DataMax,DataMax指logger节点,可以通过配置文件将PolarDB部署成只存储WAL日志,不存储数据页面。再配合X-Paxos即可实现两地三中心的部署架构。
• 实现了Online Promote,原生做HA切换时需要重启,而我们通过Online Promote实现了在线将备库切换为主库,进程无需重启。
• 实现了延迟回放和并行回放,能够降低主备之间的复制延迟,经过测试,在高压力情况下,可实现毫秒延迟。
• 实现了常驻BufferPool,数据库BufferPool做重启时,BufferPool的内存会丢失,导致数据库重启后需要花费长时间做预热。而常驻BufferPool将BufferPool内容剥离,放至共享存储,不会随着进程重启被销毁,维护了buffer的可用性。
• 实现了Replication Slot持久化功能,能够避免备库变成主库之后replication slot的丢失。
• 实现了算子级别内存控制。执行分析性查询时,某些算子会占用大量内存,导致内存膨胀,最终导致OOM。而算子级别内存控制可以精细控制每个算子的内存使用上限。
安全方面,实现了TDE透明加密功能。支持AES 128、256以及国密SM4算法。
三、 PolarDB开源社区
PolarDB在2021年云栖大会之前对所有内核代码全部做了开源,包括PolarDB内核、PolarDB分布式文件系统以及PolarDB云管控,我们始终坚持100%兼容社区的PostgreSQL。
开源代码与公有云上代码一致,经过了云上客户以及内部测试人员的大量验证,代码质量极高,用户可以直接将其部署在自己的生产环境中使用。
PolarDB在开源的同时,还提供了丰富的文档和视频资料,比如整体架构文档介绍、核心功能原理解析、快速入门文档以及每周的钉钉群PolarDB内核原理解析。