`
cfyme
  • 浏览: 273585 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

一致性hash算法学习

 
阅读更多

一致性哈希算法是分布式系统中常用的算法。比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映射到具体的节点上,如key%N,key是数据的key,N是机器节点数,如果有一个机器加入或退出这个集群,则所有的数据映射都无效了,如果是持久化存储则要做数据迁移,如果是分布式缓存,则其他缓存就失效了。

    因此,引入了一致性哈希算法:

 

分布式缓存设计核心点:在设计分布式cache系统的时候,我们需要让key的分布均衡,并且在增加cache server后,cache的迁移做到最少。

 

Consistent Hashing,一致性哈希算法,他的查找节点过程如下:

 

首先求出memcached服务器(节点)的哈希值,并将其配置到0~232的圆(continuum)上。然后用同样的方法求出存储数据的键的哈希值,并映射到圆上。然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。如果超过232仍然找不到服务器,就会保存到第一台memcached服务器上。

 

 

 

 

五、总结

1、一致性hash算法只是帮我们减少cache集群中的机器数量增减的时候,cache的数据能进行最少重建。只要cache集群的server数量有变化,必然产生数据命中的问题

2、对于数据的分布均衡问题,通过虚拟节点的思想来达到均衡分配。当然,我们cache server节点越少就越需要虚拟节点这个方式来均衡负载。

3、我们的cache客户端根本不会维护一个map来记录每个key存储在哪里,都是通过key的hash和cacheserver(也许ip可以作为参数)的hash计算当前的key应该存储在哪个节点上。

4、当我们的cache节点崩溃了。我们必定丢失部分cache数据,并且要根据活着的cacheserver和key进行新的一致性匹配计算。

 

分享到:
评论

相关推荐

    解决分布式数据插入数据库~一致性hash算法

    分布式数据插入数据库是一个复杂而关键的任务,特别是在大数据和云计算环境下。一致性哈希算法(Consistent...通过对这些资源的深入学习和实践,可以更好地理解和掌握一致性哈希算法在实际应用中的具体操作和性能考量。

    一个根据google maglev 论文,用c语言实现的一致性hash算法.zip

    综上所述,学习并实现"一个根据Google Maglev论文,用C语言实现的一致性哈希算法",不仅需要掌握C语言的基础知识,还需要深入理解一致性哈希的工作原理,以及如何在C语言环境中高效地实现这个算法。通过这样的实践,...

    基于go语言实现的分布式缓存系统源码+项目说明(以键值对的形式存储数据,一致性hash算法选择存储节点).zip

    基于go语言实现的分布式缓存系统源码+项目说明(以键值对的形式存储数据,一致性hash算法选择存储节点,Protobuf通信协议编解码。用户输入查询请求后,会优先在缓存系统查询,查不到则使用回调函数去源数据库查询,...

    Go 实现内存型分布式缓存,基于 lru 缓存淘汰算法和一致性 hash 算法.zip

    简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译...

    实验五:安全Hash算法SHA-1的实现

    ### 安全Hash算法SHA-1的实现 #### 一、Hash函数与数据完整...通过本实验的学习,不仅能够加深对安全Hash算法SHA-1基本原理的理解,还能够在实践中提高编程能力,为后续学习数字签名等高级密码学主题奠定坚实的基础。

    Java语言Consistent Hash算法学习笔记(代码示例)

    一致性哈希算法是一种分布式哈希表(Distributed Hash Table, DHT)的解决方案,它主要应用于分布式缓存、负载均衡等领域。在Java中,一致性哈希算法能够解决节点动态增减时,数据映射关系的稳定性和高效性问题。...

    ufire-springcloud-platform:基于一致性哈希算法实现websocket分布式扩展的尝试,提供模拟停机机演示解决单点故障演示,实现websocket服务的扩展容限。基于jenkins + github hook + docker-compose实现自动化持续部署

    1. **一致性哈希算法**:一致性哈希是一种解决分布式系统中数据分布问题的算法,它的主要特点是能够尽可能地减少数据迁移。在WebSocket服务的分布式扩展中,一致性哈希用于确定每个连接应该路由到哪个服务器,使得在...

    Go-dolphin是一个集成了api网关服务发现请求限流一致性hash路由

    它整合了API网关、服务发现、请求限流、一致性哈希路由和服务调度等多种功能,旨在简化中小团队在微服务开发过程中的复杂性,提高开发效率,并确保系统稳定性和性能。 首先,让我们深入了解API网关。API网关是...

    hash算法.docx

    哈希(Hash)算法,又称为散列算法,是一种用于数据校验和高效查找的数学方法。在IT领域,哈希算法扮演着至关重要的角色,特别是在数据存储、网络安全、数字签名以及区块链技术等方面。以下是对哈希算法的详细阐述:...

    MD5 Hash 算法

    MD5的主要用途是校验数据的完整性和一致性,比如在文件传输、密码存储和数字签名等领域。 MD5的工作原理基于密码学中的“单向函数”概念,即容易计算输入得到输出,但难以根据输出反推输入。它通过一系列复杂的数学...

    Hash-MD5算法(C语言实现,附带Hash验证工具)

    此外,附带的7个Hash验证工具可能是为了方便用户检验MD5值的正确性,它们可能有命令行接口,接受输入的MD5摘要和文件路径,然后比较计算出的MD5值是否一致。 在使用MD5算法时,需要注意其安全性问题。由于MD5碰撞...

    分布式设计与开发基础 - 博客频道 - CSDN1

    ### 一致性Hash算法 一致性Hash是另一种解决分布式系统中数据分片和负载均衡的问题。传统的哈希算法可能导致负载不均,而一致性Hash则通过虚拟节点和环形空间的概念,使得在节点增减时,只影响少数数据的映射关系,...

    Hash Generator

    "Hash Generator"是一个用于生成和验证数据哈希值的软件工具,主要用于检查数据的完整性和一致性。在文件传输、存储和校验过程中,哈希值被广泛使用来确保数据未被篡改。 标题中的"Hash Generator"指的就是这样的...

    计算文件HASH值工具

    本文将深入探讨这个主题,包括HASH值的概念、其作用以及如何使用不同的算法,如CRC32、SHA1、SHA256、SHA384和SHA512来计算文件的哈希值。 **HASH值(哈希值)**是一种将任意长度的数据转化为固定长度输出的函数...

    分布式算法习题参考答案.zip

    本压缩包"分布式算法习题参考答案.zip"包含了对分布式算法相关习题的解答,这些习题可能涵盖了分布式计算的基础概念、一致性模型、分布式数据管理和同步协议等多个方面。 1. **基础概念**:分布式算法首先要理解的...

    md5_hash.rar_hash_md5_hash

    MD5的主要目的是确保数据的完整性和一致性,但请注意,由于碰撞攻击的存在,MD5已不再适合用于安全认证。 2. **MD5的四个步骤**:MD5算法主要包括四个步骤:初始化、处理消息块、压缩函数和结果的二进制到十六进制...

    Go-Tedis是一个基于TiKV的强一致性的兼容redis协议的NoSQL数据库

    TiKV利用了Raft一致性算法来保证在分布式环境中的数据强一致性,确保在节点故障时数据不会丢失。此外,TiKV还支持水平扩展,可以轻松地通过添加更多的节点来提升存储和处理能力。 Go-Tedis则是在TiKV之上构建的,它...

    leetcodelrucache-algorithm:算法学习和练习

    一致性Hash算法 algorithm.cap algorithm.subset 给一个set打印出所有子集 jdk jdk 知识 jdk.autoboxing 自动装箱拆箱 jdk.longaccumulator 计数器 jdk.threadlocal DateFormatService: 如何线程安全的使用 ...

Global site tag (gtag.js) - Google Analytics