《一致性哈希算法的优化.docx》由会员分享,可在线阅读,更多相关《一致性哈希算法的优化.docx(3页珍藏版)》请在优知文库上搜索。
1、一致性哈希算法的优化一关于如何保正在环中增加新节点时,命中率不受影响背景09年初,我们做了一个memcached的智能客户端库,业务只要将这个库链上,就能跟memcached服务器通信。并且实现了一致性哈希的分布式算法,后端memcached服务器可以无限制扩展,而且客户端能对memcached做自动故障转移以及恢复。我们知道,在没有对数据做冗余存储的情况下,无论是一致性哈希还是求余数分布式算法,在新增或删除memcached节点时,命中率都会不同程度的降低。本文旨在解决当新增memcached节点时,如何保证命中率不变。基本原理当新增一个memcached节点时,将该新节点的下一个节点的且属
2、于该新节点的数据迁移过来。上面的这个基本原理读起来可能会比较拗口,容我下面详细说明。原理描述如图1所示,假设当前哈希环上有n个memcached节点,记为MJM”,存储到这些节点上的数据的有效期都是一致的,记为T。因此从图1可以看出,从H到4区间的数据均从Mk上存取。比如数据Kl,K2,Kno图1当新增节点M、时,如图2所示。此时数据K,a从新节点MX读取不到的,但节点Mk存储了这些数据,我们需要做的就是将这些数据迁移到新节点Mo具体做法是:将新加入的节点Ml标记为N(New)状态,表示该节点是新增的。在N状态下读取数据Kl的步骤为:1)从此读取数据,如果读取得到,则返回,否则进行2);2)从Mk读取数据,如果读取不到,则返回,否则进行3);3)将读取到的数据K1写入此;4)将Ki从强删除;在N状态下,不断进行上面的4个步骤因为数据的有效期是T,所以在经过T.时间后,Mk上的数据随之自动失效了,此时将扎标记为O(Old)状态,在0状态下,如果读取不到数据也立即返回,无需再次到它下一个节点尝试读取。