常见的一致性哈希算法#Java实现#

    之前参与过缓存框架的封装与测试工作,并对一致性哈希算法进行了相关的调研。通过对spymemcached与jedis等客户端源码的阅读对一致性哈希算法的Java实现进行调研:

1. 使用TreeMap实现,TreeMap本身继承NavigatableMap,因此具备节点导航的特点

2. 通过在内存中构建虚拟节点,每个物理节点存在160(默认值,可设置)个虚拟节点映射

1. 如何处理节点故障问题

源码分析:通过hash算法获取到的节点属于问题节点便进行N次的rehash操作,若执行N次的rehash操作依然没有定位到可用节点即报错。我在测试时发现,rehash经历N次后可能依然会定位到同一个故障节点,原因是我实际的物理节点数只有两台,所以每台物理节点存在50%的概率被命中。因此我建议物理节点数尽可能的多,分担哈希环区间,减少故障节点多次被命中的情况。

2. Set操作没有涉及到冗余存储

若node-1存储成功,可以在node-2, node-3上进行冗余存储并设置TTL。若遇到node-1节点故障,failover至node-2, node-3节点,尽量保证缓存命中;多节点冗余存储涉及到一致性的问题稍微复杂,因此引入TTL尽量缓解一致性的问题。

。。。未完待续。。。

时间: 2024-10-18 06:02:41

常见的一致性哈希算法#Java实现#的相关文章

PHP实现的一致性哈希算法完整实例_php技巧

本文实例讲述了PHP实现的一致性哈希算法.分享给大家供大家参考,具体如下: <?php /** * Flexihash - A simple consistent hashing implementation for PHP. * * The MIT License * * Copyright (c) 2008 Paul Annesley * * Permission is hereby granted, free of charge, to any person obtaining a cop

一致性哈希算法的Java实现

一致性哈希算法是分布式系统中常用的算法.比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映射到具体的节点上,如key%N,key是数据的key,N是机器节点数,如果有一个机器加入或退出这个集群,则所有的数据映射都无效了,如果是持久化存储则要做数据迁移,如果是分布式缓存,则其他缓存就失效了. 因此,引入了一致性哈希算法: 把数据用hash函数(如MD5),映射到一个很大的空间里,如图所示.数据的存储时,先得到一个hash值,对应到这个环中的每个位置,如k1

一致性哈希算法的应用及实现

一致性哈希算法(Consistent Hashing Algorithm)是一种分布式算法, 由MIT的Karger及其合作者提出,现在这一思想已经扩展到其它领域. 1997年发表的学术论文中介绍了"一致性哈希"如何应用于用户易变的分布式Web服务中. 一致性哈希可用于实现健壮缓存来减少大型Web应用中系统部分失效带来的负面影响.(维基百科) hash算法的单调性 Hash 算法的一个衡量指标是单调性( Monotonicity ),定义如下: 单调性是指如果已经有一些内容通过哈希分派

java- 分布式- 一致性哈希算法(1)

一致性哈希算法是分布式系统中常用的算法.比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映射到具体的节点上,如key%N,key是数据的key,N是机器节点数,如果有一个机器加入或退出这个集群,则所有的数据映射都无效了,如果是持久化存储则要做数据迁移,如果是分布式缓存,则其他缓存就失效了.     因此,引入了一致性哈希算法: 把数据用hash函数(如MD5),映射到一个很大的空间里,如图所示.数据的存储时,先得到一个hash值,对应到这个环中的每个位置

一致性哈希算法

tencent2012 笔试题附加题问题描述: 例如手机朋友网有 n 个服务器,为了方便用户的访问会在服务器上缓存数据,因此用户每次访问的时候最好能保持同一台服务器.已有的做法是根据 ServerIPIndex[QQNUM%n]得到请求的服务器,这种方法很方便将用户分到不同的服务器上去.但是如果一台服务器死掉了,那么 n 就变为了 n-1,那么ServerIPIndex[QQNUM%n]与 ServerIPIndex[QQNUM%(n-1)]基本上都不一样了,所以大多数用户的请求都会转到其他服务

一致性哈希算法应用与分析

一致性哈希算法主要使用在分布式数据存储系统中,按照一定的策略将数据尽可能均匀分布到所有的存储节点上去,使得系统具有良好的负载均衡性能和扩展性.感觉一致性哈希与数据结构中的"循环队列"还是有一点联系的. 1.简单哈希算法 哈希(hash)计箅是常见的数据分布技术,其通过求模运算来计算哈希值,然后据此将数据映射到存储空间中.由于只是采用了简单的求模运算.使得简单哈希计算存在很多不足: 1)增删市点时,更新效率低.当系统中存储节点数量发生增加或减少时,映射公式将发生变化为hash(objec

【转载】五分钟理解一致性哈希算法(consistent hashing)

   转载自:http://blog.csdn.net/cywosp/article/details/23397179 简介:     一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用.     一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义

一致性哈希算法以及其PHP实现详细解析_php技巧

在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括:  轮循算法(Round Robin).哈希算法(HASH).最少连接算法(Least Connection).响应速度算法(Response Time).加权法(Weighted )等.其中哈希算法是最为常用的算法. 典型的应用场景是: 有N台服务器提供缓存服务,需要对服务器进行负载均衡,将请求平均分发到每台服务器上,每台机器负责1/N的服务. 常用的算法是对hash结果取余数 (hash() mod N):对机器编号从0到N-1,按

java- 分布式- 一致性哈希算法(2)

一致性哈希用在负载均衡的实例来说,一致性哈希就是先把主机ip从小大到全部放到一个环内,然后客户端ip来连接的时候,把客户端ip连接到大小最接近客户端ip且大于客户端ip的主机.当然,这里的ip一般都是要先hash一下的. [java] view plain copy  print? 添加客户端,一开始有4个主机,分别为s1,s2,s3,s4,每个主机有100个虚拟主机:   101客户端(hash:-3872430075274208315)连接到主机->s2-192.168.1.2   102客