闲聊Oracle一体机Exadata
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
闲聊Oracle一体机Exadata
闲聊与
关键字:分布式存储甲骨文在文章开始前先作个声明,本人并非专业技术人员,充其量只能算从业人员和技术爱好者。
本文也不是写给专业技术人员看的技术类文档,只是本人因为工作需要,在学习系统架构的过程中,自己的一些感触和体会,只是想分享给对和其他计算机技术感兴趣的人们,希望大家能一起探讨。
因此本文在谈到技术细节问题时,一定漏洞百出,敬请专业人士指正。
是公司研发的一款数据库一体机,关于的介绍文档,在网上能找到很多,它有很多特性,,,,等等,在本文中不对这些特性作详细说明。
本文探讨的只是在设计这款一体机时,借鉴了的开源实现等分布式计算集群的一些设计理念,使数据库的运行环境突破了传统基于共享存储的架构,创新的使用了基于的智能存储节点的架构,从而极大地提高了数据库在海量数据分析类应用的性能。
一、项目简单介绍:
由于本文探讨的是和的相似处,因此先简单介绍下。
是开源软件基金会的一个项目的总称,它包含了,,,,等组件,它是基于和的论文发展起来的开源软件项目,而和是它的核心。
是一个开源的分布式文件系统,和单机文件系统一样,它也使用目录树结构,和单机文件系统不同的是,它的文件系统是跨越整个集群的,下图是它的架构
集群是主从架构,它由一台节点和多台节点构成。
节点和节点都是标准的。
节点采用存储的方式,即内置多块大容量硬盘,节点可以多达上千台。
通常用于存储大文件,在中每个文件都被切割为固定大小的数据块,然后被分散存放于多台的硬盘上。
并且每个数据块都会有副本存放于远端机架的上,副本数一般设置为三个。
节点不存放实际的文件,而只存放整个文件系统的目录树等元数据。
当客户端需要访问存储于的某个文件时,首先需要访问节点,以取得文件存放的位置信息哪几
台,以及在硬盘上的具体地址,然后根据这些目的地址对各上存放的数据并行地进行访问。
的这种分布式存储架构,主要有几个好处:、当存储空间不够时,只要简单增加节点,而系统自动会把数据块分配到新节点上,而无需人工干预。
从而使得集群存储的扩展性非常好。
、当客户访问某一文件时,由于该文件存放于
多台设备上,因此是由多台并行处理的,这样大大增加了整个系统的吞吐量。
、的数据都有多个副本,系统在后台自动检测数据的一致性,并能在发生错误时,自动恢复数据,因此系统有很好的可用性。
、由于中硬盘是顺序读写的,因此读写硬盘的性能很好。
但是需要注意的是:节点为了加快对客户端的响应速度,是把文件目录树等元数据缓存于主内存中的,因此整个文件系统的容量受限于节点的内存大小,所以说理论上集群的扩展性也并非无限的,但相对于传统存储系统,的容量已经很大了,据说目前已经有容量超过的集群。
谈完,再介绍下的另一核心计算框架以下斜体字内容引用自博客的小屋,链接如下:
是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上级别的数据集。
一个作业通常会把输入的数据集切分为若干独立的数据块,由任务以完全并行的方式处理它们。
框架会对的输出先进行排序,然后把结果输入给任务。
通常作业的输入和输出都会被存储在文件系统中。
整个框架负责任务的调度和监控,以及重新执行已经失败的任务。
通常,框架和分布式文件系统是运行在一组相同的节点上的,也就是说,计算节点和存储节点通常在一起。
这种配置允许框架在那些已经存好数据的节点上高效地调度任务,这可以使整个集群的网络带宽被非常高效地利用。
框架由一个单独的和每个集群节点一个共同组成。
负责调度构成一个作业的所有任务,这些任务分布在不同的上,监控它们的执行,
重新执行已经失败的任务。
而仅负责执行由指派的任务。
这张是的任务调度图:
这张是的工作机制图
简单的理解,就是节点把客户端提交的任务,分割成
很多个小任务,然后交给各节点并行执行,计算,最终提交给客户一个完整的结果。
我认为有几个非常重要的的特点:多节点并行计算,大量需要计算的数据在本地,只有计算产生的中间结果或结果才在网络里传输,大大减少了网络流量。
最后再简单介绍下和。
是构架于之上的面向列的实时分布式数据库非关系型,的设计目的之一是支持高并发用户数的高速读写访问。
这是通过两方面来实现的。
首先数据行被水平切分并分布到多台服务器上,在大量用户访问时,访问请求也被分散到了不同的服务器上,虽然每个服务器的服务能力有限,但是数千台服务器汇总后可以提供极高性能的访问能力。
其次,设计了高效的缓存机制,有效提高了访问的命中率,提高了访问性能。
是一种建立在之上的数据仓库架构。
它提供了:
一套方便的实施数据抽取的工具。
一种让用户对数据描述其结构的机制。
支持用户对存储在中的海量数据进行查询和分析的能力。
的基本特点是它采用进行数据存储并利用框架进行数据操作。
所以从本质上来说,就是个编译器,它把用户的操作查询或者变换成任务,利用框架执行这些任务以对上的海量数据进行处理。
定义了一种简单的类查询语言,让熟悉的用户可以非常容易的进行查询。
与此同时,也允许熟悉框架的程序员在查询中插入自定义的和脚本以扩展内嵌的功能,完成更复杂的分析。
二、架构
介绍完后,我们再来看一下的架构:
如图中所示,是由计算节点和存储节点构成,图上层为计算节点
下层为存储节点计算节点和存储节点均为服务器,存储节点是服务器直联存储的设计,计算节点可以作,负载均衡,并行计算,计算节点间互联以及计算节点和存储节点间的互联都是采用高带宽,低延迟,而不是传统的以太网。
整个系统中网络部分都有冗余,设计为无单点故障。
计算节点本身不存放数据它通过模块访问存放于存储节点的数据,的是公司自己的自动存储管理软件,特别需要注意的是是架构非常核心的部分,本文主要讨论的就是中的以及技术,其它如,,等特性,本文不作讨论。
由于的文档中对于中技术细节的描述不多,因此本文中有些观点是我本人的猜测,如有谬误,敬请谅解。
以下有关的资料很多来自于《手册第版》一书
与数据库紧密集成在一起,并对其进行优化。
它是通过个关键组件实现的:实例、动态卷管理器和集群文件系统。
动态卷管理器为集群文件系统提供了卷管理器功能。
可以拥有个磁盘组,其中放置个磁盘,每个磁盘可以存储高达数据。
一个磁盘组可处理万个文件。
在中,一个数据文件所支持的最大文件大小为,而在采用外部冗余时支持高达数据。
可见所能管理的存储空间也在的量级。
以下是在使用前后的架构对比:
使用管理所有智能存储节点上的硬盘,它首先把所有存储节点的磁盘放到一个资源池里并形成集群文件系统然后应用技术把需要存储的所有数据文件分割成固定大小的块,均匀的分布到各存储节点的硬盘上,并可以对数据块设定副本的数量,常规是双重副本,高级是重副本。
副本通常也会被放置于其他存储节点的硬盘上。
因此当计算节点需要访问某个数据文件时,也是需要到多个存储节点上并行读取。
从这点上看起来,在文件分割和副本方面的策略是否与的思路很象?不同的是一般设数据块大小为或,而一般设为。
在存储容量不够时,也可以在线添加存储节点,在存储配置和再配置期间,不需要任何停机时间,也就是说,在改变存储配置时不需
要使数据库脱机。
在磁盘组中添加或删除磁盘之后,会自动在磁盘组的所有磁盘之间均匀地再分布文件数据。
这个操作称为磁盘再均衡,它对数据库是透明的。
但对存储节点的添加是有要求的它每次扩容最少需要扩机架也就是个存储节点。
目前最大容量只支持最大个机架,但我相信是由于交换机硬件架构的限制,而不是本身的限制。
讨论到现在再回头看看,是构架于上的数据库,则是构建于上的数据库,此外使用的和是有很多相似的地方。
前面我总结的的个主要特点中,可扩展性,多磁盘并发工作,高可用这三个特性,在中都有类似的实现方式。
由于的资料较少,我不是很清楚中的元数据的管理方式,因为从的架构上看,没有类似于的的角色,因此肯定不是采用集中式元数据服务模型。
我也曾请教过别人,有人说是采用类似的弹性技术,另外有人说是采用分布式元数据服务模型,但我从的文档上看到,元数据是存放在每个智能存储节点上的,因此我更倾向于后者。
这个需要熟悉的高手解惑
最后再来看一下的另一个主要特性
下图是的工作示意图:
、客户端向数据库计算节点发出了一个语句,带有谓词,要求过滤并仅返回所需行。
、计算节点数据库内核确定存储节点可用,并构造一个代表发出的命令的命令,并将其发送到各存储节点。
、存储节点的组件扫描数据块以识别哪些行和列满足发出的。
、存储节点只将满足谓词的行和请求的列返回给计算节点。
、计算节点数据库内核整合各个单元的结果集。
、最后,将查找到的行返回给客户端。
简单的说,的工作模式就是:当计算节点接到客户端任务时,它就把任务下发给各个存储节点,各存储节点计算完后再把结果返还给计算节点,最后由计算节点整合成完整结果集,再返回给客户。
思考一下的这个特性是否和中的,的工作模式很象?都是接到客户端任务后,把任务分解成多个小任务,然后由多台并行计算,最
终把汇总结果返还给客户端。
由此是否可以说的技术也符合前文总结的的两个重要特性:、多节点并行计算,、大量需要计算的数据在本地,只有计算产生的中间结果或结果才在网络里传输,大大减少了网络流量。
前文介绍过,和都是通过很多节点并行作计算,来提高整体系统的吞吐量从而海量数据的查询和分析能力,其实也采用类似的架构,区别就是存储节点上不是跑,而是跑而已。
但不可否认的是支持成千上万个节点的集群,而目前只支持个机柜,因此从扩展性方面,还是无法和集群比。
综上所述,其实借鉴了分布式计算的很多优点,它把构建于分布式集群存储之上,从而使得具备了更好的扩展性,此外它还吸取了众多类似于,
,列式数据库等新技术的特点,并将这些技术完美的融合在一起。
不可否认,的是关系型数据库领域里伟大的革新性产品。
关于数据库,,,,等技术,有非常多的内容,而我也是在开始学习的过程中,本文只是我在学习过程中的一些总结和感想,我觉得计算机技术中很多都是相通的,当一个领域里有好的技术发布之后,其他领域的技术人员会迅速学习并借鉴这些技术,从而推动自己领域的技术发展,这也是信息技术在这些年里飞速发展的原因。