一致性哈希(consistent hash)

暴雪hash murmurhash3 cityhash 性能对比 前些天要写一个小功能,想到了之前看到的暴雪hash,同事推荐murmurhash,于是写了点简单的代码测试了一下。后来在网上又找到了cityhash,于是加了进去测了一下。 结论:暴雪hash算法  murmurhash64A算法 cityhash算法中,性能最高的是cityhash算法 cityhash网址:https://github.com/google/cityhash  linux可 阅读详情

设计目标是为了解决因特网中的热点(Hot spot)问题

一致性哈希提出了在动态变化的Cache环境中,哈希算法应该满足的4个适应条件:
平衡性(Balance)
平衡性是指哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得所有的缓冲空间都得到利用。很多哈希算法都能够满足这一条件。
单调性(Monotonicity)
单调性是指如果已经有一些内容通过哈希分派到了相应的缓冲中,又有新的缓冲区加入到系统中,那么哈希的结果应能够保证原有已分配的内容可以被映射到新的缓冲区中去,而不会被映射到旧的缓冲集合中的其他缓冲区。(这段翻译信息有负面价值的,当缓冲区大小变化时一致性哈希(Consistent hashing)尽量保护已分配的内容不会被重新映射到新缓冲区。)
简单的哈希算法往往不能满足单调性的要求,如最简单的线性哈希:
x → ax + b mod (P)
在上式中,P表示全部缓冲的大小。不难看出,当缓冲大小发生变化时(从P1到P2),原来所有的哈希结果均会发生变化,从而不满足单调性的要求。
哈希结果的变化意味着当缓冲空间发生变化时,所有的映射关系需要在系统内全部更新。而在P2P系统内,缓冲的变化等价于Peer加入或退出系统,这一情况在P2P系统中会频繁发生,因此会带来极大计算和传输负荷。单调性就是要求哈希算法能够应对这种情况。
分散性(Spread)
在分布式环境中,终端有可能看不到所有的缓冲,而是只能看到其中的一部分。当终端希望通过哈希过程将内容映射到缓冲上时,由于不同终端所见的缓冲范围有可能不同,从而导致哈希的结果不一致,最终的结果是相同的内容被不同的终端映射到不同的缓冲区中。这种情况显然是应该避免的,因为它导致相同内容被存储到不同缓冲中去,降低了系统存储的效率。分散性的定义就是上述情况发生的严重程度。好的哈希算法应能够尽量避免不一致的情况发生,也就是尽量降低分散性。从表面上看,一致性哈希针对的是分布式缓冲的问题,但是如果将缓冲看作P2P系统中的Peer,将映射的内容看作各种共享的资源(数据,文件,媒体流等),就会发现两者实际上是在描述同一问题。
负载(Load)
负载问题实际上是从另一个角度看待分散性问题。既然不同的终端可能将相同的内容映射到不同的缓冲区中,那么对于一个特定的缓冲区而言,也可能被不同的用户映射为不同的内容。与分散性一样,这种情况也是应当避免的,因此好的哈希算法应能够尽量降低缓冲的负荷。
从表面上看,一致性哈希针对的是分布式缓冲的问题,但是如果将缓冲看作P2P系统中的Peer,将映射的内容看作各种共享的资源(数据,文件,媒体流等),就会发现两者实际上是在描述同一问题。


一致性哈希算法(Consistent Hashing) 在我们的web开发应用中的分布式缓存系统里哈希算法承担着系统架构上的关键点。使用分布更合理的算法可以使得多个服务节点间的负载相对均衡,可以最大程度的避免资源的浪费以及服务器过载。使用一致性哈希算法,可以最大程度的降低服务硬件环境变化带来的数据迁移代价和风险,更合理的配置策略和算法可以使分布式缓存系统更加高效稳定的为我们整体的应用服务。 阅读详情

相关推荐

从工程实践的角度理解一致性哈希算法(Consistent Hashing)

一致性哈希算法

孤傲小二~阿沐的博客 8343

murmurhash-js, MurmurHash算法的优化JavaScript实现.zip

murmurhash-js, MurmurHash算法的优化JavaScript实现 MurmurHash.jsMurmurHash算法的优化JavaScript实现。这些算法采用一个JavaScript字符串( 还有种子),并快速创建一个非加密的32位 散列。 我的意思是亚毫秒性能。有关这些算法的更多信息可以在以下

一致性哈希算法 consistent hashing

场景描述 一致性哈希算法的基本概念 一致性哈希算法的优点 hash环的偏斜 虚拟节点

1786

高运算性能,低碰撞率的hash算法MurmurHash算法.zip

MurmurHash算法由Austin Appleby创建于2008年,现已应用到Hadoop、libstdc 、nginx、libmemcached,Redis,Memcached,Cassandra,HBase,Lucene等开源系统。2011年Appleby被Google雇佣,随后Google推出其变种的CityHash算法。 官方网站:https://github.com/aappleby/smhasherMurmurHash算法,自称超级快的hash算法,是FNV的4-5倍。官方数据如下: OneAtATime – 354.163715 mb/sec FNV – 443.668038 mb/sec SuperFastHash – 985.335173 mb/sec lookup3 – 988.080652 mb/sec MurmurHash 1.0 – 1363.293480 mb/sec MurmurHash 2.0 – 2056.885653 mb/sec 但也有文章声称,只有当key的长度大于10字节的时候,MurmurHash的运算速度才快于DJB。“从计算速度上来看,MurmurHash只适用于已知长度的、长度比较长的字符”wiki地址:https://en.wikipedia.org/wiki/MurmurHash 标签:hash

MurmurHash算法

MurmurHash(multiply and rotate) and (multiply and rotate) Hash,乘法和旋转的hash 算法。

Jokers_lin的博客 4784

MySql索引深入学习

1.数据库中索引概念 在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。 2.索引优点和缺点 1>优点 索引可以避免全表扫描,加快查询速度。多数查询可以仅扫描少量索引页及数据页,而不是遍历所有...

spring_root的博客 348

Google Jump Consistent Hash 一致性哈希算法

接触到这个一致性哈希算法是在腾讯音乐的讲座中,用于在线扩容 如图中的例子,本来只有group0和group1,现在要增加一个group2用于推送新的数据,如果使用不满足单调性要求的hash方法,首先向group2推送数据,然后向group0推送数据,如下图所示: 此时,group1还未更新,group0和group2已经更新,在这个时间段,数据docC是丢失的。 但是如果满足单调性,在增加一个group的情况下,原来在group0的docC只会在原来的group0或者新的group2,不可..

ltochange的博客 945

mycat rule之jump-consistent-hash一致性哈希算法详解

参考: https://mp.weixin.qq.com/s__biz=MzU4NDAzNTcyNw%3D%3D&mid=2247483811&idx=1&sn=563c61d3e33184a15d910d64e2815886&scene=45#wechat_redirect

纳川的博客 1112

Consistent-Hash 一致性哈希算法 分布式存储

转自:http://blog.csdn.net/cywosp/article/details/23397179

周健华的专栏 948

【分布式】load balance 02-consistent hash algorithm 一致性哈希算法原理详解

负载均衡系列专题 01-负载均衡基础知识 02-一致性 hash 原理 03-一致性哈希算法 java 实现 04-负载均衡算法 java 实现 概念 一致哈希是一种特殊的哈希算法。 在使用一致哈希算法后,哈希表槽位数(大小)的改变平均只需要对 K/n个关键字重新映射,其中K是关键字的数量, n是槽位数量。 然而在传统的哈希表中,添加或删除一个槽位的几乎需要对所有关键字进行重新映射。 有什么用 现在想来,很多分布式中间件,在增删节点的时候都需要进行 re-balance。 借助一致性 hash,感觉可以避免

1万+

用最简单易懂的语言解析hash一致性哈希算法 consistent hashing

在了解一致性哈希算法之前,最好先了解一下缓存中的一个应用场景,了解了这个应用场景之后,再来理解一致性哈希算法,就容易多了,也更能体现出一致性哈希算法的优点,那么,我们先来描述一下这个经典的分布式缓存的应用场景。 场景描述 假设,我们有三台缓存服务器,用于缓存图片,我们为这三台缓存服务器编号为0号、1号、2号,现在,有3万张图片需要缓存,我们希望这些图片被均匀的缓存到这3台服务器上,以便它们能够分摊缓存的压力。也就是说,我们希望每台服务器能够缓存1万张左右的图片,那么,我们应该怎样做呢?如果我...

u014191624的博客 169

负载均衡一致性哈希算法实现 | nginx 负载均衡一致性哈希源码分析 | ngx_http_upstream_consistent_hash_module 源码分析

​ 理解七层反向代理的负载均衡 Nginx 中使用的的一致性哈希算法。开头只是讲一些没用的东西,后面主要是分析 Nginx 的 O(1) 时间复杂度的一致性哈希负载均衡的模块源代码实现,顺便了解一下 nginx 模块开发(参考Development guide (nginx.org) 中的 load balancing 部分)的大致样子。

锐龙处理器 2350

Consistent Hash 一致性哈希

算法学习】Consistent Hash 一致性哈希 (2011-02-24 12:55:14) 转载▼ 标签: 杂谈 分类:数据结构·算法 【摘要】      前段时间再看Thinking In LAMPBlog中的2010-12-05_大型互联网应用架构设计(视频,PPT在此).欣喜若狂的发现了ConsistentHash(一致性哈希),在

IT小小鸟 908

高效的MurmurHash 算法实现

MurmurHash 是一种高性能的哈希算法,由 Austin Appleby 在 2008 年创建。它是一种非加密哈希算法,可以快速地计算出任意数据的哈希值。MurmurHash 算法的特点是快速、高效、低碰撞、低冲突,适用于各种哈希表、哈希集合、哈希映射等数据结构。它的哈希值分布均匀,哈希冲突率低,能够更好地处理哈希碰撞和哈希冲突。MurmurHash 算法的原理是将输入数据分成若干个块,每个块都使用不同的哈希函数计算出一个哈希值,然后将这些哈希值进行混合和运算,得到最终的哈希值。

lejian的专栏 3880

Murmurhash 哈希算法 介绍与实现

最近在项目代码中看到了一种hash算法,以前没有遇见过,在此记录下来。   一、介绍   MurmurHash 是一种非加密型哈希函数,适用于一般的哈希检索操作。 由Austin Appleby在2008年发明, 并出现了多个变种,都已经发布到了公有领域(public domain)。与其它流行的哈希函数相比,对于规律性较强的key,MurmurHash的随机分布特征表现更良好。—摘自w...

qigaohua的博客 2万+

MurmurHash算法解析:数据处理中的高性能低碰撞哈希函数

MurmurHash是一类非加密的哈希函数,由Austin Appleby开发,其目的是为了解决数据检索中的高效性和一致性的需求。MurmurHash以其高效的性能和较低的碰撞率,迅速在计算机科学领域内得到了广泛应用。第一代MurmurHash诞生于2008年,之后随着需求和技术的发展,陆续出现了MurmurHash 2和MurmurHash 3等多个版本。在哈希函数中,碰撞指的是两个不同的输入数据在哈希处理后得到相同的输出值。碰撞率就是指在一定数量的数据集合中发生碰撞的次数占总数据量的比例。

weixin_32311823的博客 1456

MurmurHash算法初探

简单讨论一下MurmurHash算法,之后会依此做一个简易的短链接项目,尽量快些做出来,分享出来😁

wnhyang的博客 974

MurmurHash

MurmurHash是一种高效、分布均匀且广泛应用的非加密哈希函数。它在数据处理和存储的多个领域都有着重要的应用,尤其适合那些对性能有高要求的场景。然而,需要注意的是,MurmurHash不适用于安全敏感的应用。

坚定目标,超越自我 621
上一篇: lfs--Linux From Scratch
下一篇: DHT--Distributed Hash Table
ixiumu
博客等级 码龄18年 10粉丝 102原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值