openstack-swift - 关于OpenStack Swift ring 函数的两个问题
问题描述
我是 Swift 的新手,我正在尝试学习它的功能。关于环和一致的散列算法,我有两个问题要问你。
当我们要存储一个对象时,我们取它的路径(例如“.../v1/account_name/container_name/object_name.ext”),用这个路径输入MD5哈希函数,然后我们得到一个哈希值。从这个哈希值中,我们取前 n 位,其中 n 是部分幂,并使用这些位来获得分区号。现在,如果我们使用分区号访问环,我们可以发现该分区在哪个节点并以这种方式存储对象。
第一个问题:如果该分区已满怎么办?
假设现在 swift 将对象存储在正确的节点中,第二个问题是:swift 如何决定存储副本的位置?
谢谢你们!
解决方案
如何迅速决定将副本存储在哪里?
当您创建一个通知集群的所有节点和所有磁盘的环时,它会自动定义每个副本的位置以及在发生故障时使用哪些切换节点。因此,当您询问环在哪里可以找到/存储带有哈希 ABC123DEF 的对象时......它会回答您:
Look at here:
SERVER1/DISK2/PATH/TO/FILE
SERVER2/DISK4/PATH/TO/FILE
SERVER4/DISK1/PATH/TO/FILE
And if you don't find, look at here.
Handoff: SERVER2/DISK2/PATH/TO/FILE
Handoff: SERVER8/DISK7/PATH/TO/FILE
Handoff: SERVER3/DISK1/PATH/TO/FILE
推荐阅读
- java - 保存数组中两个数字之间的奇数
- xquery - 存在-db - 文件:移动不移动文档
- gradle - 如何使用环境名称设置 gradle test 命令
- c# - C# ChromeDriver:javascript 错误:未处理的对象
- java - 我需要文件结尾的正确组合键
- r - 有没有一种方法可以在数据框中绑定不同数量的行?
- python - 使用数字的虚部时如何更改列表中的元素
- javascript - 用于反应应用程序的代码沙箱的 babel 配置
- python - 将值转换为 ids 的 torchtext 字段得到错误整数是必需的
- r - 通过 mc.cores 与 makePSOCKcluster 设置内核?