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

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

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.rhkb.cn/news/172786.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux-vsftp虚拟多用户

目录 1.安装vsftp 2.安装DB工具,能转化普通文件为vsftpd识别数据库加密文件 3.创建登录虚拟用户的名单 4.加密文件 6.需要修改vsftpd的配置文件 7.修改vsftp的配置文件,加载支持虚拟用户模式 8.针对不同用户开启不同权限 9.重启服务 10.测试 安…

【C++】STL容器——探究List与Vector在使用sort函数排序的区别(14)

前言 大家好吖,欢迎来到 YY 滴C系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! 目录 一、Sort函数介绍1.Sort函数接口2.Sort…

buuctf_练[CISCN2019 华东南赛区]Web4

[CISCN2019 华东南赛区]Web4 文章目录 [CISCN2019 华东南赛区]Web4掌握知识解题思路代码分析正式解题 关键paylaod 掌握知识 ​ 根据url地址传参结构来判断php后端还是python后端;uuid.getnode()函数的了解,可以返回主机MAC地址十六进制;pyt…

替换所有的问号

这篇也是凑数的 哈哈.... 稍后会整合到算法通关第三关白银挑战 . 描述 : 给你一个仅包含小写英文字母和 ? 字符的字符串 s,请你将所有的 ? 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。 注意 : 不能 修改非 ? 字符 . 题目 : …

【Linux】第五站:Linux权限

文章目录 一、shell命令以及运行原理二、Linux下用户的分类1.root用户和普通用户的切换2.对一条指令的提权 三、什么叫做权限1.权限2.文件的属性3.文件类型4.权限属性 四、更改权限1. chmod 更改文件的属性2. chown 更改拥有者3. chgrp更改所属组4.chown一次性更改拥有者和所属…

我的创作纪念日 - 2048

机缘 昨天刚刚收到 C 站的 1024 勋章: 今天爬山途中就又收到了 CSDN 的创作 2048 天纪念推送: 虽然 1024、2048 这些数字对普通人来说可能没有意义,但对于程序员来说却有不一样的情结。感谢 C 站这波细心的操作,替程序员的我们记…

接口返回响应,统一封装(ResponseBodyAdvice + Result)(SpringBoot)

需求 接口的返回响应&#xff0c;封装成统一的数据格式&#xff0c;再返回给前端。 依赖 对于SpringBoot项目&#xff0c;接口层基于 SpringWeb&#xff0c;也就是 SpringMVC。 <dependency><groupId>org.springframework.boot</groupId><artifactId&g…

Camtasia mac版怎么加字幕 Camtasia mac版怎么打马赛克

在视频制作过程中&#xff0c;字幕和马赛克是两项非常常用的编辑功能&#xff0c;添加字幕可以提高观众的观看体验&#xff0c;添加马赛克可以保护视频创作者不想公开的画面内容。Camtasia作为一款知名的视频制作软件&#xff0c;在具备基本的录制和视频编辑功能的同时&#xf…

Oracle (7)Online Redo Log Files

目录 一、Oracle Online Redo Log Files及其相关内容介绍 1、Online Redo Log Files简介 2、Online Redo Log Files特点 3、Online Redo Log Files文件组 4、多路复用文件 5、联机重做日志文件工作方式 6、LGWR什么时候写重做 7、LS和LSN 8、删除Redo文件成员 9、删除…

Linux对网络通信的实现

一、NIO为什么很少注册OP_WRITE事件 1、OP_WRITE触发条件&#xff1a;当操作系统写缓冲区有空闲时就绪。一般情况下写缓冲区都有空闲空间&#xff0c;小块数据直接写入即可&#xff0c;没必要注册该操作类型&#xff0c;否则该条件不断就绪浪费cpu&#xff1b;但如果是写密集型…

虚拟技术和容器技术的对比

1.概念 容器技术是一种内核轻量级的操作系统层虚拟化技术&#xff0c;能隔离进程和资源。 虚拟机&#xff08;VM&#xff09;技术是一种创建于物理硬件系统&#xff0c;充当虚拟计算机系统的虚拟环境&#xff0c;该虚拟机可以独 立运行在一个完全隔离的环境中&#xff0c;向本…

华为NAT配置实例(含dhcp、ospf配置)

一、网络拓朴如下&#xff1a; 二、要求&#xff1a;PC1 能访问到Server1 三、思路&#xff1a; R2配置DHCP&#xff0c;R2和R1配OSPF&#xff0c;R1出NAT 四、主要配置&#xff1a; R2的DHCP和OSPF&#xff1a; ip pool 1gateway-list 10.1.1.1 network 10.1.1.0 mask 25…

Android数据对象序列化原理与应用

序列化与反序列化 序列化是将对象转换为可以存储或传输的格式的过程。在计算机科学中&#xff0c;对象通常是指内存中的数据结构&#xff0c;如数组、列表、字典等。通过序列化&#xff0c;可以将这些对象转换为字节流或文本格式&#xff0c;以便在不同的系统之间进行传输或存…

设计模式【Iterator 模式】

Iterator 模式 1.什么是 Iterator 模式 Iterator 模式就是按照顺序遍历数据集合。 2.示例程序 1.Aggregate 接口 Aggregate 接口是要遍历的集合的接口&#xff0c;声明方法 iterator &#xff0c;实现了该接口的类可以通过 iterator 方法遍历数据集合的元素。 public int…

pycharm运行R语言脚本(win10环境下安装)

文章目录 简介1. pycharm安装插件2. 安装R语言解释器2.1下载安装包2.2具体安装过程 3.编辑环境变量4 检验是否安装成功&#xff1a;5.安装需要的library6.pycharm中配置安装好的R语言解释器 简介 pycharm 安装 R language for Intellij R language for Intellij 是一个插件&am…

Java集合类--List集合,Set集合,Map集合

集合可以看作一个容器&#xff0c;Java中提供了不同的集合类&#xff0c;这些类具有不同的存储对象的方式&#xff0c;同时提供了相应的方法&#xff0c;以便用户对集合进行遍历、添加、删除、查找指定的对象。 1.集合类概述&#xff1a; 集合类类似于数组&#xff0c;与数组不…

策略路由和路由策略

目录 策略路由 路由策略 策略路由和路由策略 策略路由 Step1:配置ACL&#xff0c;匹配流量 acl number 2010 rule 10 permit source 192.168.10.0 0.0.0.255 acl number 2020 rule 10 permit source 192.168.20.0 0.0.0.255 Step2:流分类traffic classifier jiaoxue //匹配…

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

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

如何查看多开的逍遥模拟器的adb连接端口号

逍遥模拟器默认端口号为&#xff1a;21503。 不过&#xff0c;使用多开器多开的时候&#xff0c;端口就不一定是21503了。 如何查看&#xff1f; 进入G:\xiaoyao\Microvirt\MEmu\MemuHyperv VMs路径中 每多开一个模拟器&#xff0c;就会多出一个文件夹。 进入你要查找端口号…

简述JVM

文章目录 JVM简介JVM运行时数据区堆(线程共享)方法区/元空间/元数据区(线程共享)栈程序计数器 JVM类加载类加载过程双亲委派模型 垃圾回收机制(GC)判断对象是否为垃圾判断是否被引用指向 如何清理垃圾, 释放对象? JVM简介 JVM 是 Java Virtual Machine 的简称, 意为Java虚拟机…