全球旧事资料 分类
32位的,使用PARTITION_SHIFT(等于32PARTITION_POWER)将数据项的MD5哈希值映射到partitio
的223的空间中。32数据一致性模型(Co
siste
cyModel)按照EricBrewer的CAP(Co
siste
cy,Availability,Partitio
Tolera
ce)理论,无法同时满足3个方面,Swift放弃严格一致性(满足ACID事务级别),而采用
第4页共14页
fOpe
StackSwift学习笔记
最终一致性模型(Eve
tualCo
siste
cy),来达到高可用性和无限水平扩展能力。为了实现这一目标,Swift采用Quorum仲裁协议(Quorum有法定投票人数的含义):定义:N:数据的副本总数;W:写操作被确认接受的副本数量;R:读操作的副本数量。强一致性:RWN,以保证对副本的读写操作会产生交集,从而保证可以读取到最新版本;如果WN,R1,则需要全部更新,适合大量读少量写操作场景下的强一致性;如果RN,W1,则只更新一个副本,通过读取全部副本来得到最新版本,适合大量写少量读场景下的强一致性。弱一致性:RWN,如果读写操作的副本集合不产生交集,就可能会读到脏数据;适合对一致性要求比较低的场景。Swift针对的是读写都比较频繁的场景,所以采用了比较折中的策略,即写操作需要满足至少一半以上成功WN2,再保证读操作与写操作的副本集合至少产生一个交集,即RWN。在分布式系统中,数据的单点是不允许存在的。线上正常存在的replica数量是1的话将非常危险的,因为一旦这个replica再次错误,就可能发生数据的永久性错误。假如我们把N设置成为2,那么,只要有一个存储节点发生损坏,就会有单点的存在。所以N必须大于2。但N越高,系统的维护和整体成本就越高。所以,工业界通常把N设置为3。Swift默认配置是N3,W2N2,R1或2,即每个对象会存在3个副本,这些副本会被尽量存储在不同区域的节点上;W2表示至少需要更新2个副本才算写成功。当R1时,意味着某一个读操作成功便立刻返回,此种情况下可能会读取到旧版本(弱一致性模型)。当R2时,需要通过在读操作请求头中增加x
ewesttrue参数来同时读取2个副本的元数据信息,然后比较时间戳来确定哪个是最新版本(强一致性模型)。如果数据出现了不一致,后台服务进程会在一定时间窗口内通过检测和复制协议来完成数据同步,从而保证达到最终一致性。
第5页共14页
fOpe
StackSwift学习笔记
图3Quorum协议示例33环(Ri
g)Ri
g是Swift中最重要的组件,用于记录存储对象与物理位置间的映射关系。在涉及查询Accou
t、Co
tai
er、Object信息时就需要查询集群的Ri
gr
好听全球资料 返回顶部