一致性Hash算法
一致性Hash算法,是分布式系统算法分配服务器资源,让资源在系统间均匀分布的一个很重要的概念。
此章我们采取循序渐进的方式进行讲解,致力于小白也能轻松理解掌握。
1.分布式缓存服务器资源分配(hash算法)
有四台分布式缓存服务器,需要把图片资源均匀分布到这几台服务器上,采用 “图片对应的hash值对总的机器数进行取模”(0—机器数范围),根据模 映射图片储存服务器。
取图片时,因为同一个名称,做相同的hash计算得到的hash值是不变的,用相同的hash值进行取模,反过来就得到了存储图片的服务器,就实现了缓存服务器的访问。
存在问题:当增加一台或多台缓存服务器时,机器数变化,即取模的除数变化,导致先前存储的图片,经过hash计算得到的服务器不准确,照成大量访问后端服务器的情况,存在压垮服务器的风险
此时就需要引入一致性hash算法
2.一致性hash算法
一致性hash算法采用取2^32,控制除数的方法,将所有的服务器和数据的一个映射都模拟在一个数据环上面,将数据和服务的映射都采用相同的基数取模,顺时针定位最近节点,的方式,进行资源的均匀分发。
此时,我们来分析1中出现的增加服务器问题。
在环中增加D服务器后,受影响的资源中只有a2.jpg的读取会收到影响,其他绝大多数的资源都是能正常获取的,这就解决了1中缓存资源全部都读取不到的问题你
存在问题:hash倾斜,往往我们服务器地址会存在连续,使用hash环得到服务器分配可能集中在几个段,此时对资源的分配也不是均匀的
增加真实服务器对应的虚拟节点,根据数据映射到的虚节点,再进行真实服务器的对应,便可完美解决此种问题。
这就是一致性hash算法的在分布式服务器资源分配中的应用。