1.基本概念
一致性哈希算法在很多领域有应用,例如分布式缓存领域的 MemCache,Redis,负载均衡领域的 Nginx,各类 RPC 框架。在移除或者添加一个服务器时,一致性哈希算法能够尽可能小地改变已存在的服务请求与处理请求服务器之间的映射关系。一致性哈希解决了简单哈希算法在分布式哈希表中存在的动态伸缩等问题。
2.特点
一致性哈希算法有以下的特点:
- 1.均衡性。均衡性是指哈希的结果能够尽可能分布到所有的缓冲节点中去,这样可以使得所有的缓冲空间都得到利用。很多哈希算法都能够满足这一条件。
- 2.单调性。单调性是指当缓冲区大小变化时一致性哈希尽量保护已分配的内容不会被重新映射到新缓存区,来减少大量的重新hash提高性能。
- 3.分散性。在分布式环境中,终端有可能看不到所有的缓存,而是只能看到其中的一部分。当终端希望通过哈希过程将内容映射到缓存上时,由于不同终端所见的缓冲范围有可能不同,从而导致哈希的结果不一致,最终的结果是相同的内容被不同的终端映射到不同的缓冲区中。这种情况显然是应该避免的,因为它导致相同内容被存储到不同缓存中去,降低了系统存储的效率。
- 4.负载。好的哈希算法应能够尽量降低缓冲的负荷。
3.分布式缓存应用
我们从一个具体场景来看:redis 是如何使用一致性 hash 算法保证缓存命中率、容错性和可扩展性的。
- 1.首先求出 redis 服务器(节点)的哈希值,并将其配置到 0 ~ 2的32次方 的圆(continuum)上。
- 2.然后采用同样的方法求出存储数据的键的哈希值,并映射到相同的圆上。
- 3.