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

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

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


推荐阅读
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 集成电路企业在进行跨隔离网数据交换时面临着安全性问题,传统的数据交换方式存在安全性堪忧、效率低下等问题。本文以《Ftrans跨网文件安全交换系统》为例,介绍了如何通过丰富的审批流程来满足企业的合规要求,保障数据交换的安全性。 ... [详细]
  • 如何使用代理服务器进行网页抓取?
    本文介绍了如何使用代理服务器进行网页抓取,并探讨了数据驱动对竞争优势的重要性。通过网页抓取,企业可以快速获取并分析大量与需求相关的数据,从而制定营销战略。同时,网页抓取还可以帮助电子商务公司在竞争对手的网站上下载数百页的有用数据,提高销售增长和毛利率。 ... [详细]
  • 解决php错误信息不显示在浏览器上的方法
    本文介绍了解决php错误信息不显示在浏览器上的方法。作者发现php中的各种错误信息并不显示在浏览器上,而是需要在日志文件中查看。为了解决这个问题,作者提供了一种解决方式:通过修改php.ini文件中的display_errors参数为On,并重启服务。这样就可以在浏览器上直接显示php错误信息了。 ... [详细]
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社区 版权所有