深入云存储系统Swift核心组件:Ring实现原理剖析.docx
《深入云存储系统Swift核心组件:Ring实现原理剖析.docx》由会员分享,可在线阅读,更多相关《深入云存储系统Swift核心组件:Ring实现原理剖析.docx(12页珍藏版)》请在第壹文秘上搜索。
1、深入云存储系统SWift核心组件:Ring实现原理剖析简介OpenStack是个美国国家航空航天局和Rackspace合作研发的开源云计算工程,并成为Apache下的一个重要开源工程,目前已经开展到了180家公司参与其中。OpenStackObjectStorage(Swift)是OPenStaCk开源云计算工程的子工程之、SWift的目的是使用普通硬件来构建冗余的、可扩展的分布式对象存储集群,存储容量可达PB级。OPenStaCkObjeetStOrage最初由RaCkSPaCe采用Python语言开发,并于2010年7月奉献给OpenStack,作为该开源工程的一局部。它的目的是用于托管R
2、ackspace的CloudFilesservice,原始工程代号是swift,所以沿用至今。在分布式对象存储中的一个关键问题是数据该如何存放。Ring是SWift中最重要的组件,用于记录存储对象与物理位置间映射关系。在涉及查询account、containerObjeCt信息时就需要查询集群的ring信息。先来看一下Swift文档中关于Ring的描述:Ring用来确定数据驻留在集群中的位置。有单独对应于ACCOUnt数据库、Container数据库和单个ObjeCt的ring。Ring中每个partition在集群中都(默认)有3个replica。每个partition的位置由ring来维护
3、,并存储在映射中。Ring使用zone的概念来保证数据的隔离。每个partition的replica都确保放在了不同的zone中。一个Zone可以是一个硬盘,一个效劳器,一个机架,一个交换机,甚至是一个数据中心在上述Ring的特性描述中提到了Ring使用zone、device、partition和replica等等来维护数据和磁盘间的映射信息。那么在Ring的背后采用什么算法,使用了什么机制来保证数据的平安、高效和可扩展呢?这些概念对于数据存储带来了什么好处?本文逐步深入探讨了Swift如何通过Ring组件来实现冗余的、可扩展的目的。1 .普通Hash算法与场景分析先来看一个简单的例子假设我们
4、手里有N台存储效劳器(以下简称node),打算用于图片文件存储,为了使效劳器的负载均衡,需要把对象均匀地映射到每台效劳器上,通常会使用哈希算法来实现,计算步骤如下:2 .计算object的hash值Key3 .计算KeymodN值有N个存储节点,将Key模N得到的余数就是该Key对应的值需要存放的节点。比方,N是2,那么值为0、1、2、3、4的Key需要分别存放在0、1、0、1和。号节点上。如果哈希算法是均匀的,数据就会被平均分配到两个节点中。如果每个数据的访问量比拟平均,负载也会被平均分配到两个节点上。但是,当数据量和访问量进一步增加,两个节点无法满足需求的时候,需要增加个节点来效劳客户端的
5、请求。这时,N变成了3,映射关系变成了Keymod(N+1),因此,上述哈希值为2、3、4的数据需要重新分配(2-server2,3-server0,4-server1)o如果数据量很大的话,那么数据量的迁移工作将会非常大。当N已经很大,从N参加一个节点变成N+1个节点的过程,会导致整个哈希环的重新分配,这个过程几乎是无法容忍的,几乎全部的数据都要重新移动一遍。我们举例说明,假设有100个node的集群,将U项数据使用md5hash算法分配到每个node中,Python代码如下:fromhashlibimportmd5fromstructimportunpack_fromNODE_COUNT=
6、100DATA_ID_COUNT=10000000node_counts=0*NODE_COUNTfordata_idinxrange(DA7A_ID_COUNT):datajd=str(datajd)#Thisjustpullspartofthehashoutasanintegerhsh=unpack-from(,zmd5(dataJd).digest()0nodejd=hsh%NODE_COUNTnode_countsnode_id+=1desired_count=DATA_ID_COUNT/NODE_COUNTprint,%d:Desireddataidspernode%desired_
7、countmax-count=max(node_counts)over=100.0*(max_count-desired_count)/desired_countprint,%d:Mostdataidsononenode,%.02f%over,%(max_count,over)min_count=min(node_counts)under=100.0*(desired_count-min-count)/desired_countprint,%d:Leastdataidsononenode,%.02f%under%(min-countzunder)100000:Desireddataidsper
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 深入 存储系统 Swift 核心 组件 Ring 实现 原理 剖析
