• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

XiaoXiaoli

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

算法_一致性hash算法

分布式缓存的应用场景,了解了这个场景后我们就知道为什么要使用一致性hash算法。

 

1 分布式缓存

  假设我们有3台服务器,分别为S0、S1、S2。

  我们有图片需要缓存,图片最好能够均匀的缓存到每台服务器上。

  我们实现该功能,对缓存下来的key进行hash计算,hash后的值是一个整数,根据服务器的数量对这个整数进行取模计算,使用取模产生的余数来决定数据应该缓存在哪一台服务器上。

 

  我们将这个过程写成一个公式:hash(名称)%机器数=余数

  假设我们有三台机器,那么取模的结果就有三种情况,0、1、2,正好与服务器的编号对应。

  对同一个名称进行hash计算,其值是不变的。

 

  hash算法,有一个缺陷,如果此时需要增加一台服务器,缓存服务器的数量就变成了4台,此时余数就会不同,那么此时访问服务器的编号就会改变。

  这里由于服务器数量变化,所以导致访问数据的有问题。

 

 

2 一致性hash算法的原理。

  有一个2的32次方的环(hash环),假设我们还是有3台服务器,hash(A)%2的32次方 = 结果。这个结果一定是0-2的32次方的整数,我们用这个整数代表服务器A,可以将这个服务器映射到hash环上。

  

3 一致性hash算法解决hash算法的问题

  假设我们有一个服务器D,先把服务器映射到hash环上。

 

4 一致性hash算法的优点。

  如果服务器的数量发生变化,并不是所有的缓冲会失效。

5 一致性hash算法的缺陷

  hash偏斜。

  导致缓冲不均匀,这里解决方法尽可能多的服务器,增加一些虚拟节点。

 

 

 

  

 

posted on 2021-09-11 19:30  XiaoXiaoli  阅读(67)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3