现在“分布式”的概念越来越广泛,分布式db、分布式cache等,在设计的过程免不了牵扯到哈希算法。接下来介绍下一致性哈希算法。
首先举个栗子:比如我们开发一个网站,随着网站的规模和受众度的增加,使得我们不得不想出一些解决有效的方案来解决数据读写压力,于是我们引入了缓存机制。比如memcached、redis等可能都会成为我们的选择,不过关于这些选择我们该怎么使用确实不得不考虑的问题。
方案一、可以在web服务器前面增加三个甚至更多的缓存服务器,类似如下的结构
,采用最简单的策略机制:通过随机方式获取到对应的缓存服务器,这样的话就存在可能如下问题:1.数据冗余,同一份数据存在不同的服务器上; 2、缓存数据命中率低,比如可能数据已经缓存过,本次请求由于是随机到对应的缓存服务器,会导致数据不能命中。不能够保证同一个key的数据存放在同一台缓存服务器上,所以该策略不能空间上还是时间上都是比较低效的
方案二:为了解决针对方案一中存在的问题,那么我们可能会想到使用哈希算法,来保证相同的key的请求发送到相同的缓存服务器上,比如hash(k)%3 这样 就可以保证对相同的key缓存请求转到同一台缓存服务器,与此同时问题也随之而来,一旦我们增加节点或者减少节点的时候,hash计算要重新计算了,会导致key数据的冗余、命中率低的问题;意味着这样的设计容错性、可扩展性差,也意味着我们需要实现hash一致性计算
方案三、一致性哈希算法
1、概念:一致性哈希算法就是将整个哈希值组织成一个虚拟的圆环,这样的话,安装顺时针方向这个哈希值范围的首值和末值重合;
2、使用:首先我们使用电脑的ip或者主机名称执行Hash,将其定位到圆环中对应的位置;
然后对于key同样执行hash,也将其定位到圆环中的位置
最后,沿着顺时针方向,逐一找到每一个key通过hash后,靠近的第一个服务器的hash,那么就将 这个key归属于这个缓存服务器;
减少节点:只需要将原属于该节点的key按照逆时针方向,找到第一个临近的缓存服务器(前一个缓存服务 器);而其他正常 的缓存服务器及其关联的key则不需要进行任何改变
增加节点:同样采用逆时针方向,找到第一个临近的缓存服务器,这两个范围内的数据就隶属于新增的缓 存服务器。
这样的话,无论使用增加、还是减少节点,真正受到影响的数据都是很小的一部分,同样容错性和可扩展 都得到了很好的完善。
在使用第三种解决方案时,有一个问题值得我们深思,一旦整个圆环节点很少的时候 ,就可能存在节点分布不均匀,数据大量的集中某一台缓存服务器中,针对于此种情况,可以通过使用虚拟节点的方式来解决
这样可以对同一个节点执行多个hash,这样就形成了分布较为均匀的分布,注意虚拟节点格式 缓存服务器编号#自定义编号 比如cache server 1 #1 这样就代表隶属于server 1的一个分支;如此类推。在实际使用过程,建议使用超过32个虚拟节点,使得节点分布更加均匀些,可以很好解决服务节点较少,数据倾斜的问题。
相关推荐
一致性哈希算法最初由麻省理工学院的K等人提出,并被广泛应用于分布式系统中,以解决节点动态变化时数据一致性问题。其核心思想是通过引入哈希环,将数据对象均匀分布在哈希环上的不同节点中,以此降低节点变更对...
一致性哈希算法是一种在分布式系统中解决数据分片和负载均衡问题的算法,它主要解决了在动态添加或移除节点时,尽可能少地改变已经存在的数据分布。在云计算和大数据处理领域,一致性哈希被广泛应用,例如在分布式...
一致性哈希算法通过将哈希值空间组织成一个虚拟的环状结构,使得每个存储节点仅负责环上的一段区域,从而有效减少了节点变化时的数据迁移量。然而,一致性哈希算法也存在一些问题,比如在节点数量较少时,节点间的...
一致性哈希算法是一种分布式哈希(Distributed Hash Table, DHT)技术,它解决了在分布式环境中数据分片和负载均衡的问题。在传统的哈希算法中,如果增加或减少服务器节点,会导致大量数据重新分配,而一致性哈希...
【摘要】中的“高效扩展”和“分布式数据库”是本文的核心话题,研究的是如何利用一致性哈希算法在大数据时代高效地扩展分布式数据库。一致性哈希算法最初由Karger等人提出,目的是解决分布式缓存的问题,它弥补了...
一致性哈希算法是一种分布式哈希表(DHT)中用于解决数据分片和负载均衡问题的算法。在大型分布式系统中,例如缓存系统、分布式数据库等,一致性哈希能够确保当节点加入或离开时,尽可能少的数据需要迁移,从而保持...
一致性哈希算法是一种分布式哈希(Distributed Hash Table, DHT)技术,旨在解决在分布式环境中数据分布不均匀的问题。Ketama算法是基于一致性哈希的一种优化实现,由Last.fm公司的Simon Willison提出,其目标是在...
一致性哈希算法是一种在分布式系统中用于解决数据分发和负载均衡问题的算法。随着互联网技术的快速发展,分布式系统已经成为支撑大规模服务的关键技术之一。在分布式系统中,多个节点通过网络协同工作,提供高可用性...
### 一致性哈希算法及其在分布式系统中的应用 #### 摘要 一致性哈希算法是一种用于解决分布式系统中节点动态变化导致的数据重新分布问题的关键技术。它通过将哈希空间映射到一个循环的空间中,实现了数据节点的高效...
一致性哈希算法应用及优化是IT领域中分布式系统设计的核心技术之一,特别是在处理大规模数据分布与缓存系统中,其重要性不言而喻。本文将深入探讨一致性哈希算法的基本概念、工作原理以及在实际场景中的应用和优化...
一致性哈希算法作为解决这一问题的重要手段之一,近些年来得到了广泛关注和应用。 一致性哈希算法由David Karger等人在1997年提出,它是一种特殊的哈希算法,主要用于分布式系统中实现负载均衡。与传统的哈希算法...
一致性哈希算法
白话解析:一致性哈希算法1 一致性哈希算法是解决分布式缓存问题的解决方案。缓存服务器数量的变化会引起缓存的雪崩,导致整体系统压力过大而崩溃。为了解决这个问题,一致性哈希算法诞生了。 在了解一致性哈希...
一致性哈希算法(Consistent Hashing)是一种在分布式系统中实现负载均衡的算法,尤其在分布式缓存如Memcached和Redis等场景下广泛使用。它解决了传统哈希算法在节点增减时导致的大量数据迁移问题,提高了系统的可用...
本项目以“基于NIO-EPOOL模型netty实现的具备一致性哈希算法的NAT端口映射器”为主题,深入探讨了Netty在NAT端口映射中的应用,以及一致性哈希算法在此过程中的作用。 首先,我们来了解NIO(Non-blocking I/O,非...
#资源达人分享计划#
#资源达人分享计划#
分布式存储系统:Cassandra:数据分布与一致性哈希算法.docx