共计 4011 个字符,预计需要花费 11 分钟才能阅读完成。
在 3 月 2 日的阿里云开源 PolarDB 企业级架构发布会上,阿里云 PolarDB 内核技术专家
北侠带来了主题为《PolarDB 总体架构设计和企业级个性》的精彩演讲。次要分享了存储计算拆散架构、HTAP 架构、节点高可用架构是 PolarDB 可反对的三种架构,PolarDB 还具备可用性、高性能、平安的企业级个性。并对 PolarDB 总体架构和企业级个性进行开展剖析。
直播回顾视频:https://developer.aliyun.com/…
PDF 下载:https://developer.aliyun.com/…
以下依据发布会演讲视频内容整顿:
PolarDB 是阿里云自主研发的云原生数据库,它的源代码曾经全副开源(源码仓库地址:https://github.com/ApsaraDB/P…)。上面将为大家具体解读开源 PolarDB 的总体架构和企业级的个性。
一、PolarDB 总体架构设计
PolarDB 的基础架构是云原生架构。传统数据库由主库、备库和一个 Standby 节点形成,主库复制 redo 日志到备库。传统数据库的架构存在以下四个问题:
① 扩展性差。减少节点的时候须要先将数据残缺复制,破费的工夫通常是小时级别甚至更长。
② 可靠性差。主库和备库之间须要采纳同步复制,会导致性能降落大略 20% 以上;如果采纳异步复制,则会产生数据失落的危险。
③ 可用性差。主库产生了故障后,HA 会切换到备库。新的备库须要回放大量 redo 日志能力进入可服务的状态,该过程可能须要分钟级别的耗时。
④ 老本高。存储老本会随着节点数目的减少而呈线性减少,此外还须要预留一些资源。
为了彻底解决以上问题,PolarDB 提出了云原生的架构,将计算和存储资源解耦。
上图左侧是传统的数据库,它的 CPU、内存、存储都在一台服务器上,称作计算存储一体化。右侧是 PolarDB 的架构,它分成了计算节点和存储节点两种类型的节点。数据存储在由存储节点形成的存储池里,各个计算节点通过高速网络读取存储池中的数据。
计算存储拆散的架构的劣势在于以下几个方面:
① 极致的、弹性的扩大能力:存储和计算可能分别独立地扩容。
② 升高存储老本:那么计算集群扩大到多少个,数据始终只有一份。
③ 易用性:具备分布式的劣势和单机数据库的体感,因为每个计算节点都能看到所有数据。对于用户来说,任何一个计算节点就相当于是一个单机数据库。
④ 可靠性比拟高:底层共享存储提供了三正本以及秒级快照的性能,为数据库的备份提供了比拟便捷的形式。
PolarDB 不仅设计研发了计算存储拆散的架构,还在在数据库的模块栈上进行了大量优化。
在事务层,实现了 CSN 快照来代替传统的事务快照;在日志层,实现了 LogIndex 这样外围的数据结构,解决了在计算存储拆散架构下遇到的特有的过来页面以及将来页面的数据问题,同时实现了提早回放和并行回放;在缓存层,实现了常驻的 BufferPool 和多版本页面;在存储层,实现了 DirectIO 模型页面的预读和预扩大的能力。
此外,用户还常常须要对 TP 事务的数据进行简单的剖析查问,比方在夜里做汇总报表和对账。此类查问个别都是一些非常复杂的 SQL,但并发不高,是典型的 OLAP 场景。
最后 PolarDB 的计算存储拆散架构在解决这类简单的 SQL 时,只能由单个计算节点来计算,无奈施展出计算集群的整体算力,同时也没有方法施展出存储池大带宽的个性。
过后业界的解决方案通常有两类:
① 在原有的 TP 零碎里面部署一套 AP 零碎,将 TP 的事务数据通过日志导入到 AP 零碎。此计划存在的问题在于两个零碎之间的提早比拟高,会导致数据的新鲜度不高。另外,部署一套独立的 AP 零碎会导致存储和运维的成本增加。
② 在原有的 TP 零碎上就地执行 AP 查问,但这势必会造成 TP 和 AP 两种业务相互影响。另外,AP 零碎也没有方法做弹性的扩大。
因而,PolarDB 研发了一个基于共享存储的分布式计算引擎,这也是业界独创的解决方案。该计划具备以下劣势:
① 它是一个一体化的存储计划,TP 和 AP 共用一份存储在共享存储上数据。相比于两套零碎,它缩小了存储老本,同时也提供了毫秒级的数据新鲜度,即在 TP 零碎里插入了一条数据,在 IP 零碎里能够以毫秒级的速度查问到。
② TP 和 IP 是物理隔离、相互不影响的。由局部计算节点执行单机的引擎来解决高并发的 TP 查问,由另外一部分节点执行分布式的查问引擎来解决简单的 AP 查问。
③ 具备弹性扩大能力。零碎面度一些简单的 SQL 时,呈现算力不够的状况,即可疾速减少计算节点,新的节点也能够迅速减少到分布式的计算引擎的集群里。
相比于传统的 OLAP 零碎,它是一个即时失效的零碎,不须要做数据的重散布和重打散,性能上有了微小的晋升。
在共享存储上实现一个齐备的分布式计算引擎须要实现以下几个模块:
① 分布式优化器。优化器会依据数据分布特色生成一个分布式的执行计划数。PolarDB 是基于 GPORCA 优化器框架做的二次开发,在开发过程中,须要让优化器感知到数据是共享的。GPORCA 优化器框架是基于 share-nothing,因而利用到 PolarDB 势必要减少很多规定转换。
② 分布式执行器。为了实现分布式执行器,须要实现一整套残缺的并行化的算子。比方在做数据扫描的时候,因为在 PolarDB 里底层数据是共享的,各个计算节点在做程序扫描的时候就须要做扫描算字的并行化。这些算子最初会组装成火山执行模型。
③ 事务一致性。因为分布式执行跨了多个计算节点,须要应用对立的数据位点和快照来进行事务的可见性判断,能力保障各个节点查问到的数据是全值一致性的数据。
④ SQL 全兼容。为了使新的分布式计算引擎可能被用户的业务应用,还须要对 SQL 的规范进行大量兼容性的开发工作。
PolarDB 除了可能以计算存储拆散的形式运行在一个共享存储的设施上,也能反对三节点高可用的模式。此模式能够不须要依赖共享存储的设施,以本地盘的模式来运行。
首先,节点之间通过 X-Paxos 算法来对 redo 日志进行复制,以保障在 region 外部可能提低提早同时 RP=0 的可用性。
其次,借助 X -Paxos 算法的复制实现了主动 failover 当 leader 节点宕机时,无需 DBA 人员染指,算法可能主动选出一个新的 leader 来主动复原。
此外,还能够借助 X-Paxos 算法实现集群成员变更。与此同时,PolarDB 还实现了 log 节点(即节点上只有 redo 日志没有数据页),能够通过用两个失常的节点加上一个 log 节点,实现 2.5 正本的形式,降低成本。
在跨 region 场景下,通过 log 节点实现了两地三核心的高可用部署形式。如上图,region1 是一个独立的 X -Paxos 三节点高可用的模式,region2 是一个独立的 DB 部署,并在同城的另一个机房里去部署一个 log 节点。那么 region 1 和同城 log 节点之间能够采纳同步复制或异步复制,而因为是在同一个城市外部,提早也比拟低,这样即实现了两地三核心的高可用的部署形式。
零碎还兼容了原生的流复制和逻辑复制,用户能够在上游部署一套本人的规范的 PostgreSQL 数据库来生产上游的 redo 日志。
对于前文提到的三个 PolarDB 架构,用户能够依据业务场景对其进行自由组合来应用。比方通过云原生 +HTAP 组合,能够满足对弹性、TP 和 AP 都有需要的业务。并且,三种架构的自由组合是在一套二进制里实现的,用户只须要在配置文件外面进行简略的配置,即可实现这三套架构的自由组合。
二、PolarDB 企业级个性
PolarDB 的企业级个性有四个方面。
① 架构上的反对,前文曾经进行了具体的解说,此处不再赘述。
② 高性能。
1) PolarDB 实现了 CSN 快照和 WAL 日志的流水线,解决了高并发下临界区的问题。2) 实现了预读和预扩大、RelSizeCache 以及 CLOG 的优化。那么这些优化是针对 DirectIO 模型下 IO 的优化。存储计算拆散之后,存储的每一个 IO 都须要通过网络去拜访后端的存储池,与原生场景下存在一些差别,因而须要对其进行大量的优化工作。3) 研发了 logIndex 外围数据结构, 它记录了每个页面历史上产生的 redo 日志。它不仅能解决在计算存储拆散下特有的过来页面和将来页面数据正确性的问题,还解决了 PB 数据库特有的半写问题。
③ 高可用。
1)实现了 DataMax,它提供了 log 模式来反对两地三核心的部署,还实现了 Online Promote、提早回放和并行回放。这三个大的性能优化了解体复原的速度,缩短了 DB 过程解体时的不可用工夫。2)实现了常驻 BufferPool,DB 过程重启后,buffer 须要从新初始化,而目前的机器配置会导致 buffer 越来越大,进而使得 buffer 的初始化须要消耗大量工夫。3)提供了 Replication Slot 解决了 DB failover 时 slot 的失落问题。它借助共享存储,将 slot 的信息存储到共享存储上,以此解决了复制槽失落的问题。4)实现了算子级别的内存管制,为每个算子的内存设置了一个下限,防止了因单个算子内存过多而导致整个 DB 过程解体。
④ 平安。PolarDB 提供了通明加密的性能,保障存储在盘上的数据是加密后的数据。目前通明加密反对 AES 128 位 和 AES 256 位 以及国密 SM4 的加密算法。
三、PolarDB 开源社区
PolarDB 曾经开源至 github。源码仓库地址:https://github.com/ApsaraDB/P…
在开源的过程中,咱们保持的策略就是 100% 兼容社区规范的 PostgreSQL,保障用户可能从规范的单机 PostgreSQL 无缝迁徙到 PolarDB 上。其次,咱们将所有组件全副开源,包含 PolarDB 内核、PolarDB 分布式文件系统和 PolarDB 云管控,并承诺开源的代码与私有云上的代码完全一致。
凋谢云代码的同时,咱们还提供了丰盛的文档和视频材料,比方架构原理文档、外围性能文档、疾速入门文档。