Nginx-牛掰的一致性hash算法-工作原理

第一步

1、先把uri做hash(index.html)运算,得出一个值来,
2、这个值对2^32取模,意味着,它的值处于2^32-1的范围,这个范围我们称为“hash环”
3、对index.html 做hash运算取模得出一个值,比如是6,它存在于这个环的6号位置,
4、下次访问index2.html做运算得出16,存在环中16位置,(用户访问的越多,分别存在在hash环中不同的位置)

第二步

1、varnish服务器是有ip地址的,图中3个varnish服务器A、B、C,根据每一个都有权重,根据权重计算,
2、首先,对A机器IP做hash(ipA)运算,得出一个值,同样2^32取模,假设得出10,落在了hash环某位置,
3、B机器,因为权重是2,随机生成两个数和ip相加,即,IPB1、IPB2,接着对,IPB1和IPB2分别做hash运算,同样,算出来后对2^32取模,落在了hash环不同的位置。
4、C机器同样,只是分成了三个IPC1、IPC2、IPC3,取模落在不同的位置。
这时就有6个varnish服务器值标记在了hash环中,
5、上面用户请求算出的值是6,它就会在hash环中顺时针往下找,找到离他最近的varnish服务器值10,
6、是A机器算出的值,它就会用A主机来给你提供服务,
7、如何A主机宕机了,在hash环中10号标记位失效了,它会往下找,找到B,它来承担之前A主机的工作。
备注:为了防止hash环的偏斜,权重值×100或1000、10000,让它均匀

 

 

 

 

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注