一致性哈希和哈希槽使用场景对比
一致性哈希和哈希槽是分布式缓存集群系统常用的两种算法,本文不会再介绍这两种算法,感兴趣的可以阅读参考博文。本文想在此基础上分析下两种算法使用场景的差异。
在参考博文4中给了一个示例:
上图为一致性hash算法中的四个节点A、B、C、D,现在假设B失效了:
文中提到:如果B失效了,那么如果有持久化存储的,需要做数据恢复,将B的数据迁移至C即可,对于原本散列在A和D的数据,不需要做任何改变。
这里,个人感觉单纯的一致性哈希算法不适合作为需要持久化存储的集群算法,原因有二:
第一,如果一台机器失效了,往往意味着无法与其建立通讯,又如何能做自动的数据迁移?
第二,数据迁移需要时间,如何保证迁移期间缓存集群的可用性?
因而个人认为,单纯的一致性哈希算法比较适合做内存存储的集群缓存算法。当机器失效后,机器上的缓存数据直接“丢失”,当该机器上原本缓存的数据被请求时,会从数据源重新获取数据,并将数据添加到失效机器后面的机器(示例中的C)。当然,这个过程即所谓的“缓存抖动”。
相反,哈希槽算法倒适合做持久化存储的集群缓存算法,因为哈希槽是采用一主多从的机制,master宕机之后,slaver机器会顶上,因而不存在数据丢失。哈希槽算法的图示如下:
另外,哈希槽算法实现比一致性哈希算法相对简单,而一致性哈希算法的灵活性相对更高。
最后,我想说的是,其实完全可以将一致性哈希算法和哈希槽进行融合,利用哈希槽的优点弥补一致性哈希的不足:在一致性哈希的示例中,A、B、C、D是四台单独的机器,而如果我们将A、B、C、D都改成由类似哈希槽的主从机制,那么改造的一致性哈希算法也可以用于做持久化存储的集群算法。
参考博客:
1. https://www.jianshu.com/p/fa623e59fdcf 哈希槽
2. https://www.jianshu.com/p/4163916a2a8a 一致性哈希和哈希槽对比
3. https://www.cnblogs.com/xifenglou/p/9173419.html Redis Cluster集群
4. https://www.cnblogs.com/color-my-life/p/5799903.html 一致性哈希算法
5. http://www.zsythink.net/archives/1182 白话解析:一致性哈希
6. https://www.jianshu.com/p/ccb17daed766 深入理解tair
7. https://www.jianshu.com/p/84dbb25cc8dc 深入剖析Redis - Redis集群模式搭建与原理详解
相关文章
- 金融服务领域的大数据:即时分析
- 影响大数据、机器学习和人工智能未来发展的8个因素
- 从0开始构建一个属于你自己的PHP框架
- 如何将Hadoop集成到工作流程中?这6个优秀实践必看
- SEO公司使用大数据优化其模型的5种方法
- 关于Web Workers你需要了解的七件事
- 深入理解HTTPS原理、过程与实践
- 增强分析:数据和分析的未来
- PHP协程实现过程详解
- AI专家:大数据知识图谱——实战经验总结
- 关于PHP的错误机制总结
- 利用数据分析量化协同过滤算法的两大常见难题
- 怎么做大数据工作流调度系统?大厂架构师一语点破!
- 2019大数据处理必备的十大工具,从Linux到架构师必修
- OpenCV中的KMeans算法介绍与应用
- 教大家如果搭建一套phpstorm+wamp+xdebug调试PHP的环境
- CentOS下三种PHP拓展安装方法
- Go语言HTTP Server源码分析
- Go语言HTTP Server源码分析
- 2017年4月编程语言排行榜:Hack首次进入前五十