Swift中所谓的Ring就是基于一致性Hash所构建的环。Ring包括以下三种重要的数据结构。
一 相关数据结构说明
1 设备表
设备表中的每一项都对应一个Device,其中记录了该Device的具体位置信息,包括Device ID,所在Region,Zone,IP地址以及端口号,以及用户为该Device定义的权重(Weight)等。Device容量大小不一时,可以通过Weight值保证Partition均匀分布,容量较大的Device拥有拥有更大的权重,也容纳更多的Partition。
比如,一个1T大小的Device有100的权重而一个2T大小的Device有200的权重。
2 设备查询表(Device Lookup Table)
存储Partition的各个副本(默认为3个)与具体Device的映射关系。
从列的维度分析:5,12,1可以这样理解,0号partition的3个副本分别存放在5号、12号、1号设备上。
从行的维度分析:5,0,1,4,12表示针对第1个副本,0,1,2,3,4这5个partition分别存放在5号,0号,1号,4号,12号设备上。
从表格的维度分析:每个表格的信息是设备表中的Device编号,根据这个编号,可以去设备表中检索到该Device的具体连接信息(Device ID、IP以及端口号等信息)。 <