数据库简史:多主数据库架构的由来和华为参天引擎的机遇

news2024/11/29 6:34:26

注:本文发表后,收到了很多后台反馈,其中关于大型机的早期成就不容省略。微调重发本文,纯属个人观点,错谬之处,仍然期待指正。

2023年10月13日,在北京举办的“2023金融业数据库技术大会"上,有一个非常重要的计划低调地发起了。这就是"北京金融信息化研究所"联合了华为、阿里巴巴、达梦、云和恩墨等企业共同启动的“金融多主数据库应用行动计划”。

18b9b2400173d50cd423f7e8dd4adc7c.png

“多主数据库”这么拗口的一个词,粗暴的翻译过来就是Oracle RAC集群,其典型特征是以多个计算节点、并发读写位于共享存储的集中式数据库。

这个计划,隐秘地将集中式和分布式数据库之争再次提上议题。

这个问题还有争议吗?是的,还有。而且由来已久,从未改变。

让我们简要的回顾一下数据库的历史。

【历史回眸】

话说天下大势,分久必合,合久必分,分分合合本是常态。在计算机领域、数据库领域,分分合合也自然而然。

大型机是合,小型机是分,集中式是合,分布式是分。在早期的计算机市场上,IBM的大型机(mainframe)占据主导地位,自其20世纪60年代发明后,凭借超强的计算和I/O处理能力,以及在稳定性和安全性方面的卓越表现,引领了计算机行业以及商业计算领域的发展。

由于大型机具备极高的可靠性和可用性、超强的计算能力,早期的IT系统进入了集中式处理阶段。应用系统、中间件、数据库等资源往往集中在一台服务器上。

可是大型机的昂贵价格让大多数用户望而却步,所以小型机和PC机开始次第出现。DEC是这一时期的明星企业,它快速发展成为当时仅次于IBM的计算机制造商。

当小型机和微型机出现时,单机的处理能力就显得不足起来,如何扩展数据库的能力也就成为了非常早期的挑战。

解决方案也毫不意外,就是两个方向,一个是分布式,一个是共享存储集群,一个是Scale-Out,一个是Scale-Up,和我们今天讨论的毫无二致。

1979年,美国计算机公司就在DEC计算机上就实现了世界上第一个分布式数据库系统SDD-1。随后,IBM在System R的基础上研制了分布式数据库R* ,加州大学伯克利分校开发了“分布式Ingres”等。分布式数据库从来不是一个时髦的新词汇,在数据库历史上的探索是非常早的。

但是分布式数据库的问题也非常突出,这个我们后面再讲。

另外一个方向,就是共享存储集群。在这个领域,早期操作系统起了关键作用。DEC 最早在操作系统层提供了集群解决方案,其在1983年发布的VAXcluster提供了卓越的系统级集群解决方案,这一技术通过操作系统来解决并发锁竞争等分布式系统核心问题。后来DEC推出的Rdb在集群方面也具备极大的领先性,当然后来DEC经营不善,于1994年将Rdb卖给了Oracle公司。

VAXcluster 集群在当时要依赖DEC生产的硬件,包括专用电缆和星形耦合器。下图是从历史文档中截取出来的,集群中的每个节点和存储设备都通过一对或两对CI电缆连接到中央的Star Coupler。每对电缆的传输速率为70 Mb/s,这在当时是很高的速度。VAXcluster是第一个取得商业成功的集群系统。当时对这套架构的一个负面声音是,需要专用硬件,架构复杂

可是我们用今天的视角来看,如果将其中的Star Coupler换成一个InfiniBand 交换机,这不就是一套数据库一体机吗?

当时DEC的RDB运行在VAXcluster上,就是一套完美的架构组合,和后来的Oracle RAC集群几乎一模一样。

526dc38980792a18a1f2622fa862f274.png

其实,在分布式这条路上,图灵奖获得者 Jim Gray 是一个全程参与者,他从IBM到天腾,就曾经实现了非常著名的Non-Stop SQL分布式架构,因其线性扩展能力而著称。那早在1987年。后来,Jim Gray 去了DEC,从DEC辗转到了微软,参与了SQL Server的重构。

【Oracle的抉择】

好了,问题开始摆在了Oracle创始人Larry Ellision的面前,时间已经来到了1998年,这时候Oracle 8i已经发布。并且在此之前,Oracle已经探索了一项共享存储集群技术,那时候称为并行服务器(Oracle Parallel Server,OPS)技术。这一架构能够在 DEC 的集群之上工作,但是在OLTP场景下性能并不理想。

是坚持没有先例的共享存储集群技术,还是跟随当时热门的Shared Nothing 分布式架构,2b or not 2b,这是一个问题。

事有不决问老板。Larry Ellision 开始拍脑袋。他认为,虽然看起来分布式架构是一个安全的方向、热点、大家都在跟风,但是事实证明,除了数据仓库工作负载外,无共享数据库集群从未在成熟的应用套件上成功运行过,SAP R3 和Oracle EBS等应用都无法适应新的架构,让用户从头来过无法被接受。埃里森拍板继续搞集群。这一版本在2001年Oracle版本9i中发布,埃里森将其命名为 "真正应用集群"(Real Application Cluster - RAC),意思是众人皆假,唯我独真

当然,这一决策也不是凭空拍脑袋,当时Oracle的一个技术专家罗杰•班福德已经提出了一个突破性的设计方案- "高速缓存融合"(Cache Fusion)技术(关于这些历史故事,我在新书《数据库简史》中做了详细的介绍)。最后的事实证明,这一次开创性的冒险,Oracle是赌对了。

959a4db750345efd3f30a29ad37f80e6.png

同志们,大家可以看一下,20多年的问题和今天是否有差别?我认为是没有的。让应用适应数据库,还是数据库适应应用?每个人心中自有答案。当然我们必须致敬华为,Meta ERP 以一己之力、行业协同,彻底解开自身在特定历史时期所面临的这一难题

那么 Oracle 是怎么彻底解开这一 RAC 集群路线上的难题的?

那就是将 VAXcluster 写到数据库里去。卧榻之侧,岂容他人鼾睡。

大家都知道,Oracle从 8 就开始做 DLM(分布式锁管理器),而这一技术的鼻祖是DEC。Distributed Lock Manager 最早就是 OpenVMS 集群软件中负责管理节点访问共享资源的组件。1982 年,在 VAX/VMS V3.0 中就出现了第一个用于单机系统的锁管理器,它为驻留在单个处理器上的多个进程提供同步服务,并能消除死锁。分布式锁管理器由 Steve Beckhardt 设计,于 1984 年随 VAX/VMS V4.0 一起发布。

Oracle RAC管理员非常熟悉的 Resource Manager、Lock Remastering 等都是 VAX 集群里首创的术语。以下这段VaxCluster手册中的描述放到今天的数据库手册中也毫无问题:

锁管理器的实现是为了将锁管理的开销分散到整个集群中,同时还能将执行锁服务所需的节点间流量最小化。因此,内部数据库分为两部分:资源锁描述和资源锁目录系统,这两部分都是分布式的。

每个资源都有一个主节点,负责授予该资源的锁;主节点维护一个已授予锁的列表和一个该资源的等待请求队列。对一棵树的所有操作而言,主节点就是对根节点提出锁请求的节点。当主节点维护其资源树的锁数据时,任何对另一个节点掌握的资源持有锁的节点都会维护自己的资源和锁描述副本。

资源目录系统将资源名称映射为该资源的主节点名称。目录数据库分布在愿意分担这一开销的节点之间。给定一个资源名称,节点就可以根据名称字符串和目录节点数量的函数,轻松计算出所负责的目录。

当然除了 DEC 之外,早期的 Veritas 也通过集群软件和 Oracle RAC 紧密连接,而且售价相当可观,几乎和数据库相当。

但是,当Oracle将Cluster“写入数据库”之后,这些软件和数据库的连接都被切断了,也再未对数据库产生如早期般的深远影响

由于在数据库领域,几乎只有Oracle在坚定的走向共享存储集群的路线,第三方集群件在数据库领域从此声名不显。

说完了Oracle和DEC的故事,再来看看IBM。IBM是蓝色巨人,在所有技术栈上几乎都有多套解决方案。在集群这一方向上,IBM的大型机也形成了深厚的技术积累。

IBM 最早于1990年提出Systems Complex(也即SysPlex)概念,1994年提出Parallel Sysplex概念,并行系统耦合体是大型机最具代表性的集群技术。可以将一台或多台机器组成Sysplex,用于跨系统的通信联络,最多支持32个LPAR资源共享的读/写。同时提出的还有CF,即Coupling Facility - 耦合装置,CF是一种支持共享对象的技术。在DB2集群中,CF提供了一个集中化设备来管理锁,并且还充当脏页(dirty page)的全局共享缓冲池,从而有助于实现可伸缩性和可恢复性操作。

162018bf5d407dc7b057cc3e596893ed.png

C.Mohan 等人在1997年发表的论文中,详细的介绍了IBM基于共享数据的集群设计,以及Coupling Facility在其中所发挥的关键作用。

a9f9cd5be46f85713149ebb886e61bf6.png

这些技术后来被下放到小型机中,2009年,DB2推出了基于小型机的pureScale集群,但是没有取得像Oracle RAC那样的成功。

在pureScale的架构下,因为CF(被重新释意为Caching Facility)的存在,在集群成员节点故障时,不需要进行资源目录的冻结,这是优势;但是CF存在单点,也需要进行高可用保护,客观上也增加了集群的复杂性。

b528db4ee0d3194bacefcc7cf3ab6e89.png

【上下求索】

前面的数据库历程,我们见证了系统软件的集群时代,数据库一体化的时代,最后,Oracle RAC集群占据了主流,并囊括了集群件的全部能力。

可是历史总在轮回,数据库的问题,不一定都要在数据库中解决。在中国数据库,尤其是分布式蓬勃发展的过程中,我们注意到,在数据库外部,有两大解决方案体系逐渐形成。

一者,是在数据库上部,通过数据库中间件解决分布式问题,二者,在数据库底层,通过共享存储集群件,提供数据库共享存储集群能力。

分布式中间件领域,Sharding-Sphere 和 MyCat 都是不同时期典型的代表。例如 MogDB 结合 Sharding-Sphere也能打造数千万 tpmC的分布式架构。以下这个架构被称为 MogDB Clowder。

0e47d4d56d1fc24c5243c545f5163eb3.png

可是中国数据库行业呈现出的另外一个趋势是:将“Sharding-Sphere"写到数据库里。历史再次重演了,当分库分表、路由、中间件等能力,被数据库一体化集成进去,这些产品将在企业级应用消失了,开源领域还会在,但是商业价值的探索将更加困难。

我们再来看看多主数据库的核心 - 共享存储集群件。在这个领域,中国此前没有探索者。一个是因为技术难度较大,一个是因为数据库领域没有需求。中国数据库厂商将注意力聚焦在分布式架构上。

然而峰回路转,涛声依旧。在“金融业数据库技术大会”上成立的“金融多主数据库应用行动计划”证明,金融客户对多主集群仍然存在强烈的需求。

那么答案在哪里呢?

华为公司近期开源了一个产品:Cantian引擎。取义要扎根深远,长成参天大树之意。

参天起到的作用就是将过去中国数据库领域缺少的一环补齐,通过系统级的集群能力,可以帮助以单机性能见长的数据库,形成共享集群解决方案,同时将可靠性和性能久经验证的企业级存储产品 OceanStor Dorado 引入作为共享存储。

可以一举解决金融行业数据库国产化替代难的症结。当前,云和恩墨 MogDB 和 openGauss 都在加速适配参天存储引擎,这次过程数据库厂商参与建立的同盟,就是在这一方向上共识的体现。

830cf4e48fd301ca0199663cda3a92a9.png

参天引擎包含五大核心组件,分别是 CMS,负责集群管理服务,维护集群一致性;DRC,分布式资源目录,管理资源在集群中的分布;DCS,分布式缓存服务;DLS,分布式锁服务;MES,集群间通信服务。

3c9452cfd7d57fb8fff55a0db2f5be23.png

通过有限的资料,可以看到,参天读写的Cache Fusion行为和Oracle基本保持一致。在下图展示的流程中(数据页位于内存中),如果在双实例中,实际上产生了一次 GC CR Block 2-way 的Cache Fusion读请求。

2df501d6251c73dcbb6b837acf156f62.png

被数据库吞噬的,还可以再独立出来。今天参天的尝试,通过开源,将成果行业共享,这样能够实现社会价值最大化,更能够助力中国数据库集体向前跃迁一大步。

参天引擎已经在 openEuler 社区开源,从个人角度,我期待看到更多的中国数据库和参天适配,重新探索“共享存储集群”在中国数据库产业中应有的地位,更好的支撑企业级用户对数据库的多样化架构需求

云和恩墨已经投身其中,也期待对此有兴趣的客户,和我们一起探讨 MogDB 和 openGauss 的共享存储集群解决方案


云和恩墨大讲堂 | 一个分享交流的地方 | MogDB

长按,识别二维码,加入万人交流社群

请备注:云和恩墨大讲堂

  点个“在看” 

你的喜欢会被看到❤

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1145742.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端 :用HTML和css制作一个小米官网的静态页面

1.HTML&#xff1a; <body><div id "content"><div id "box"><div id "top"><div id "top-left"><span id "logo">MI</span><span id "text-logo">小米账…

Java之数据类型与变量

目录 1. 字面常量 2. 数据类型 3. 变量 3.1 变量概念 3.2 语法格式 3.3 整型变量 3.3.1 整型变量 3.3.2 长整型变量 3.3.3 短整型变量 3.3.4 字节型变量 3.4 浮点型变量 3.4.1 双精度浮点型 3.4.2 单精度浮点型 3.5 字符型变量 3.6 布尔型变量 3.7 类型转换 3.7…

Kafka集群修改单个Topic数据保存周期

在大数据部门经常使用Kafka集群&#xff0c;有的时候大数据部门可能在Kafka中的Topic数据保存时间不需要很长&#xff0c;一旦被消费后就不需要一直保留。默认Topic存储时间为7day&#xff0c;个别的Topic或者某台Kafka集群需要修改Topic数据保存的一个周期&#xff0c;调整为3…

攻克组合优化问题!美国DARPA选中全栈量子经典计算公司Rigetti

&#xff08;图片来源&#xff1a;网络&#xff09; 近日&#xff0c;美国量子计算公司Rigetti宣布&#xff0c;它被美国国防高级研究计划局 (DARPA) 选中&#xff0c;加入想象未来量子实际应用 (IMPAQT) 计划&#xff0c;推进先进量子算法的研发&#xff0c;去解决组合优化问…

课题学习(九)----阅读《导向钻井工具姿态动态测量的自适应滤波方法》论文笔记

一、 引言 引言直接从原论文复制&#xff0c;大概看一下论文的关键点&#xff1a; 垂直导向钻井工具在近钻头振动和工具旋转的钻井工作状态下&#xff0c;工具姿态参数的动态测量精度不高。为此&#xff0c;通过理论分析和数值仿真&#xff0c;提出了转速补偿的算法以消除工具旋…

前端 : 用html ,css,js写一个你画我猜的游戏

1.HTML&#xff1a; <body><div id "content"><div id "box1">计时器</div><div id"box"><div id "top"><div id "box-top-left">第几题:</div><div id "box…

ROS自学笔记十八:ModuleNotFoundError: No module named ‘serial‘

出现上述错误&#xff0c;则需要安装serial功能包 第一步&#xff1a;输入 sudo apt install python3-pip 第二步&#xff1a;输入 pip install pyserial

C++打怪升级(九)- STL之string

~~~~ 前言1. STL简单介绍1.1 什么是STL?1.2 STL的版本最初的版本P.J版本RW版本SGI版本 1.3 STL的六大组件1.4 STL的一些缺点1.5 STL重要吗&#xff1f; 2 编码2.1 ASCII编码2.2 Unicode编码UTF-8编码 2.3 GBK编码 3. 类模板basic_string4. 单字符string类4.1 什么是string4.2 …

LV.12 D12 GPIO实验 学习笔记

一、GPIO简介 GPIO&#xff08;General-purpose input/output&#xff09;即通用型输入输出&#xff0c;GPIO可以控制连接在其之上的引脚实现信号的输入和输出 芯片的引脚与外部设备相连&#xff0c;从而实现与外部硬件设备的通讯、控制及信号采集等功能 实验步骤 1. 通过…

C/C++晶晶赴约会 2020年12月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C晶晶赴约会 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C晶晶赴约会 2020年12月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 晶晶的朋友贝贝约晶晶下周一起去看展览&#xff0…

x210项目重新回顾之十七升级到linux4.19.114 +buildroot2018再讨论

代码参考https://github.com/colourfate/x210_bsp/ 他的是linux_4.10(dtb为 s5pv210-x210..dtb)我打算用linux4.19.114(dtb为 s5pv210-smdkv210.dtb) &#xff0c;所以修改build.sh ------------------------------------------------------------------------------ 5 M…

Flutter笔记:完全基于Flutter绘图技术绘制一个精美的Dash图标(下)

Flutter笔记 完全基于Flutter绘图技术绘制一个精美的Dart吉祥物Dash 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/arti…

NewStarCTF2023week4-溯源

题目描述是冰蝎进行WebShell连接的流量包&#xff0c;我们需要找到攻击者获取到的服务器用户名和服务器内网IP地址。 先介绍一下常见webshell工具的流量特征&#xff1a; 1、中国菜刀 请求体中存在eval、base64等特征字符&#xff1b; 连接过程中使用base64编码对发送的指令…

QT5.15在Ubuntu22.04上编译流程

在我们日常遇到的很多第三方软件中&#xff0c;有部分软件针对开发人员&#xff0c;并不提供预编译成果物&#xff0c;而是需要开发人员自行编译&#xff0c;此类问题有时候不是问题&#xff08;编译步骤的doc详细且清晰时&#xff09;&#xff0c;但有时候又很棘手&#xff08…

项目管理之如何分解项目工作

在项目管理中&#xff0c;产品分解结构&#xff08;PBS&#xff09;是一种重要的工具&#xff0c;可以帮助团队更好地理解和组织项目中的产品。通过产品分解结构&#xff0c;团队可以将产品的需求、功能、规格等分解成不同的层次和组成部分&#xff0c;以便更好地进行任务分配、…

Android系统的特性

目录 Android系统的特性 1. 显示布局 2. 数据存储 3. 网络 4. 信息 5. 浏览器 6. 编程语言支持 7. 媒体支持 8. 流媒体支持 9. 硬件支持 10. 多点触控 11.蓝牙 12. 多任务处理 13. 语音功能 14.无线共享功能 15. 截图功能 16. 跨平台 17. 应用程序的安全机制…

RabbitMQ学习03

文章目录 工作队列1. 轮询分发消息2. 消息应答1.概念2.自动应答3.消息应答的方法4.Multiple 的解释5.消息自动重新入队6. 手动应答代码 3. RabbitMQ持久化1. 概念2. 队列如何实现持久化3. 消息实现持久化4. 不公平分发5. 预取值 工作队列 工作队列(又称任务队列)的主要思想是避…

No authorization token was found

今天遇到了一个问题&#xff0c;我把前后端逻辑都理了一遍&#xff0c;开始怀疑后端&#xff0c;后端肯定没错了&#xff0c;把前端理了一遍&#xff0c;ok前后端没错&#xff0c;我错。登录哪里需要的token&#xff1f;&#xff1f;&#xff1f;&#xff1f;把我搞懵逼了。 测…

苹果cms模板MXone V10.7魔改版源码 全开源

苹果cms模板MXone V10.7魔改版源码 全开源 苹果cms模板MXone魔改版短视大气海报样式 安装模板教程说明&#xff1a; 1、将模板压缩包上传到苹果CMS程序/template下解压 2、网站模板选择mxone 模板目录填写html 3、网站模板选择好之后一定要先访问前台&#xff0c;然后再进…

【数据结构与算法】二叉树基础OJ -- 上 (巩固提高)

前言&#xff1a; &#x1f4a5;&#x1f388;个人主页:​​​​​​Dream_Chaser&#xff5e; &#x1f388;&#x1f4a5; ✨✨刷题专栏:http://t.csdn.cn/UlvTc ⛳⛳本篇内容:力扣上二叉树OJ基础练习 ​​​​​​​ 目录 leetcode 965.单值二叉树 题目描述: 解题思路: …