`

一致性HASH的记录

    博客分类:
  • JAVA
阅读更多

下面是相关内容的连接

 

http://lishuaibt.iteye.com/blog/609364

 

http://sebug.net/paper/databases/nosql/Nosql.html

 

大概理解总结了下

 

 

一致性hash

 

1:集群CACHE的命中问题

例如原有4台CACHE服务器编号为:0,1,2,3

用户数据按照hash(用户ID) mod 4 分别存在4台服务器上

1 mod 4 = 1

2 mod 4 = 2

3 mod 4 = 3

4 mod 4 = 0

5 mod 4 = 1

6 mod 4 = 2

...

 

在CACHE服务器不出现问题或是不需要增加服务器的情况下上述解决方案工作正常

当需要添加一台服务器5的时候问题就来了

 

因为现在的N变成了5,那么

1 mod 5 = 1

2 mod 5 = 2

3 mod 5 = 3

4 mod 5 = 4

5 mod 5 = 0

6 mod 5 = 1

...

 

那么hash(用户ID)=5和6的数据所在的服务器位置发生了变化,也就是说需要重新计算用户所在CACHE服务器

的位置,严重的需要进行数据迁移等等操作。

 

2:一直性HASH的出现

为了尽量解决这种问题(可能不能完全避免),用一致性HASH能相对大的程度解决问题

2^32的闭环上将4台服务器也用hash算法计算出hash值顺时针分布在该环上

 

(2)访问方式

如果有一个写入缓存的请求,其中Key值为K,计算器hash值Hash(K), Hash(K) 对应于图 - 1环中的某一个点,如果该点对应没有映射到具体的某一个机器节点,那么顺时针查找,直到第一次找到有映射机器的节点,该节点就是确定的目标节点,如果超过了2^32仍然找不到节点,则命中第一个机器节点。比如 Hash(K) 的值介于A~B之间,那么命中的机器节点应该是B节点(如上图 - 1)。

 

(3)增加节点的处理

如上图 - 1,在原有集群的基础上欲增加一台机器F,增加过程如下:

计算机器节点的Hash值,将机器映射到环中的一个节点

增加机器节点F之后,访问策略不改变,依然按照(2)中的方式访问,此时缓存命不中的情况依然不可避免,不能命中的数据是hash(K)在增加节点以前落在C~F之间的数据。尽管依然存在节点增加带来的命中问题,但是比较传统的hash取模的方式,一致性hash已经将不命中的数据降到了最低。

分享到:
评论

相关推荐

    对一致性Hash算法,Java代码实现的深入研究1

    【一致性Hash算法】是一种分布式系统中用于负载均衡的哈希算法。它的主要目的是解决当服务节点增加或减少时,能够尽量少地改变已有的请求分配,以保持系统的稳定性。在传统的哈希算法中,增加或删除一个服务器可能...

    省级业务运营支撑系统(BOSS)业务技术规范(3.0版)-数据一致性管理机制总体规范分册

    《省级业务运营支撑系统(BOSS)业务技术规范(3.0版)》是一份针对中国省级业务运营支撑系统的详尽技术指南,其中的“数据一致性管理机制总体规范分册”部分,着重阐述了如何在复杂的业务环境中确保数据的准确性和...

    PHP实现的服务器一致性hash分布算法示例

    服务器一致性hash分布算法是一种用于分布式系统中,将键(Key)映射到服务器节点的算法。这种算法的主要目的是为了提高系统的可扩展性和可靠性,通过将键均匀分布到不同的服务器上,可以减少由于节点增减造成的频繁...

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

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

    Hash校验工具_记录不同文件版本

    "Hash校验工具"就是这样一个工具,它专为记录不同文件版本而设计,帮助用户高效地管理和查询编程文档的变更历史。 Hash,全称为哈希(Hash)或散列(Hash),是一种将任意长度的输入数据转化为固定长度输出的算法。...

    Hash工具,小巧绿色hash校验工具,免费hash工具

    在实际应用中,你可以使用这款哈希工具来验证下载的软件、系统镜像或者其他重要文件是否与原始发布者提供的哈希值一致,从而避免了下载到被篡改或者包含恶意代码的文件。此外,它也可以用于定期检查本地存储的文件,...

    一个分布式文件系统文件元数据管理系统,利用一致性HASH来做分布式查找,支持MYSQL存储元数据。.zip

    这些系统通常被设计用来提高效率、减少错误、加强安全性,同时提供数据和信息支持。以下是一些常见类型的管理系统: 学校管理系统: 用于学校或教育机构的学生信息、教职员工信息、课程管理、成绩记录、考勤管理等...

    Check两条数据的一致性

    在IT行业中,数据一致性是确保系统正确性和可靠性的重要因素。特别是在数据库管理、数据分析以及软件开发等领域,检查数据一致性是常见的任务。在这个场景中,我们关注的是如何使用C#语言来检查两条数据的一致性。C#...

    Hash校验工具

    - **备份验证**: 在做数据备份时,可以记录下源文件的哈希值,以便在恢复时确认备份文件的完整性。 - **云存储安全**: 在云服务中,用户可以通过哈希校验确保上传和下载的文件保持一致,防止数据被意外修改。 5. ...

    基于hash的图像检索软件

    7.得到信息指纹:组合64个信息位,顺序随意保持一致性即可。 8.对比指纹:计算两幅图片的指纹,计算汉明距离(从一个指纹到另一个指纹需要变几次),汉明距离越大则说明图片越不一致,反之,汉明距离越小则说明图片...

    集群应用Session一致性实现的三种方案

    本文将详细探讨在应用集群环境下如何保证Session一致性,并介绍三种常见的实现方案。 首先,Session的简单介绍如下:在WEB开发中,服务器为每个用户浏览器创建一个会话对象,通常一个浏览器独占一个Session对象。...

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

    传统的哈希算法可能导致负载不均,而一致性Hash则通过虚拟节点和环形空间的概念,使得在节点增减时,只影响少数数据的映射关系,降低了对整体系统的影响。 #### 应用场景 一致性Hash常用于分布式缓存(如Memcached...

    在SQL中操作Redis或者Redis集群,达到Redis与MySQL的数据一致性.zip

    5. 哈希(Hash):类似MySQL的记录,键值对形式存储,适合存储对象。 三、Redis集群与MySQL的数据一致性 在Redis集群中,数据分布在多个节点上,为保证数据一致性,通常采用主从复制或一致性哈希策略。当在SQL中操作...

    用于内存数据库的Hash索引的设计与实现

    此外,还要考虑并发控制和事务处理,保证多用户环境下数据的一致性和完整性。 对于内存数据库的Hash索引,通常会采用开放寻址法或链地址法来解决哈希冲突。开放寻址法是当发生哈希冲突时,寻找下一个未被占用的槽位...

    0Hash校验工具

    总之,0Hash校验工具是保障数字信息安全的重要工具,它利用哈希算法确保了文件的完整性和一致性,是下载者和IT管理员的得力助手。使用0Hash,用户可以放心地下载和分享文件,确保每个文件都准确无误。

    HASH运算结果

    CRC32在文件传输和网络通信中常用来校验数据的完整性和一致性。 ### 文件验证与哈希值的作用 文件的哈希值在多个方面起着至关重要的作用: 1. **数据完整性检查**:通过比较文件的哈希值,可以验证文件是否在传输...

    文件校验工具 CRC32 MD5 HASH校验码自动计算工具

    在收到新文件或怀疑文件被篡改时,只需通过这个工具快速对比校验码,即可判断文件是否一致。 使用该工具的过程通常如下: 1. 下载并运行“文件校验工具.exe”。 2. 选择需要校验的文件或拖放文件到工具界面。 3. ...

    MD5.c.zip_hash_md5_md5 hash_md5_hash_woodennfx

    这种特性使得MD5常被用于验证数据的完整性和一致性,比如在软件下载、文件传输等场景中,通过比较文件的MD5值来确认文件是否在传输过程中被篡改。 描述中的“MD5生成hash序列”反复提及,暗示了这个程序或者代码段...

    一款很实用的HASH值计算工具

    HashCalc是一款非常实用的此类工具,它能够帮助用户快速计算出文件的哈希值,确保数据的准确性和一致性。哈希函数是一种特殊的算法,它可以将任意大小的数据转化为固定长度的输出,这个输出就是哈希值。哈希值的特点...

    PostgresChina2018赖思超PostgreSQL10hash索引的WAL日志修改版final.pdf

    - PostgreSQL 10版本中Hash索引的WAL日志支持,提高了Hash索引的可用性,使得即使在崩溃恢复场景下也能保证数据的一致性。 - 新特性的引入是为了解决原有版本中Hash索引未被WAL记录导致的不一致问题,以及在系统崩溃...

Global site tag (gtag.js) - Google Analytics