- 1、本文档共19页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
深入云存儲系统Swift核心组件Ring实现原理剖析
深入云存储系统Swift核心组件:Ring实现原理剖析???简介OpenStack是一个美国国家航空航天局和Rackspace合作研发的开源云计算项目,并成为Apache下的一个重要开源项目,目前已经发展到了180家公司参与其中。OpenStack Object Storage(Swift)是OpenStack开源云计算项目的子项目之一。Swift的目的是使用普通硬件来构建冗余的、可扩展的分布式对象存储集群,存储容量可达PB级。OpenStack Object Storage?最初由?Rackspace?采用Python语言开发,并于?2010?年?7?月贡献给?OpenStack ,作为该开源项目的一部分。它的目的是用于托管?Rackspace的?Cloud Files service?,原始项目代号是?swift,所以沿用至今。在分布式对象存储中的一个关键问题是数据该如何存放。Ring是Swift中最重要的组件,用于记录存储对象与物理位置间映射关系。在涉及查询account、container、object信息时就需要查询集群的ring信息。?先来看一下Swift文档中关于Ring的描述:?Ring用来确定数据驻留在集群中的位置。有单独对应于Account数据库、container数据库和单个object的ring。?Ring中每个partition在集群中都(默认)有3个replica。每个partition的位置由ring来维护,并存储在映射中。?Ring使用zone的概念来保证数据的隔离。每个partition的replica都确保放在了不同的zone中。一个zone可以是一个硬盘,一个服务器,一个机架,一个交换机,甚至是一个数据中心...................?在上述Ring的特性描述中提到了Ring使用zone、device、partition和replica等等来维护数据和磁盘间的映射信息。那么在Ring的背后采用什么算法,使用了什么机制来保证数据的安全、高效和可扩展呢?这些概念对于数据存储带来了什么好处?本文逐步深入探讨了Swift如何通过Ring组件来实现冗余的、可扩展的目的。??1.??普通Hash算法与场景分析??先来看一个简单的例子假设我们手里有N台存储服务器(以下简称node),打算用于图片文件存储,为了使服务器的负载均衡,需要把对象均匀地映射到每台服务器上,通常会使用哈希算法来实现,计算步骤如下:?1.计算object的hash值Key2.计算Key mod N值?有N个存储节点,将Key模N得到的余数就是该Key对应的值需要存放的节点。比如,N是2,那么值为0、1、2、3、4的Key需要分别存放在0、1、0、1和0号节点上。如果哈希算法是均匀的,数据就会被平均分配到两个节点中。如果每个数据的访问量比较平均,负载也会被平均分配到两个节点上。但是,当数据量和访问量进一步增加,两个节点无法满足需求的时候,需要增加一个节点来服务客户端的请求。这时,N变成了3,映射关系变成了Key mod (N+1),因此,上述哈希值为2、3、4的数据需要重新分配(2-server 2,3 - server 0,4 - server 1)。如果数据量很大的话,那么数据量的迁移工作将会非常大。当N已经很大,从N加入一个节点变成N+1个节点的过程,会导致整个哈希环的重新分配,这个过程几乎是无法容忍的,几乎全部的数据都要重新移动一遍。?我们举例说明,假设有100个node的集群,将107项数据使用md5 hash算法分配到每个node中,Python代码如下:from hashlib import md5from struct import unpack_fromNODE_COUNT =?100DATA_ID_COUNT =ode_counts = [0] * NODE_COUNTfor?data_id in xrange(DATA_ID_COUNT): data_id = str(data_id)??# This just pulls part of the hash out as an integer hsh = unpack_from(I, md5(data_id).digest())[0] node_id = hsh % NODE_COUNT node_counts[node_id] +=?1desired_count = DATA_ID_COUNT / NODE_COUNTprint?%d: Desired data ids per node?% desired_countmax_count = max(node_counts)over =?100.0?* (max_count - de
您可能关注的文档
最近下载
- 2019年云南省中考生物试卷.docx VIP
- 济宁普悦环保科技有限公司年产150万m2MBR膜及设备生产项目环境影响报告表.doc VIP
- 牙隐裂诊治及病例分析.pptx VIP
- 国开-组织行为学-004-机考考前复习资料.docx
- 2025年云南省西双版纳州中考模拟生物试题.docx VIP
- QB 1890-1993自行车 脚闸.pdf
- (高清版)DB3301∕T 0369-2022 城市园林树木支撑技术规范 .pdf VIP
- JJF(石化) 015-2018 实验用平板硫化机校准规范.pdf
- 数据库程序设计知到智慧树期末考试答案题库2024年秋外交学院.docx VIP
- 2024证券从业人员资格考试真题含答案.docx VIP
文档评论(0)