解决的问题:
分布式系统环境下,数据存储位置的分配
解决的问题2:
总线架构情况下,中间的router决定sm的时候,可以将用户分布到多个sm上,可以采用
一致性哈希算法,一旦服务器崩溃了,用户就自然迁移到了就近的sm上了,sm崩溃重启后,
用户仍然会回到这个服务器上,便于定位问题,一致性哈希还有另外一个好处,
就是同一个用户的请求可以分配到同一个sm上,不需要做什么特殊的处理。
这个算法可以改变和简化总线的组件架构的设计,不再需要将映射关系保存在router中,
也不再需要将状态和数据分离出来集中处理,实现其他状态无关的组件的横向扩展
分布式环境下,就必然有多个节点,至于多个节点上的数据分布,是否一定要借助多节点之间的协调才能保证数据存储位置的分配具有单调不变性,平衡性,节点故障可恢复性这些要求,集中式的算法是否可以满足上述要求?
一致性哈希算法定义
1.构造0~2^32个Hash Bucket,并形成环
2.通过Hash函数将节点分布在0~2^32的这个环上,进行Hash的key是相对于节点来说
可以唯一区分自己,也是永远不变的一个描述
3.数据元素的(key,val)中key也使用同一个Hash函数让它分布在环上,key的要求也同上
4.数据元素的存储位置从它所在位置进行顺时针方向来选择最近的节点,作为它的存储节点
补充性定义
1、可以在环上为实际节点配备虚拟节点
分析问题:
上述Hash函数是一个重点需要解读的,它如何保证节点分配和数据数据分布的均衡性?
上述如何保证节点在添加和删除时,数据val的迁移?
要真正做到高可用性,可能还是得引入节点之间的交互,数据迁移必然要要求节点之间的相互感应,也就是存在集中管理的角色不可避免,说白了,就是节点还是不能独立存在,需要知道其他节点的存在。
阅读(795) | 评论(0) | 转发(0) |