解决问题
解决单机的压力,让多机进行压力负载。
原理
hash范围为0- 2 32 − 1 2^{32}-1 232−1,可以把这个范围看作为一个圆环,将多台机器通过hash算出机器在圆环中的位置,当request进行put或get,只需要进行对key进行hash,然后寻找离当前hash值最近的机器,进行put或get。
实现方式
可以利用一个数组,将机器的ip进行hash,然后排序。当request时,通过对key进行hash,然后查找离数组最近的那个ip的hash的数组下表即可。(多台服务器用的是相同hash函数)
出现问题
①当机器数量小时,机器在环中位置,分布不均。
②多台机器负责的部分负载不均。
③当有机器追加或者移除时,只影响一台机器,其他机器无影响。(虽然数据迁移代价很低了)
解决方式
利用虚拟节点技术,将虚拟节点代替环中的机器,当有key命中虚拟节点,然后通过查询路由表,找到真实机器的地址。