《节能环保物联网及智慧云服务平台应用示范工程项目金建议书.docx》由会员分享,可在线阅读,更多相关《节能环保物联网及智慧云服务平台应用示范工程项目金建议书.docx(25页珍藏版)》请在课桌文档上搜索。
1、节能环保物联网及智慧云服务平台应用示范工程项目金建议书编制:审核:审批:XXX有限公司XXX分公司二零XX年XX月总体构想根据调研,目前南京市环保局已经拥有包括“阳光政务系统”、“12369投诉系统”、“排污申报收费系统”、“污染应急指挥控制系统”、“机动车排气监测系统”、“污染源在线监测系统”、“环境空气质量监测系统”、“危险固体废弃物管理系统”、“核与辐射管理系统”在内的多套业务系统,可进行业务审批、意见收集、任务指派、排污申报与收费等各项业务功能。存在的问题主要是这些系统各自为政,数据无法有效共享与集成,导致同类数据在不同系统中存在冗余和不一致问题,同时这些系统间缺乏统一的数据管理模式,
2、导致数据保存不规范、不完整。采用云计算、物联网和信息网格技术,对在用的业务系统进行分析,确定那些信息需要从原系统中抽取出来进行集成,然后建立一个基于云存储的、可扩展,具有统一规范数据格式的中心数据库,将各业务系统核心数据抽取到中心数据库进行数据集成;利用云计算平台的强大处理能力进行数据的处理和挖掘;最后,在中心数据库上开发建立包括企业信息全寿命管理(即从企业登记开始到企业注销的全程信息管理)、数据精确分析、处置决策、趋势分析等在内的应用,并为其它系统预留数据调用接口,最终形成一个涵盖在用系统数据,支持全局信息管理分析与应用的智慧节能环保全套解决方案的物联网云计算平台及应用系统。该系统的建立将具
3、有很强的应用示范性和前瞻性。通过“节能环保物联网及智慧云服务平台应用示范工程”项目的实施,提炼物联网及云计算平台的应用标准,在江苏省乃至全国具有广泛的示范和推广意义。以下为“节能环保物联网及智慧云服务平台应用示范工程”项目的总体技术架构框图。信品处理at合平台L眼若层,业务应用窿推【智能处理层tm栩 I: I m压鲂效岖资源集成子系统云敷据处理子系统云计算平台子系统数据集成层I Bg明按制1l空调圉W l电梯IsW 1I节槌制H其它*ff美控制I舞构终露虚掀平台G.一;备 S! I Wwaa 11 Iwe 11 DK I; 终趋集成子系统 )区I 空FfeB号 Il *1输*l Il 阀骞 I
4、l I异构终端虚拟平台:异构终端虚拟平台由感知层设备和控制层设备构成。通过物联网传感器、射频、红外、智能仪表等设备采集环境数据,通过泛在承载网络输入至信息融合处理平台。物联网控制层是由节能环保服务平台系统根据智能处理层的处理结果下发终端设备的继电器控制开关控制指令,实现照明、空调、电梯、用水等的节能减排控制。数据资源集成平台:从南京市环保局现有的环境监测系统对数据进行封装、抽取、同步、筛选、索引、压缩等集成处理后,输入信息智能处理融合平台,为业务应用系统的智能数据处理提供完整的数据支撑。泛在网络承载平台:利用江苏有线的泛在承载网络技术和基础设施,为物联网的终端平台或数据资源集成平台与云计算智能
5、处理平台之间提供总线式高效网络信息传输。数据处理融合平台:数据处理融合平台由云存储、云处理、云数据管理子平台构成。对环境监测或建筑群等应用数据提供统计、智能分析、挖掘、融合、备份、可视化等处理服务,作为节能环保物联网进行智能计算的中枢大脑。节能环保服务平台:节能环保服务平台作为总体架构的最上层,为用户提供建筑群节能智慧监控服务、水环境智慧监控服务、土壤环境智慧监控服务、固体废物智慧监控服务、噪声环境智慧监控服务、核与辐射智慧监控服务、大气环境智慧监控服务、水资源循环利用智慧监控服务等。用户:“节能环保物联网及智慧云服务平台”可广泛应用于政府、企业、家庭等各行业各类用户。具有很强的通用性和示范性
6、,可以在全省乃至全国范围内推广应用。1.I云存储平台技术及系统方案随着互联网、物联网技术和应用的高速发展,信息应用系统的数据规模也在急剧扩大,当今计量存储容量单位通常已是使用EByteS(IEB二二1024PB)来计量,文件数量更是以亿为单位,传统的数据中心的高成本、数据分散存储模式已经不能满足海量数据规模的快速扩张要求。对海量数据的高可靠、高性能、低成本的安全存储和处理已成为各行业信息化建设与发展的最基本的必要需求。云创存储拥有的具有自主知识产权的CStor云存储技术产品。经过不断的积累与更新,是一款软件与硬件相结合的高科技系统产品。与国际上知名的云存储技术相比,具有极高性价比、超低功耗、高
7、可靠、通用、安全等优势,可广泛应用于有大量数据存储需求的场合(如安防、广电、电信、互联网、物联网、银行等领域)。1.1.1 CStor系统特性CStOr系统实现了海量数据的云存储解决方案。系统提供了高吞吐量,大容量,高可靠性的7*24小时的不间断存储服务,拥有如下重要先进特性。超低功耗:软硬件一体化设计,单个主板功耗已降至几瓦的数量级,处于国内外先进水平;无限容量:提供海量数据存储,容量无上限,根据存储数据需求,灵活增减存储节点;灵活部署:系统可动态伸缩,根据业务需要增加和减少存储节点,支持用户空间配额管理;高性能:元数据内存访问,带宽饱和利用实现了快速访问和高吞吐量的优越性能;高可靠性:高可
8、靠的冗余备份机制,提供7*24小时不间断无故障存储服务;通用性:系统支持POSlX接口规范,与应用系统无婕集成,无需另行开发。对于应用系统和操作本地文件系统完全一样;高安全:数据集中存储在云计算数据中心,数据安全统一控制,可针对用户进行访问控制,可结合云查杀等防病毒软件确保不同安全级别数据的安全;易维护:提供直观的系统状态监控和配置管理子系统,实时监控系统状态并进行异常告警。1.1.2 cStor系统框架用户挂假客户云空问管理招点云空间管理服务器元Si据管理节A云空间1元Kartr型点】块数据存储节点n8c5 j 式如节占:I 据节点3 鼓楣节点N I云空间3元於Um遽节03孰婚苴53分册节点
9、NW控配费中心块数据存储节点:将文件按照固定大小进行分块,默认是64MB,每一块称为一个ChUnk(数据块),每个ChUnk都有一个对应的索引号(Index),数据块存储在块数据存储节点上,根据可靠性需求的不同,可设置备份块的数目,以实现在不同块数据存储节点上的冗余备份存储。元数据管理节点:元数据管理节点对文件名称、文件属性、数据块信息等元数据进行存储和管理。云空间管理节点:由一个元数据管理节点及多个块数据存储节点构成了一个云存储空间,简称云空间。通过云空间管理节点将多个云空间虚拟为一个无限大的云数据存储空间,该节点提供针对用户端的云空间管理和分配。用户挂载客户端:通过用户挂载客户端实现将云空
10、间映射到本地文件系统的目录,兼容POSIX接口,挂载后就和操作本地的文件系统一样。配置与监控中心:提供针对各存储节点的管理配置与状态监控告警功能。1.1.3 CStor系统关键技术低功耗技术:采用自主研发的低功耗主板,其功率已降至几瓦的数量级,处理国内外业界先进水平。元数据分布式存储技术:考虑热点数据的分布信息,通过将海量的元数据有效地分散存储在多个元数据服务器上来降低存储负载。LRV Bloom filler arrayS*pnet Bloom filter arrayLI: local LRU qnen-L2: local q(n- on an MDS(a) LRU and segment
11、 Blm filter arrays allowing the LI and L2 queries.(b) L3 and L4 queries respectively in a group and entire system.采用分级聚集机制来存储数据,来保证查询结果的有效性和准确性。分析元数据多维属性信息的语义特征,将相关文件组织在相同或相近的组内,多个组构成语义Rtree结构,可实现多维数据的复合查询。相关查询、添加/删除和更新操作可以在有限的小区域内完成,降低操作的执行代价。低成本高可靠性技术:针对数据存储节点主要是数据的读写访问的特性,而没有其它计算,因此设计的低功耗数据存储节点,一
12、个主板最大能够支持16块硬盘;从而实现硬件成本和能耗的大大降低。针对数据块可设定备份因子数目,在不同的数据存储节点上的备份,从而实现数据的高顽存;可针对不同目录,不同级别的数据进行不同的备份因子设置,如对可靠性级别较高的数据可将相应的备份因子设置高一些,从而达到最大的可靠性要求。高速并发访问技术:采用并发写入和读出分布式数据块,确保网络带宽饱和利用,确保读写访问速率。可提供不同用户级别的带宽服务质量保证QoS,以确保高优先级应用的数据读写速率;高速IO技术:目前针对传统的硬盘,在万兆网卡的条件下,单用户的吞吐率理论上达到lGBs,通过针对SSD(SolidStateDiSk)固态硬盘读写IO驱
13、动优化技术,从而实现访问存储空间时达到更高的存储读写吞吐率。与目前的传统硬盘相较,具有低耗电、无噪音、产生热量低、耐震、稳定性高、耐低温等优点,缺点是目前价格稍高。传统典型的硬盘驱动器只能在5到55范围内工作。而大多数固态硬盘可在-1070C工作,一些工业级的固态硬盘还可在-4085C,甚至更大的温度范围下工作。数据安全控制技术:访问控制:支持用户级别的数据访问认证,存储空间级别认证和目录级认证,确保数据的安全访问控制;数据完整性:通过上述高可靠性技术确保数据完整、可靠;加密安全:数据实现块级别加密存储,同时可自由结合安全加密软件、云查杀病毒软件等对数据进行最大的安全保护。1.1.4 cSto
14、r系统设计策略元数据存储设计策略: 为提供高速的客户端响应,元数据存储于元数据管理节点(MaSter)服务器的内存中,并于本机进行持久化备份; 元数据管理节点为主备双机方式,提供高可靠不间断元数据管理服务,单机故障时可实现无缝快速切换; 考虑大容量数据存储时文件数量多,元数据容量大的问题,系统将元数据进行分布式存储,采用多个元数据管理节点进行元数据管理; 支持灵活的空间挂载,可根据业务划分灵活地将不同业务数据挂载到不同的分布式元数据管理节点和数据存储节点;数据节点存储策略: 文件数据在大于一定空间的情况被划分为多个数据块(ChUnk),数据块被分布存储到不同的数据节点服务器(DataNode)
15、。 每个块可被设置为备份一定的份数,块信息被元数据管理节点管理,数据备份时由数据节点进行串行复制到其它数据节点DataNOde进行备份;高可靠性策略: 元数据管理节点MaSter为主从备份的双机高可靠实现方式; 主从备份切换为几乎零延迟的高速切换方式,对数据操作访问可做到无影响; 数据块在多个数据节点上进行冗余备份;客户端访问策略: 挂载客户端通过云空间管理节点获取云空间; 挂载客户端与相应的云空间元数据节点MaSter建立通信连接和元数据操作,获得数据块节点存储信息; 挂载客户端与相应的数据节点DataNode进行数据读写;数据节点DataNode根据合适的备份策略向相应的其它数据节点发送块
16、数据进行备份,参考下图:1.1.5 性能和容量支撑元数据节点内存配置:根据计算和测试,2.56亿文件元数据需要的内存约为80G,1600万条的元数据,MaSter元数据存储需要内存空间约为5G空间,可根据该参考值进行MaSter元数据节点个数的增减配置。系统支撑容量:系统存储节点可灵活伸缩,容量无上限,可根据业务需要增减数据节点或Master元数据节点。100PB=100*1024*1024*1024MB假定每个文件的大小为25M的小文件,则文件数约为40亿,元数据需要的内存约为1280G,若每个MaSter提供内存为32G,则配置40个MaSter元数据节点对应的云空间即可满足100PByt
17、es的存储需求。假定每个文件的大小为250M的较大文件,则文件数约为4亿,元数据需要的内存约为128G,若每个MaSter提供内存为32G,则配置4个MaSter元数据节点对应的云空间即可满足100PBytes的存储需求。参见下表:容量需求文件大小文件数所需总内存MaSter机器内存Master集群数100PBytes25M40亿1280G32G40100PBytes250M4亿128G32G4对于单个MaSter元数据节点对应的云空间而言,文件越大支撑的容量越大。系统吞吐速率:经测试,单用户单客户端在千兆网卡条件下写入速率可达到100MB/秒;理论上,单用户单客户端在万兆网卡条件下写入速率可
18、达到1GB/秒。1.2云数据管理平台技术及系统方案CData是云创存储开发的基于CStOr和Chubby的分布式存储系统。互联网应用的很多数据,包括Web索引、卫星图像数据等在内的海量结构化和半结构化数据,都可以存储在CData中。从实现上看,CData并没有什么全新的技术,但是如何选择合适的技术并将这些技术高效、巧妙地结合在一起恰恰是最大的难点。CData在很多方面和数据库类似,但它并不是真正意义上的数据库。下面对CData的数据模型、系统架构、实现以及它使用的一些数据库技术进行全面的介绍。1.2.1eData设计动机与目标云创存储设计CData的动机主要有如下三个方面。(1)需要存储的数据
19、种类繁多。物联网或互联网应用需要处理的数据类型非常多。(2)海量的服务请求。云创存储运行着目前世界上最繁忙的系统,它每时每刻处理的客户服务请求数量是普通的系统根本无法承受的。(3)商用数据库无法满足云创存储的需求。一方面现有商用数据库的设计着眼点在于其通用性,根本无法满足云创存储的苛刻服务要求,而且在数量庞大的服务器上根本无法成功部署普通的商用数据库。另一方面对于底层系统的完全掌控会给后期的系统维护、升级带来极大的便利。CData开发团队调查了多种数据的存储需求后,确定CData设计应达到如下几个基本目标。(1)广泛的适用性。CData是为了满足一系列应用系统多种数据的存储需求而并非特定产品的
20、存储要求。(2)很强的可扩展性。根据需要随时可以加入或撤销服务器。(3)高可用性。对于客户来说,有时候即使短暂的服务中断也是不能忍受的。CData设计的重要目标之一就是确保几乎所有的情况下系统都可用。(4)简单性。底层系统的简单性既可以减少系统出错的概率,也为上层应用的开发带来便利。在目标确定之后,云创存储希望巧妙地结合各种数据库技术,扬长避短。最终实现的系统也确实达到了原定的目标。下面详细讲解CData。1.2.2CData数据模型CData是一个分布式多维映射表,表中的数据通过一个行关键字(ROWKey)、一个列关键字(COlUmnKey)以及一个时间戳(TimeStamp)进行索引。CD
21、ata对存储在其中的数据不做任何解析,一律看做字符串,具体数据结构的实现需要用户自行处理。CData的存储逻辑可以表示为:(row:String,column:string,timezint64)stringCData数据的存储格式如图2-12所示网。“com. cnn. w ww图2/ CData数据模型1 .行CData的行关键字可以是任意的字符串,但是大小不能够超过64KB0CData和传统的关系型数据库有很大不同,它不支持一般意义上的事务,但能保证对于行的读写操作具有原子性(Atomic)o表中数据都是根据行关键字进行排序的,排序使用的是词典序。图2-1是CData数据模型的一个典型实
22、例,其中n.www就是一个行关键字。不直接存储网页地址而将其倒排是CData的一个巧妙设计。这样做至少会带来以下两个好处。(1)同一地址域的网页会被存储在表中的连续位置,有利于用户查找和分析。(2)倒排便于数据压缩,可以大幅提高压缩率。由于规模问题,单个的大表不利于数据的处理,因此CData将一个表分成了很多子表(Tablet),每个子表包含多个行。子表是CData中数据划分和负载均衡的基本单位。有关子表的内容在125节详细讲解。2 .列CData并不是简单地存储所有的列关键字,而是将其组织成所谓的列族(ColumnFamily),每个族中的数据都属于同一个类型,并且同族的数据会被压缩在一起保
23、存。引入了列族的概念之后,列关键字就采用下述的语法规则来定义:族名:限定词(family:qualifier)族名必须有意义,限定词则可以任意选定。在图2-1中,内容(Contents)、锚点(Anchor,就是HTML中的链接)都是不同的族。而和my.look.ca则是锚点族中不同的限定词。通过这种方式组织的数据结构清晰明了,含义也很清楚。族同时也是CData中访问控制(ACCeSSeOntrOl)的基本单元,也就是说访问权限的设置是在族这一级别上进行的。3 .时间戳云创存储的很多服务比如网页检索和用户的个性化设置等都需要保存不同时间的数据,这些不同的数据版本必须通过时间戳来区分。图2-1中
24、内容列的t3、t5和t6表明其中保存了在t3、t5和t6这三个时间获取的网页。CData中的时间戳是64位整型数,具体的赋值方式可以采取系统默认的方式,也可以用户自行定义。为了简化不同版本的数据管理,CData目前提供了两种设置:一种是保留最近的N个不同版本,图2-1中数据模型采取的就是这种方法,它保存最新的三个版本数据。另一种就是保留限定时间内的所有不同版本,比如可以保存最近10天的所有不同版本数据。失效的版本将会由CData的垃圾回收机制自动处理。1.2.3 eData系统架构CData是在云创存储的另外三个云计算组件基础之上构建的,其基本架构如图2-2所示。图中WorkQueue是一个分
25、布式的任务调度器,它主要被用来处理分布式系统队列分组和任务调度,关于其实现云创存储并没有公开。在前面已经讲过,CStor是云创存储的分布式文件系统,在CData中cStor主要用来存储子表数据以及一些日志文件。CData还需要一个锁服务的支持,CData选用了云创存储自己开发的分布式锁服务Chubbyo在CData中Chubby主要有以下几个作用。(1)选取并保证同一时间内只有一个主服务器(MaSterSerVer)O(2)获取子表的位置信息。(3)保存CData的模式信息及访问控制列表。CData主服务器图2-2CData基本架构另外在CData的实际执行过程中,云创存储的MapReduce
26、和Sawzall也被用来改善其性能,不过需要注意的是这两个组件并不是实现CData所必需的。CData主要由三个部分组成:客户端程序库(CIientLibrary).一个主服务器(MasterServer)和多个子表服务器(TabletServer),这三个部分在图2-2中都有相应的表示。从图2-2可以看出,客户访问CData服务时,首先要利用其库函数执行Open()操作来打开一个锁(实际上就是获取了文件目录),锁打开以后客户端就可以和子表服务器进行通信了。和许多具有单个主节点的分布式系统一样,客户端主要与子表服务器通信,几乎不和主服务器进行通信,这使得主服务器的负载大大降低。主服务主要进行一
27、些元数据的操作以及子表服务器之间的负载调度问题,实际的数据是存储在子表服务器上的。1.2.4 eData主服务器主服务器的主要作用如图2-3所示。新子表分配子表服务器状态监控j4服务器之后的负载均俚)图2-3主服务器的主要作用当一个新的子表产生时,主服务器通过一个加载命令将其分配给一个空间足够的子表服务器。创建新表、表合并以及较大子表的分裂都会产生一个或多个新子表。对于前面两种,主服务器会自动检测到,因为这两个操作是由主服务器发起的,而较大子表的分裂是由子服务发起并完成的,所以主服务器并不能自动检测到,因此在分割完成之后子服务器需要向主服务发出一个通知。由于系统设计之初就要求能达到良好的扩展性
28、,所以主服务器必须对子表服务器的状态进行监控,以便及时检测到服务器的加入或撤销。CData中主服务器对子表服务器的监控是通过Chubby完成的,子表服务器在初始化时都会从Chubby中得到一个独占锁。通过这种方式所有的子表服务器基本信息被保存在ChUbby中一个称为服务器目录(SerVerDireCtOry)的特殊目录之中。主服务器通过检测这个目录可以随时获取最新的子表服务器信息,包括目前活跃的子表服务器,以及每个子表服务器上现已分配的子表。对于每个具体的子表服务器,主服务器会定期向其询问独占锁的状态。如果子表服务器的锁丢失或没有回应,则此时可能有两种情况,要么是Chubby出现了问题(虽然这
29、种概率很小,但的确存在,云创存储自己也做过相关测试),要么是子表服务器自身出现了问题。对此主服务器首先自己尝试获取这个独占锁,如果失败说明ChUbby服务出现问题,需等待ChUbby服务的恢复。如果成功则说明Chubby服务良好而子表服务器本身出现了问题。这种情况下主服务器会中止这个子表服务器并将其上的子表全部移至其他子表服务器。当在状态监测时发现某个子表服务器上负载过重时,主服务器会自动对其进行负载均衡操作。基于系统出现故障是一种常态的设计理念(云创存储几乎所有的产品都是基于这个设计理念),每个主服务器被设定了一个会话时间的限制。当某个主服务器到时退出后,管理系统就会指定一个新的主服务器,这
30、个主服务器的启动需要经历以下四个步骤。(1)从ChUbby中获取一个独占锁,确保同一时间只有一个主服务器。(2)扫描服务器目录,发现目前活跃的子表服务器。(3)与所有的活跃子表服务器取得联系以便了解所有子表的分配情况。(4)通过扫描元数据表(MetadataTable),发现未分配的子表并将其分配到合适的子表服务器。如果元数据表未分配,则首先需要将根子表(RootTabIet)加入未分配的子表中。由于根子表保存了其他所有元数据子表的信息,确保了扫描能够发现所有未分配的子表。在成功完成以上四个步骤后主服务器就可以正常运行了。1.2.5 eData子表服务器CData中实际的数据都是以子表的形式保
31、存在子表服务器上的,客户一般也只和子表服务器进行通信,所以子表以及子表服务器是我们重点讲解的概念。子表服务器上的操作主要涉及子表的定位、分配以及子表数据的最终存储问题。其中子表分配在前面已经有了详细介绍,这里略过不讲。在讲解其他问题之前我们首先介绍一下SSTabIe的概念以及子表的基本结构。1.SSTable及子表基本结构SSTabIe是云创存储为CData设计的内部数据存储格式。所有的SSTabIe文件都存储在CStOr上,用户可以通过键来查询相应的值,图2-4是SSTabIe格式的基本不意图。SSTabIe中的数据被划分成一个个的块(BlOCk),每个块的大小是可以设置的,一般来说设置为6
32、4KB。在SSTabIe的结尾有一个索引(Index),这个索引保存了SSTabIe中块的位置信息,在SSTabIe打开时这个索引会被加载进内存,这样用户在查找某个块时首先在内存中查找块的位置信息,然后在硬盘上直接找到这个块,这种查找方法速度非常快。由于每个SSTable一般都不是很大,用户还可以选择将其整体加载进内存,这样查找起来会更快。从概念上讲子表是表中一系列行的集合,它在系统中的实际组成如图2-5所不O每个子表都是由多个SSTabIe以及日志(LOg)文件构成。有一点需要注意,那就是不同子表的SSTabIe可以共享,也就是说某些SSTabIe会参与多个子表的构成,而由子表构成的表则不存
33、在子表重叠的现象。CData中的日志文件是一种共享日志,也就是说系统并不是对子表服务器上每个子表都单独地建立一个日志文件,每个子表服务器上仅保存一个日志文件,某个子表日志只是这个共享日志的一个片段。这样会节省大量的空间,但在恢复时却有一定的难度,因为不同的子表可能会被分配到不同的子表服务器上,一般情况下每个子表服务器都需要读取整个共享日志来获取其对应的子表日志。云创存储为了避免这种情况出现,对日志做了一些改进。CData规定将日志的内容按照键值进行排序,这样不同的子表服务器都可以连续读取日志文件了。一般来说每个子表的大小在100MB到200MB之间。每个子表服务器上保存的子表数量可以从几十到上
34、千不等,通常情况下是100个左右。图2-5子表实际组成2,子表地址子表地址的查询是经常碰到的操作。在CData系统的内部采用的是一种类似B+树的三层查询体系。子表地址结构如图2-6所示。所有的子表地址都被记录在元数据表中,元数据表也是由一个个的元数据子表(Metadatatablet)组成的。根子表是元数据表中一个比较特殊的子表,它既是元数据表的第一条记录,也包含了其他元数据子表的地址,同时ChUbby中的一个文件也存储了这个根子表的信息。这样在查询时,首先从ChUbby中提取这个根子表的地址,进而读取所需的元数据子表的位置,最后就可以从元数据子表中找到待查询的子表。除了这些子表的元数据之外,
35、元数据表中还保存了其他一些有利于调试和分析的信息,比如事件日志等。用户表I图2-6子表地址结构为了减少访问开销,提高客户访问效率,CData使用了缓存(CaChe)和预取(Prefetch)技术,这两种技术手段在体系结构设计中是很常用的。子表的地址信息被缓存在客户端,客户在寻址时直接根据缓存信息进行查找。一旦出现缓存为空或缓存信息过时的情况,客户端就需要按照图26所示方式进行网络的来回通信(NetWOrkRoUnd-trips)进行寻址,在缓存为空的情况下需要三个网络来回通信。如果缓存的信息是过时的,则需要六个网络来回通信。其中三个用来确定信息是过时的,另外三个获取新的地址。预取则是在每次访问
36、元数据表时不仅仅读取所需的子表元数据,而是读取多个子表的元数据,这样下次需要时就不用再次访问元数据表。3.子表数据存储及读/写操作在数据的存储方面CData做出了一个非常重要的选择,那就是将数据存储划分成两块。较新的数据存储在内存中一个称为内存表(MemtabIe)的有序缓冲里,较早的数据则以SSTabIe格式保存在cStor中。这种技术在数据库中不是很常用,但云创存储还是做出了这种选择,实际运行的效果也证明云创存储的选择虽然大胆却是正确的。从图2-7中可以看出读和写操作有很大的差异性。做写操作(WriteOP)时,首先查询ChUbby中保存的访问控制列表确定用户具有相应的写权限,通过认证之后
37、写入的数据首先被保存在提交日志(CommitLog)中。提交日志中以重做记录(RedoRecord)的形式保存着最近的一系列数据更改,这些重做记录在子表进行恢复时可以向系统提供已完成的更改信息。数据成功提交之后就被写入内存表中。在做读操作(ReadOP)时,首先还是要通过认证,之后读操作就要结合内存表和SSTabIe文件来进行,因为内存表和SSTabIe中都保存了数据。图2-7CData数据存储及读/写操作在数据存储中还有一个重要问题,就是数据压缩的问题。内存表的空间毕竟是很有限的,当其容量达到一个阈值时,旧的内存表就会被停止使用并压缩成SSTabIe格式的文件。在CData中有三种形式的数据
38、压缩,分别是次压缩(MinOrCompaction)X合并压缩(MergingCompaction)和主压缩(MajorComPaCtiOn)O三者之间的关系如图2-8所示。每一次旧的内存表停止使用时都会进行一个次压缩操作,这会产生一个SSTabIeo但如果系统中只有这种压缩的话,SSTabIe的数量就会无限制地增加下去。由于读操作要使用SSTabIe,数量过多的SSTabIe显然会影响读的速度。而在CData中,读操作实际上比写操作更重要,因此CData会定期地执行一次合并压缩的操作,将一些已有的SSTabIe和现有的内存表一并进行一次压缩。主压缩其实是合并压缩的一种,只不过它将所有的SST
39、abIe一次性压缩成一个大的SSTabIe文件。主压缩也是定期执行的,执行一次主压缩之后可以保证将所有的被压缩数据彻底删除,如此一来,既回收了空间又能保证敏感数据的安全性(因为这些敏感数据被彻底删除了)。图2-8三种形式压缩之间的关系1.2.6eData性能优化上述各种操作已经可以实现CData的所有功能了,但是这些基本的功能很多时候并不是很符合用户的使用习惯,或者执行的效率较低。有些功能CData自身已经进行了优化,包括使用缓存、共享式的提交日志以及利用系统的不变性。除此之外,CData还允许用户个人在基本操作基础上对系统进行一些优化。这一部分主要向读者介绍用户可以使用的几个重要优化措施。实
40、际上这些技术手段都是一些已有的数据库方法,只不过云创存储将它具体地应用于CData之中了。1 .局部性群组(Localitygroups)CData允许用户将原本并不存储在一起的数据以列族为单位,根据需要组织在一个单独的SSTabIe中,以构成一个局部性群组。这实际上就是数据库中垂直分区技术的一个应用。结合图2-2的实例来看,在被CData保存的网页列关键字中,有的用户可能只对网页内容感兴趣,那么它可以通过设置局部性群组只看内容这一列。有的则会对诸如网页语言、网站排名等可以用于分析的信息比较感兴趣,他也可以将这些列设置到一个群组中。局部性群组如图2-9所示。通过设置局部性群组用户可以只看自己感
41、兴趣的内容,对某个用户来说的大量无用信息无需读取。对于一些较小的且会被经常读取的局部性群组,用户可以将其SSTabIe文件直接加载进内存,这可以明显地改善读取效率。2 .压缩压缩可以有效地节省空间,CData中的压缩被应用于很多场合。首先压缩可以被用在构成局部性群组的SSTabIe中,可以选择是否对个人的局部性群组的SSTable进行压缩。CData中这种压缩是对每个局部性群组独立进行的,虽然这样会浪费一些空间,但是在需要读时解压速度非常快。通常情况下,用户可以采用两步压缩的方式网:第一步利用BentIey&Mdlroy方式(BMDiff)在大的扫描窗口将常见的长串进行压缩;第二步采取ZiPP
42、y技术进行快速压缩,它在一个16KB大小的扫描窗口内寻找重复数据,这个过程非常快。压缩技术还可以提高子表的恢复速度,当某个子表服务器停止使用后,需要将上面所有的子表移至另一个子表服务器来恢复服务。在转移之前要进行两次压缩,第一次压缩减少了提交日志中的未压缩状态,从而减少了恢复时间。在文件正式转移之前还要进行一次压缩,这次压缩主要是将第一次压缩后遗留的未压缩空间进行压缩。完成这两步之后压缩的文件就会被转移至另一个子表服务器。3 .布隆过滤器(BloomFilter)CData向用户提供了一种称为布隆过滤器的数学工具。布隆过滤器是巴顿布隆在1970年提出的,实际上它是一个很长的二进制向量和一系列随机映射函数,在读操作中确定子表的位置时非常有用。布隆过滤器的速度快,省空间。而且它有一个最大的好处是它绝不会将一个存在的子表判定为不存在。不过布隆过滤器也有一个缺点,那就是在某些情况下它会将不存在的子表判断为存在。不过这种情况出现的概率非常小,跟它带来的巨大好处相比这个缺点是可以忍受的。从实际运行来看,CData完全可以满足这些不同需求的应用,而这一切都得益于其优良的构架以及恰当的技术选择。与此同时云创存储还在不断地对CData进行一系列的改进,通过技术改良和新特性的加入提高系统运行效率及稳定性。