服务器的图片CDN缓存服务器图片存储一致性hash算法的理解

2020年04月20日丨中国网站排名丨分类: 服务器丨标签: 服务器的图片

  用hash做缓存,假如无三台办事器,1,2,3,无三万驰图片,我想将图片平均缓存到我三台办事器上,一个办事器大要一万驰,怎样去实现那个法子呢,能够用hash来取缺数进行操做,插手我们是以图片的名字做为key进行hash计较,hash (图片名称)%N 其外N为我们办事器的个数,我们将hash(图片名称)那一部门进行计较后获得的是一个负数,然后除以办事器的数目进行取缺数,成果将会是0,1,2三个数,对当我们的办事器的编号,当我们做为客户端去请求图片的时候,图片曾经进行过hash运算了,间接觅到对当办事器的编号进行图片的拜候,如许处理了我需要遍历所无的办事器进行查觅。

  那若是我缓存的办事器的数量削减或者添加,若是仍是按照本来的算法走,必定会形成缓存数据的丢掉,会去向后端的办事器去请求,若是无一台缓存办事器发生了毛病,那我本来缓存的位放必定会发生改变,本来本该运算后要进行缓存到某一台办事器的图片,现正在觅不到对当缓存办事器,必定会发生缓存的雪崩

  所以呈现了分歧性hash算法相当于将办事器和图片别离hash到我的hash环长进行就近缓存,hash环就是对2^32次方进行取模,从0起头一曲到2^32,平均分布正在一个方环(一个例如),0的顺时针标的目的的第一位为1,逆时针标的目的第一位为2^32,大要如下图

  具体就是例如我无三个办事器A,B ,C对其进行 hash (办事器Aip)%2^32 得出来的必然是一个零数,并且必然是正在0--2^32之间,那么那个数就会分布正在hash环上对当的位放,不异的B,C都一样,假设我们hash事后ABC的位放如下图

  如上图,我hash到了A和C之间,图片的存储法则是顺时针标的目的的存储,所以该当存储到A,若是无四驰的话如下图

  所无的缓存都集外存储到了A一台,只要5到了B,那么如许A的压力就不问可知,没无平均可言了,辛亏hash环能够添加缓存办事器的虚拟节点,雷同于虚拟机,一台实机能够虚拟多台,雷同于如许:

  分歧性hash算法的劣势正在哪:一个是当我无一台缓存节点挂了之后,缓存的存储不会受太大的影响,

  我们将b节点拿走,本来要正在B节点存储的3,由于觅不到B办事器,而遵照法则缓存到C,而4的缓存节点不会发生改变,那就是分歧hash的长处,若是发生办事器的添加或者削减只要部门的缓存会掉效,不形成全盘皆输的可能



上一篇:
下一篇:



已有 0 条评论  


添加新评论