【分布式基础】一致性哈希
来源:互联网 发布:阿里云服务器老是掉线 编辑:程序博客网 时间:2024/06/05 10:48
分布式过程中我们将服务分散到若干的节点上,以此通过集体的力量提升服务的目的。然而,对于一个客户端来说,该由哪个节点服务呢?或者说对某个节点来说他分配到哪些任务呢?
1. 强哈希
考虑到单服务器不能承载,因此使用了分布式架构,最初的算法为 hash() mod n, hash()通常取用户ID,n为节点数。此方法容易实现且能够满足运营要求。缺点是当单点发生故障时,系统无法自动恢复。同样不也不能进行动态增加节点。
2. 弱哈希
为了解决单点故障,使用 hash() mod (n/m), 这样任意一个用户都有m个服务器备选,可由client随机选取。由于不同服务器之间的用户需要彼此交互,所以所有的服务器需要确切的知道用户所在的位置。因此用户位置被保存到memcached中。当一台发生故障,client可以自动切换到对应backup,由于切换前另外1台没有用户的session,因此需要client自行重新登录。
他比强哈希的好处是:解决了单点问题。
但存在以下问题:负载不均衡,尤其是单台发生故障后剩下一台会压力过大;不能动态增删节点;节点发生故障时需要client重新登录
3. 一致性哈希
一致性哈希也只是提出四个概念和原则,并没有提及具体实现:1、balance:哈希结果尽可能的平均分散到各个节点上,使得每个节点都能得到充分利用。
2、Monotonicity:上面也说了,如果是用签名取模算法,节点变更会使得整个网络的映射关系更改。如果是carp,会使得1/n的映射关系更改。一致性哈希的目标,是节点变更,不会改变网络的映射关系。
3、spread:同一份数据,存储到不同的节点上,换言之就是系统冗余。一致性哈希致力于降低系统冗度。
4、load:负载分散,和balance其实是差不多的意思,不过这里更多是指数据存储的均衡,balance是指访的均衡。
一致性哈希算法在1997年由麻省理工学院提出,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。
我们把每台server分成v个虚拟节点,再把所有虚拟节点(n*v)随机分配到一致性哈希的圆环上,这样所有的用户从自己圆环上的位置顺时针往下取到第一个vnode就是自己所属节点。当此节点存在故障时,再顺时针取下一个作为替代节点。
引用:
http://baike.baidu.com/view/1588037.htm
- 【分布式基础】一致性哈希
- 【分布式】一致性哈希
- 分布式存储:一致性哈希
- 分布式一致性哈希算法
- memcached分布式-一致性哈希
- 分布式哈希和一致性哈希
- 分布式哈希和一致性哈希
- “分布式哈希”和“一致性哈希”
- 分布式哈希和一致性哈希
- 一致性哈希(用于分布式缓存原理)
- 分布式哈希表和一致性哈希
- 一致性哈希和分布式哈希表
- memcached分布式一致性哈希算法
- 分布式哈希表DHT和一致性哈希
- 分布式存储和一致性哈希
- 一致性Hash算法(分布式哈希)
- memcached分布式一致性哈希算法
- 分布式缓存-一致性哈希算法
- 一次32位英文版win7安装
- 每个程序员都应该知道的8个Linux命令
- ThinkPHP
- 读刘未鹏《暗时间》的总结和思考
- conky实现桌面幻灯片
- 【分布式基础】一致性哈希
- fedora16下Samba服务的配置 .
- 遍历List和Set集合的常用方法
- Putty连接虚拟机
- 【linux基础】Valgrind
- C++入门进阶之一: 基础知识介绍
- CSS背景图拉伸自适应尺寸,全浏览器兼容
- eclipse,myeclipse的插件安装
- hdu 1175 连连看