一个查询String传入入口服务器,入口服务器得知道去哪个服务器的数据库上查找,如果需要全盘搜索所有的服务器,那估计服务器都要疯了。
每传入一个String,通过Hash得到其哈希值,这个哈希值映射一台服务器数据库(因为存储这个String的时候,也是通过Hash这个字符串,然后把它和它对应的内容存入某台服务器)
在分布式环境中,如果某台服务器故障了,那之前的Hash映射就无法再映射到原来那台服务器,于是把数据存储到后面一台服务器,后面这台服务器面临很大的访问压力,为了避免这种情况,一致性哈希算法,为每个物理服务器节点建立很多的虚拟节点,这些虚拟节点均匀地分布在1-2^32的环上,所以,当1台服务器挂掉以后,由于环上有很多虚拟节点,String被映射后,会寻找环上新的节点进行映射。
虚拟节点的作用就是使映射空间变得更均匀,以至于一台服务器挂之后,它的工作量由其他服务器均匀地承担了。当增加一台服务器时候,它也均与地减少了其他服务器的存储压力。