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

一致性hash在分布式缓存中的应用

 
阅读更多

 

Consistent Hashing 一致性哈希算法
小计:一致性hash在分布式缓存中的应用可以在服务器拓扑结构,添加机器发生变化时,影响最小,避免大量的缓存失效,都落在数据硬件上,从小导致当机,只影响到添加机器的后面一台机器
今天看豆瓣的架构PPT,其中有谈到Consistent Hashing的算法,网上搜了下,发现这方面的介绍也不算多。

通常比较常用的使用地方就是memcache分布式的时候,例如我有三台memcache,那么普通的hash算法,直接用你要取的key的hash值模取memcache的数量。

server = hash(key) mod server num;

但是如果要增加一台,那么将会有大量的缓存信息失效。所以更好的办法Consistent Hashing. 

Consistent hashing算法:环状结构。虚拟节点来替换实体节点被分配到环状某一位置上(根据处理能力不同可以将一个实体节点映射到多个虚拟节点上)。主键为key的节点position = hash(key),在环上按照顺时针查找value大于position的第一个虚拟节点,由它对应的实体节点处理。下图中k就优先由虚拟节点 B来处理。



按照我的理解方式 就是将所有的cache服务器的标识分别hash到的值分布到0-pow(2,32)中. 然后将你要取的key的hash值进行比较。取第一个大于key的hash值的服务器。 如果从0-pow(2,32)也没有找到,那么则取最小hash值的服务器。

例如 上图中, 服务器 a 的hash值 为 1, b的hash值为 10, c的hash值为20, 我们取 key K 的hash值为5的位置,发现key K 大于 a 小于 b , 那么key k就存放于服务器b上, 如果 我们取 key x 的hash值为30的位置,发现 a,b,c三个服务器的hash值都小于 key x的hash值 , 那么 我们取 a 服务器作为存放服务器。

这样的存放方法,只会影响你最后一台服务器存放的key.而不会像取模方法的全局影响。

当然这样取key的效率就没有取模的高了,至于采用哪种方法,还是要根据你当前业务的规模来选择的。

另附上简单的算法

<?php

function consistent_hash_key($key,$servers){
   if(empty($servers)){
       return false;
   }
   $hash_serv = array();
   $hash_key = sprintf("%u\n",crc32($key));
   foreach ($servers as $server){
       $hash_serv[sprintf("%u",crc32($server))] = $server;
   }
   
   ksort($hash_serv,SORT_REGULAR);
   
   if(count($hash_serv) == 1){
       return array_pop($hash_serv);
   }
   $maxHash = pow(2,32);
   foreach ($hash_serv as $k => $v){
       if($hash_key < $k){
           return $v;
       }
   }
   return array_shift($hash_serv);
}

for ($i=0;$i<100;$i++){
   echo consistent_hash_key('s:'.$i,array('a','b','c','d','e'))."\t".consistent_hash_key('s:'.$i,array('a','b','c','d','e','f'))."\n";
}
?>




 HRegion是Hbase中分布式存储和负载均衡的最小单元。最小单元就表示不同的Hregion可以分布在不同的HRegion server上。但一个Hregion是不会拆分到多个server上的。
分享到:
评论

相关推荐

    基于redis的分布式缓存系统架构分析_张威.pdf

    一致性Hash算法保证了在节点增减时,数据迁移的影响最小化,从而保证服务的连续性。 **基于Twemproxy的代理设计** 1. **写入端设计**:采用一级Twemproxy架构,一个Twemproxy实例管理多个Redis实例,写入数据通过...

    分布式缓存技术在插入密集型系统中应用的研究与实现.pdf

    分布式缓存技术在插入密集型系统中应用的研究与实现 分布式缓存技术是当前互联网行业中广泛应用的一种技术,旨在提高系统的吞吐率,降低对数据库的访问频率,提高系统的快速响应能力。然而,分布式缓存技术在查询...

    分布式缓存系统客户端关键技术研究.pdf

    在实际应用中,分布式缓存系统需要解决的关键技术问题包括数据的高并发读写、数据的一致性和系统容错性等。例如,通过分布式Hash表和集群路由算法,客户端可以将请求映射到特定的数据节点进行处理,这样的设计可以...

    memcache分布式一致性hash

    分布式一致性哈希是一种解决在分布式缓存系统中如何高效、稳定地分配数据的算法,尤其在Memcache等缓存服务中广泛应用。它旨在确保当缓存集群中的节点增减时,对现有数据的映射影响最小,从而降低数据迁移和系统压力...

    物联网中云计算分布式缓存技术的应用分析.pdf

    分布式缓存技术的扩展性允许系统容量随节点增加而增加,而其多副本复制技术和一致性Hash分布算法则增强了系统在单点故障时的抗干扰能力和稳定性。 云计算分布式缓存技术在物联网中的应用前景广阔。物联网覆盖的传感...

    Web 开发中分布式缓存技术的分析与研究.pdf

    其中一致性Hash算法在分布式缓存中扮演着至关重要的角色,它允许在节点增加或删除时,仍能以一种高效的方式确定数据的存储和读取节点。 分布式缓存技术的发展趋势是从集中式向分布式转换,现有缓存模型往往更接近于...

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

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

    一致性Hash简单实现

    一致性哈希(Consistent Hashing)是一种分布式哈希表(DHT)的算法,它主要应用于分布式缓存、负载均衡等场景,旨在解决在动态扩展或收缩系统规模时,尽量减少数据迁移的问题。在这个简单的实现中,我们将探讨如何...

    一致性hashjava实现

    一致性哈希(Consistent Hashing)是一种分布式哈希算法,主要应用于分布式缓存、负载均衡等领域,以解决在分布式环境中动态添加或删除节点时,尽可能少地改变已有的哈希映射关系。在这个Java实现中,我们看到的是...

    一致性Hash算法的原理及实现

    一致性Hash算法通过巧妙的设计,不仅解决了传统哈希方法在动态环境中存在的问题,还为分布式系统的稳定性、可扩展性和性能提供了有力支持。通过理解其核心原理和应用,我们可以更好地应对分布式环境下的挑战,并构建...

    一种高并发分布式缓存服务架构.pdf

    在设计分布式缓存服务架构时,需要考虑到高并发、高可用和高扩展性的要求,选择合适的缓存技术和架构,例如使用Redis作为缓存数据存储层,使用NIO通信模式来支持高并发、多连接的客户端请求,使用一致性Hash算法来...

    搞懂分布式技术11:分布式session解决方案与一致性hash.docx

    - **分布式缓存**:如Memcached等,通过一致性Hash算法可以有效地解决数据分布问题。 - **负载均衡**:在多台服务器之间分发请求时,一致性Hash可以帮助实现请求到特定服务器的稳定映射。 #### 四、总结 在分布式...

    一致性哈希算法源码 Ketama一致性hash算法源码

    一致性哈希算法是一种分布式哈希(Distributed Hash Table, DHT)技术,旨在解决在分布式环境中数据分布不均匀的问题。Ketama算法是基于一致性哈希的一种优化实现,由Last.fm公司的Simon Willison提出,其目标是在...

    高性能分布式缓存 Redis1

    总之,Redis作为一种高性能的分布式缓存,不仅能够提升系统性能,还能解决并发控制、数据一致性等问题,是现代互联网应用中不可或缺的技术组件。正确理解和运用Redis的特性,可以极大地优化系统的效率和稳定性。

    分布式缓存Redis使用方法[定义].pdf

    分布式缓存Redis是一种高效的数据存储和访问解决方案,尤其适合处理大量数据并提供高速读写访问。...其内存管理和一致性模型针对不同的应用场景进行了优化,使其成为许多大型分布式系统中的首选缓存解决方案。

    一致性hash算法(c++)

    总结来说,一致性哈希算法是解决分布式环境中数据分布问题的关键技术,C++实现的一致性哈希库简化了开发人员在项目中应用该算法的过程。通过理解其原理和库的使用方法,我们可以构建更稳定、高效的分布式系统。

    libconhash一致性hash

    在实际应用中,一致性哈希常用于分布式缓存(如Memcached、Redis集群)、分布式数据库分片、负载均衡器等场景,帮助构建可扩展、高可用的分布式系统。 总之,`libconhash`是一个方便的C语言实现的一致性哈希库,...

Global site tag (gtag.js) - Google Analytics