分布式存储系统横向对比
(一)关键问题 数据分布 对于存储系统,最重要的问题就是数据分布,即什么样的数据放置在什么样的节点上。数据分布时需要考虑数据是否均衡、以后是否容易扩容等一系列问题。不同的数据分布方式也存在不同的优缺点,需要根据自身数据特点进行选择。 1)哈希分布 => 随机读取 取模直接哈希: 将不同哈希值的数据分布到不同的服务器上 关键: 找出一个散列特性很好的哈希函数 问题: 增加、减少服务器时的大量数据迁移 解决: 1)将<哈希值,服务器>元数据存储在元数据服务器中;2)一致性哈希 一致性哈希: 给系统每个节点分配一个随机token,这些token构成一个hash环。执行数据存放操作时,先计算key的hash值,然后存放到顺时针方向第一个大于或者等于该hash值的token所在节点。 关键: 哈希值变成了一个范围,每个物理节点上存储的数据是哈希值处于前一段范围的数据。 优点: 节点增加/删除时只会影响到在hash环中相邻的节点,而对其他节点没影响。 维护每台机器在哈希环中的位置方式:1) 记录它前一个&后一个节点的位置信息,每次查找可能遍历整个哈希环所有服务器;2) O(logN)位置信息,查找的时间复杂度为O(logN);3) 每台服务器维护整个集群中所有服务器的位置信息,查找服务器的时间复杂度为O(1) 虚拟节点: 将哈希取模的模数取得很大,就会得到更多的哈希值,这个哈希值成为逻辑节点