Hash和一致性Hash算法

Hash

    Hash无论是数据结构还是分布式缓存,都有应用。Hash更确切的说是hash函数,是一个集合的数据到另一个集合内数据的一个映射。被映射方在数学里面叫做原象,这里我们叫做数据,映射到的叫象,这里我们称作槽。


    分布式缓存服务器和应用服务器的区别在于,应用服务器中的所有服务器都部署着相同的应用,而缓存服务器集群中不同的机器中存放着不同的缓存,因为缓存的访问请求不能再几种中任意一台服务器上处理,必须先找到数据所在的服务器,才能访问。由此可以看出,在上述的分布式缓存系统中,对于服务器集群的管理、路由算法决定着缓存服务器的定位,起到了至关重要的作用。 


简单的Hash取模算法:


    使用缓存Key的hash值与服务器数目取模获得服务器列表下标编号。由于HashCode的随机性,这样可以很轻松的保证缓存数据在整个服务器集群均匀分布。

    由于网站架构必须要考虑集群的伸缩性,对于缓存服务器来说,必须在新上线缓存服务器或是下线已有服务器时使集群中已经缓存的数据尽可能还被访问到。

    由于简单的Hash取模算法,上述目标是无法实现的。比如当四台服务器扩展到5台的时候,由于所有数据都要重新做Hash取模运算,大约80%的缓存数据会被被迁移,当有100太服务器时,这个比例将高达99%。

    当大部分缓存数据因为服务器下线/扩容而不能正常读取的时,缓存将被击穿而数据访问压力会落在数据库上面,这将大大的超过数据库的负载能力,严重的甚至会引起数据库宕机


一致Hash算法:

    为了解决上述问题,必须通过改进路由算法,使得服务器集群扩容/下线机器时大部分缓存的数据仍然能够正确命中


你可能感兴趣的:(Hash和一致性Hash算法)