一致性哈希算法
来源:互联网 发布:如何知道mac os的版本 编辑:程序博客网 时间:2024/05/09 08:18
在分布式系统中,如果某业务可以由多个相同的节点处理,很容易想到用HASH的方式将业务请求分散到这些节点处理,如果有N个节点,计算方法为:HASH(id)%N。
如果只是简单的计算,不涉及用户状态,这是一个简单有效的方案。如果节点的计算涉及用户状态,比如维护购物车、Memcache缓存服务等,好像也没什么问题,只要用同一个数据做id,上述HASH的结果也保持不变。但如果节点数量发生变化,比如由于业务量的增大而增加节点或由于机器宕机而减少节点,上述HASH的结果就不一样了。若增加2个节点,某id原处理节点为HASH(id)%N,新的处理节点就变成了HASH(id)% (N +2),可能会将大量id的处理节点打乱重新分配,就会发现之前某节点保存的用户数据用不到了,而新的处理节点根本没有这些数据。在这段时间内,这些用户的状态受到破坏,如果是购物车,车里的东西都没了,如果是缓存服务,之前的缓存都消失了,起不到缓存的效果。可能需要用户重新登录,可能需要从数据库更新缓存,可能由此引入新的问题。
一致性哈希在一定程度上缓解了这个问题,步骤为:
下图中,若某id的HASH值落在node1和node2各自HASH值的中间位置,则此id对应的业务请求由node2处理。
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- tcmalloc编译
- 深入浅出 - Android系统移植与平台开发(十三) - Sensor HAL框架分析之三
- SLM7.1SR1SP05 配置(configuration guide+ link help) - 04 Basic Configuration
- waiting for network configuration
- 职场圣经:你的未来雇主想知道三件事
- 一致性哈希算法
- 怎样用Wizfi250连接Google(HTTP/HTTPS)
- c++ 中 stack 和 queue 的用法
- 关于mysql命令行方式打不开的问题
- S3C2440串口FIFO模式的中断机制和处理策略
- “冷”眼“旁”观二维码:解读二维码的“伪”盈利模式
- 【0-1背包】-HDU-2546-饭卡
- phoneGap在iOS下运行原理简单分析
- 集体智慧编程读书笔记 三 cont