一致性hash环
一致性hash算法通过一致性hash环的数据结构来试下,环的起点是0,终点是2^32-1,起点于终点链接。
把服务器,对象放到环上
比如有四台服务器,把四台服务器ip经过hash算法后,放到环上。再把缓存的对象hash后也放到环上
为对象选择机器
对象在环上的点,顺时针找到第一台机器,就把该对象缓存到这台服务器上。见下图
java 代码实现
1 | package com.yahuifan.springbootwebjspsample; |
执行结果:
缺陷
如果hash环上的服务器分配不均,会导致各个缓存服务器的负载相差较大
解决方案
利用虚拟节点的方式,给每个服务器映射多个虚拟节点,然后进行hash,放到hash环上,解决各个服务器的负载均衡
Java 代码实现:
1 | package com.yahuifan.springbootwebjspsample; |
结果:
总结
一致性哈希算法解决了分布式环境下,服务器增加或者减少,简单的取模运算无法获取较高的命中率的问题,通过虚拟节点的使用,让各个服务器的负载相对于均衡。