Swift中映射与冗余
2012-11-06 09:18
716 查看
1.1 文件,虚节点,设备映射关系
Swift系统中存在两种映射关系,对于一个文件,通过hash算法(md5),找到对应的虚节点,虚节点通过映射关系(ring文件中二维数组)找到对应的设备。这样就完成了一个文件存储在设备上的映射。生成环境中的例子:
1.虚节点到设备多对多的关系
2.文件与虚节点是一对一的关系,
1.2 系统添加设备后分配过程
虚节点与设备的映射关系
设备对应的虚节点
向系统中增加一台新设备,需要执行命令修改builder文件和ring文件,然后把ring文件通过scp命令同步到每台设备上,保证新的系统中每台设备的ring文件相同(即映射关系一致),然后重新启动所有设备上的服务,服务会根据新的映射关系,把需要“移位”的文件,推送到新的位置。此时系统重新达到了平衡。
添加一台设备后的状态
1.3 系统删减设备后分配过程
删除一台设备
删除一台设备,同样通过命令生成新的映射关系,系统会收集被删除的设备的虚节点,然后重新分配。
删除一台设备
1.4 分配策略(映射关系生成的策略)
系统重新分配一个虚节点,首先要保证同一个zone下或者同一个dev下不能有同一个虚节点的副本。然后系统遵守下面的分配原则。1.设备的需求
2.随机数
3.设备的id.
其中设备的需求 就是根据设置的weight计算出的设备应该被分配的值与实际分配值的差值。
1.5 系统冗余问题
冗余可以保证系统在面临,暂时性的局部故障时,可以不影响服务。Swift对象存储系统一份文件,有三份副本(包含文件本身),上传和下载时,系统设定为如果上传或下载两份成功,则认为上传或下载成功。这是为了防止,一台设备的暂时性故障,导致整个系统的故障,一旦故障的设备恢复后,系统中的replication守护进程,会从其他的设备上同步文件的最新版本,以保证系统的一致性。1.写文件
2.读文件
3.系统恢复,同步文件。
初始状态
用户更新数据,其中一台设备更新失败,但是其他两台设备更新成功,返回成功。
用户获取数据,其中一台设备获取失败,两台获取成功,通过比对时间戳,最终获取V2
系统恢复后,replication发现版本不一致
replication推送一个V2版本数据
相关文章推荐
- 《从零開始学Swift》学习笔记(Day 71)——Swift与C/C++混合编程之数据类型映射
- Map all the things in Swift 映射所有东西
- iOS JSON与Object之间的映射 ObjectMapper For Swift
- 《从零开始学Swift》学习笔记(Day 70)——Swift与Objective-C混合编程之Swift与Objective-C API映射
- 《从零开始学Swift》学习笔记(Day 71)——Swift与C/C++混合编程之数据类型映射
- Swift 3.0 【清除 Xcode 8 控制台输出的冗余代码】
- 《从零开始学Swift》学习笔记(Day 71)——Swift与C/C++混合编程之数据类型映射
- Swift-反射机制学习(简单实现Json格式与对象映射)
- 《从零开始学Swift》学习笔记(Day 70)——Swift与Objective-C混合编程之Swift与Objective-CAPI映射
- 《从零开始学Swift》学习笔记(Day 71)——Swift与C/C++混合编程之数据类型映射
- swift里类方法和构造方法的使用来减少代码冗余提高开发效率
- 《从零开始学Swift》学习笔记(Day 70)——Swift与Objective-C混合编程之Swift与Objective-C API映射
- vrrp ,网关冗余,浮动路由,pat地址转化,web服务器映射
- s3c6410存储器映射
- 教你路由器端口映射设置方法
- 【SSH 基础】浅谈Hibernate关系映射(4)
- swift之mutating关键字【转】
- Hibernate基于主键的一对一映射关系
- Swift - 使用CGBlendMode改变UIImage颜色
- VS2013 MFC 消息映射