热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于数据库:首次公开阿里云开源PolarDB总体架构和企业级特性

简介:在3月2日的阿里云开源PolarDB企业级架构发布会上,阿里云PolarDB内核技术专家北侠带来了主题为《PolarDB总体架构设计和企业级个性》的精彩演讲。

简介:在3月2日的阿里云开源 PolarDB 企业级架构发布会上,阿里云 PolarDB 内核技术专家北侠带来了主题为《PolarDB 总体架构设计和企业级个性》的精彩演讲。

在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云管控,并承诺开源的代码与私有云上的代码完全一致。

凋谢云代码的同时,咱们还提供了丰盛的文档和视频材料,比方架构原理文档、外围性能文档、疾速入门文档。

原文链接
本文为阿里云原创内容,未经容许不得转载。


推荐阅读
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 开发笔记:计网局域网:NAT 是如何工作的?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 本文介绍了如何将PPT格式转换成PDF,并推荐了一款高效的PPT转换成PDF转换器。该转换器利用最新的超线程技术核心和多核心CPU性能,提高了转换效率和转换质量。同时,该转换器具备万能转换模式,可以轻松实现不同类型、不同内容和不同排版的PPT文件的转换。用户可以通过下载链接获取该转换器。 ... [详细]
author-avatar
zhan168
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有