一致性hash可以最大限度的降低对原来格局的改变,在缓存和分库分表等技术中比较常用。那么什么是一致性hash呢,举个例子就明白了,简单明了:
沿着学校操场跑道(400米一圈)分布着一些提供饮水的地方,你沿着跑道不停的顺时针跑啊跑,当你渴的不行的时候,你是不是要跑到下一个距离你最近的救济站喝水;假如和你一样跑步的人越来越多,人很多都布满了整个跑道,恰巧大家同时都想喝水了,那么我即便是撤掉或者添加一些救济站的话,是不是也只影响那么一小小部分的人选择救济站呢,距离大部分人顺时针方向最近的救济站的位置并没有变,也就是喝水的位置没有变。
一致性hash就是这个原理,不用画图你就可以理解的透透彻彻。但是为了有个深刻的印象呢,咱们也提供一个图。
那么这样的技术有什么实际应用场景呢,nginx我相信大家应该都熟悉,ngx_http_upstream_consistent_hash模块就是使用一致性hash算法来为请求选择合适的后端节点,该模块可以根据配置参数采取不同的方式将请求均匀映射到后端机器,比如:
consistent_hash $remote_addr:就是根据客户端IP进行一致性hash映射;
如果恰到遇到一后台服务down了,但是用户登录状态又没有在集群中共享,那么也就只有原来映射到这台机器的登陆状态丢失,其他的不受影响,从而降低影响。
除此之外在分库分表中的应用可以使每个库的数据比较均衡,在数据量到达一定程度的时候又可以动态的增加数据库。
至此,一致性hash原理你了解了吗?你会用了吗?欢迎评论区吐槽留言。
欢迎大家关注我,不定期分享互联网相关技术,互相交流学习!