一致性哈希算法
来源:互联网 发布:阿里云备案承诺书模板 编辑:程序博客网 时间:2024/04/30 02:19
一致性哈希算法
(2012-07-21 17:09:28)分布式
一致性哈希
memcache
分类: 技术在分布式系统中,如果某业务可以由多个相同的节点处理,很容易想到用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处理。
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- 一致性哈希算法
- vector 常用函数
- Python操作SQLite/MySQL/LMDB/LevelDB
- VVDocumenter Xcode 插件失效问题
- Android 模拟器启动报错:android failed to open framebuffer ( no such file or directory )
- sizeof(数组名)和sizeof(指针)
- 一致性哈希算法
- 65. Symmetric Tree
- Catch That Cow
- vector:
- nginx 客户端请求大小限制
- atomic 学习记录
- 请求转发与请求重定向的区别
- 通过ValueAnimator实现点击展开和关闭的效果
- Layer::init() 到底做了什么