元数据:当节点增加是,系统可以更多的将新来的请求引导到新加入的节点。合适的调度平衡策略可以确保系统平衡的使用各节点的存储空间。
一致性hash模型:原始的hash表一点需要扩容,需要rehash。在基于hash的分布式存储系统中,意味着所有的数据必须重新迁移一遍。一致性hash算法中,当新节点加入后,会映射到hash换上。原来的区段会被新节点截断,新加入的节点会占据被切割出来的hash区间。为了完成这个转换,这部分数据需要迁移到新的服务器上。与原始的hash相比,一致性hash只需要被传输被新服务器抢走的那部分数据。
一致性hash模型在平衡性上,如果不是成倍的增加节点,会存在数据不平衡的问题,为了平衡数据,需要迁移更多的数据,每台节点都需要迁出一些数据,以确保每个节点的数据量都差不多。虚拟节点的引入便是起到这个作用。于是实际的数据迁移量同时增加的容量数成正比,系数是当前存储系统的空间使用率。
一个1p的系统,3个副本,70%的容量,扩容200T,那么需要迁移大约(200*70%)*3 = 420T的数据,才能使数据保持平衡。如果常见的存储服务器(2T*10),则需要21台存储。如果都参与迁移,将是一个很耗时的工作,更复杂的是迁移中出错。
元数据方案一般情况下不需要数据迁移,迁移只有存储服务器更替时。用户数据对象可以存储在任何一个节点上,因而可以把一台节点需要迁移的数据分散到其他节点上。并且可以从其他副本那里多对多的并发传输数据