网站的伸缩性架构中,分布式的设计是现在的基本应用。
在memcached的分布式架构中,key-value缓存的命中通常采用分布式的算法
一、余数Hash
    简单的路由算法可以使用余数Hash:
                node编号=HashCode(key)%服务器数目
例如: key=‘BEIJING'的hash值为490806430,服务器数目=3。那么余数为1。所以这个key-value就落在第一台缓存服务器上。
 
优点:计算简单。
缺点:不利于扩展。如果扩展的话,由3太服务器扩展为4台服务器,那么通过一个key='BEIJING',再除以服务器数码,余数为2。那么将不能命中,计算可知,增加一台服务器不能命中的数据将达到:N/(N+1)。那也太高了。
 
二、一致性Hash算法
数据结构:一致性哈希环(图片来自网络)
                                                        

算法过程:
    数据存放;先构造一个长度为2^32的整数环,根据节点名称的Hash值[0,2^32-1],将缓存服务器节点放置在这个Hash环上。也就是说,每个节点,都根据起Hash值,放在对应的Hash环的位置中。。。如上图,假设有4个节点node1 - node4。当数据来临时候,根据数据KEY计算得到的Hash值,顺时针找到最近的node,然后将数据放入此节点。
    增加节点:如果当node5节点增加进入系统时,只有node5之前的数据受到影响,由原来的放在node4上,转移到新节点node5上。
    查找算法:Hash查找的过程实际上是在二叉查找树中查找不小于查找树的最小数值。当然这个二叉树的最右边子节点和最左边子节点相连接,构成环。
 
缺陷:
    新加入的node5节点只影响到了node4上面的部分数据。原来节点node1,node2,node3都不受影响。这就意味着,node1 - node3 将承受着node4、5的两倍数据压力。如果5台服务器的性能是一样的,那么这种结果显然不是最好 的。
 
虚拟节点:
    如图:(图片来自网络)
   --

将每个物理节点映射为3个虚拟节点A1,A2,A3。这样,当增加一个物理机时,也将该虚拟机地址映射为3个或多个虚拟节点,将这新的3个虚拟节点分摊到环的不同位置,那么受到影响的节点也分不到不同的位置。整个环节点的均匀性将会大大增加!
 
 
三、系统的扩展性和伸缩性区别
 
扩展性和伸缩性不要搞混了。
 
扩展性:对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。
    表现在基础设施稳定不需要经常变更,应用之间较少以来和耦合,对需求变更可以敏捷响应。是系统架构设计层面的“开闭原则(对扩展开放,对修改闭合)”,架构设计考虑未来功能扩展,当系统新增功能时,不需要对现有系统的结构和代码进行修改。
 
伸缩性:系统能够通过增加(减少)自身资源规模的方式增强(减少)自己计算处理事物的能力,如果这种增减是成比例的,就被称作线性伸缩性。在网站架构中,通常指利用集群的方式增加服务器数量、提高系统的整体事物吞吐能力。

hash·余数hash和一致性hash的更多相关文章

  1. 11.redis cluster的hash slot算法和一致性 hash 算法、普通hash算法的介绍

    分布式寻址算法 hash 算法(大量缓存重建) 一致性 hash 算法(自动缓存迁移)+ 虚拟节点(自动负载均衡) redis cluster 的 hash slot 算法 一.hash 算法 来了一 ...

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

    一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性 ...

  3. Java实现一致性Hash算法深入研究

    一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中”一致性Hash算法”部分,对于为什么要使用一致性Hash算法和一致性Hash算法的算法原 ...

  4. 一致性Hash算法与代码实现

    一致性Hash算法: 先构造一个长度为232的整数环(这个环被称为一致性Hash环),根据节点名称的Hash值(其分布为[0, 232-1])将服务器节点放置在这个Hash环上,然后根据数据的Key值 ...

  5. 对一致性Hash算法及java实现(转)

    一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性 ...

  6. 对一致性Hash算法,Java代码实现的深入研究(转)

    转载:http://www.cnblogs.com/xrq730/p/5186728.html 一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读 ...

  7. 【转载】对一致性Hash算法,Java代码实现的深入研究

    原文地址:http://www.cnblogs.com/xrq730/p/5186728.html 一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细 ...

  8. 理解一致性Hash算法

    简介 一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CAR ...

  9. 分方式缓存常用的一致性hash是什么原理

    分方式缓存常用的一致性hash是什么原理 一致性hash是用来解决什么问题的?先看一个场景有n个cache服务器,一个对象object映射到哪个cache上呢?可以采用通用方法计算object的has ...

  10. OpenStack_Swift源代码分析——Ring基本原理及一致性Hash算法

    1.Ring的基本概念 Ring是swfit中最重要的组件.用于记录存储对象与物理位置之间的映射关系,当用户须要对Account.Container.Object操作时,就须要查询相应的Ring文件( ...

随机推荐

  1. Hibernate主键生成策略及选择

    1 .increment:适用于short,int,long作为主键,不是使用数据库自动增长机制 这是hibernate中提供的一种增长机制 在程序运行时,先进行查询:select max(id) f ...

  2. Python安全 - 从SSRF到命令执行惨案

    前两天遇到的一个问题,起源是在某个数据包里看到url=这个关键字,当时第一想到会不会有SSRF漏洞. 以前乌云上有很多从SSRF打到内网并执行命令的案例,比如有通过SSRF+S2-016漏洞漫游内网的 ...

  3. zookeeper windows伪集群搭建

    1.下载zookeeper http://mirror.bit.edu.cn/apache/zookeeper/ 解压后,目录重命名为zookeeper1,进入 conf目录,把zoo_sample. ...

  4. PHP文件管理—实现网盘以及压缩包的功能操作

    代码如下: 1.主页面file_zip.php <!DOCTYPE html> <html> <head> <meta charset="UTF-8 ...

  5. mvc 分页PagedList简单使用

    1.nuget下载PagedList包 2.PageListHelper类: using PagedList; using System; using System.Collections.Gener ...

  6. Embedded training,嵌入式训练

    一旦初始的模型集被创建后, HERest使用整个训练集来执行"嵌入式训练(embedded training)",HERest将对全部HMM音素集模型执行一次Baum-Welch, ...

  7. spring cloud心跳检测自我保护(EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.)

    EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER ...

  8. if 语句

    if 判断条件的时候,如果是多个条件一起进行判断,那么就需要逻辑运算符   并且-----------and 或者-----------or 非(取反)----not   if 条件1 and 条件2 ...

  9. #6278. 数列分块入门 2(询问区间内小于某个值 xx 的元素个数)

    题目链接:https://loj.ac/problem/6278 题目大意:中文题目 具体思路:数列分块模板题,对于更新的时候,我们通过一个辅助数组来进行,对于原始的数组,我们只是用来加减,然后这个辅 ...

  10. 二进制学习 wsample01a.exe

    有趣的二进制学习 wsample01a.exe 这是一个基础的入门小程序,点击运行后发现弹出小框,Hello! Windows 用ida静态分析程序,这一段是程序的主逻辑,也是全部逻辑:) 可以看到程 ...