一 介绍
Ring是swift中非常核心的组件,它决定着数据如何在集群中分布。
Swift根据设置的partition_power决定集群中的分区数量(2的partition_power次方),并根据一致性哈希算法将分区分配到不同的node上,并将数据分布到对应的分区上。
二 新的Ring创建的过程
1 ring-builder根据device weight计算出每个设备上应该被分配的分区的数量。(2的partition_power次方得到分区总数,再根据weight和设备数进行分配)
2 ring-builder将每个分区的副本分配到对应的device上。
三 根据一个old ring创建new ring的过程
1 重新计算每个device上的分区数量;
2 收集需要被重新分配的分区:
将被移除的device上的所有分区添加到gathered list;
将由于添加新device而产生的需要被分配出去的分区添加到gathered list;
将所有device上经过重新分配后多出来的分区添加到gathered list。
3 使用上述“新的Ring创建的过程”的方法分配gathered list中的分区到devices中。