闲聊Oracle Exadata与Hadoop
博客yangdigital 发表于:12年12月10日 00:47 [转载] DOIT.com.cn
二、Oracle Exadata架构
介绍完Hadoop 后,我们再来看一下Oracle Exadata的架构:

如图中所示,Oracle Exadata是由计算节点和存储节点构成,图上层为计算节点,下层为存储节点,计算节点和存储节点均为X86服务器,存储节点是X86服务器直联存储(DAS)的设计,计算节点可以作Oracle RAC(HA,负载均衡,并行计算),计算节点间互联以及计算节点和存储节点间的互联都是采用Infiniband(高带宽,低延迟),而不是传统的以太网。整个系统中网络部分都有冗余,设计为无单点故障。
计算节点本身不存放数据,它通过ASM模块访问存放于存储节点的数据,Oracle 的ASM是Oracle公司自己的自动存储管理软件,特别需要注意的是:ASM是Oracle Exadata架构非常核心的部分,本文主要讨论的就是Exadata中的ASM以及Smart Scan(Offloading)技术,其它如Smart flashcache,Storageindex,HCC等特性,本文不作讨论。
由于Oracle的文档中对于Exadata中ASM技术细节的描述不多,因此本文中有些观点是我本人的猜测,如有谬误,敬请谅解。
以下有关ASM的资料很多来自于《Oracle+Database+11g+RAC手册(第2版)》一书
ASM与Oracle 数据库紧密集成在一起,并对其进行优化。它是通过3 个关键组件实现的:ASM 实例、ASM 动态卷管理器(ADVM)和ASM 集群文件系统(ACFS)。ASM 动态卷管理器为ASM 集群文件系统提供了卷管理器功能。
ASM可以拥有63 个磁盘组,其中放置10 000 个ASM 磁盘,每个ASM 磁盘可以存储高达2TB数据。一个磁盘组可处理100 万个ASM 文件。在Oracle Database 11g 中,一个数据文件所支持的最大文件大小为128TB,而ASM 在采用外部冗余时支持高达140PB 数据。可见ASM所能管理的存储空间也在100PB的量级。
以下是Oracle在使用ASM前后的架构对比:

Exadata使用ASM管理所有智能存储节点上的硬盘,它首先把所有存储节点的磁盘放到一个资源池里,并形成ACFS集群文件系统,然后应用 Stripe And Mirror Everything技术把需要存储的所有数据文件分割成固定大小的块,均匀的分布到各存储节点的硬盘上,并可以对数据块设定副本的数量,常规是双重副本,高级是3重副本。副本通常也会被放置于其他存储节点的硬盘上。因此当计算节点需要访问某个数据文件时,也是需要到多个存储节点上并行读取。从这点上看起来,ASM在文件分割和副本方面的策略是否与HDFS的思路很象?不同的是Oracle ASM一般设数据块大小为128K或1M,而HDFS一般设为64M。
在Exadata存储容量不够时,也可以在线添加存储节点,ASM在存储配置和再配置期间,不需要任何停机时间,也就是说,在改变存储配置时不需要使数据库脱机。在磁盘组中添加或删除磁盘之后,ASM 会自动在磁盘组的所有磁盘之间均匀地再分布文件数据。这个操作称为“磁盘再均衡”,它对数据库是透明的。但Oracle Exadata对存储节点的添加是有要求的,它每次扩容最少需要扩1/4机架,也就是4个存储节点。目前Exadata最大容量只支持最大8个机架,但我相信是由于交换机硬件架构的限制,而不是ASM本身的限制。
讨论到现在再回头看看,Hadoop Hbase是构架于HDFS上的Nosql数据库,Exadata则是构建于ASM上的oracle数据库,此外Exadata使用的ASM和HDFS是有很多相似的地方。前面我总结的HDFS的4个主要特点中,可扩展性,多磁盘并发工作,高可用这三个特性,在Exadata中都有类似的实现方式。
由于ASM的资料较少,我不是很清楚Exadata中ASM的元数据的管理方式,因为从Exadata的架构上看,没有类似于HDFS的 Namenode的角色,因此ACFS肯定不是采用集中式元数据服务模型。我也曾请教过别人,有人说是采用类似GlusterFS的弹性Hash技术,另外有人说是采用分布式元数据服务模型,但我从Oracle的文档上看到,元数据是存放在每个智能存储节点上的,因此我更倾向于后者。这个需要熟悉 Oracle的高手解惑!
最后再来看一下Exadata的另一个主要特性Smart Scan(Offloading)
下图是Smart Scan(Offloading)的工作示意图:

1、客户端向数据库计算节点发出了一个 SELECT 语句,带有谓词,要求过滤并仅返回所需行。
2、计算节点数据库内核确定存储节点可用,并构造一个代表发出的 SQL 命令的iDB 命令,并将其发送到各存储节点。
3、存储节点的 CELLSRV 组件扫描数据块以识别哪些行和列满足发出的SQL。
4、存储节点只将满足谓词的行和请求的列返回给计算节点。
5、计算节点数据库内核整合各个 Exadata 单元的结果集。
6、最后,将查找到的行返回给客户端。
简单的说,Exadata的Smart Scan工作模式就是:当计算节点接到客户端任务时,它就把任务下发给各个存储节点,各存储节点计算完后再把结果返还给计算节点,最后由计算节点整合成完整结果集,再返回给客户。
思考一下Exadata的这个特性是否和MapReduce中的Jobtracker,Tasktracker的工作模式很象?都是Master接到客户端任务后,把任务分解成多个小任务,然后由多台Slave并行计算,最终把汇总结果返还给客户端。由此是否可以说Exadata的Smart Scan(Offloading)技术也符合前文总结的MapReduce的两个重要特性:1、多节点并行计算,2、大量需要计算的数据在本地,只有计算产生的中间结果或结果才在网络里传输,大大减少了网络流量。
前文介绍过,HBase和Hive都是通过很多节点并行作MapReduce计算,来提高整体系统的吞吐量从而海量数据的查询和分析能力,其实 Exadata也采用类似的架构,区别就是存储节点上不是跑MapReduce,而是跑SQL而已。但不可否认的是Hadoop支持成千上万个节点的集群,而目前Exadata只支持8个机柜,因此从扩展性方面,还是无法和Hadoop集群比。
综上所述,其实Exadata借鉴了分布式计算的很多优点,它把RDBMS构建于分布式集群存储之上,从而使得RDBMS具备了更好的扩展性,此外它还吸取了众多类似于Flash,Infiniband,列式数据库等新技术的特点,并将这些技术完美的融合在一起。不可否认,Oracle的Exadata是关系型数据库领域里伟大的革新性产品。
关于Oracle 数据库,Exadata,RAC,ASM,ACFS等技术,有非常多的内容,而我也是在开始学习的过程中,本文只是我在学习过程中的一些总结和感想,我觉得计算机技术中很多都是相通的,当一个领域里有好的技术发布之后,其他领域的技术人员会迅速学习并借鉴这些技术,从而推动自己领域的技术发展,这也是信息技术在这些年里飞速发展的原因!
