zoukankan      html  css  js  c++  java
  • 一致性hash算法

    1.hash算法

    hash算法将任意长度的二进制值,转换为较小长度的二进制值,这个小的二进制值称为hash值,hash可以校验数据的完整性。

    2.一致性hash算法
    (2)一致性hash算法:一致性hash算法是一种分布式hash的算法,设计目标是为了解决因特网中的hotSpot问题。

    (3)一致性hash算法的具体实现。
    以memcache集群的路由为例
    I. 一致性hash算法通过一个叫做一致性hash环的数据结构来实现 key到缓存服务器 的内存映射

    II. 定义一个hash环,范围从0-2^32,把这个hash环想象成一个闭环,数字首尾想连

    III. 把key通过一定的hash算法,得到hash,映射到环上

    IV. 把机器通过一定的hash算法,映射到环上

    V.如图,可以看出对象key的hash值和机器的hash值在同一空间中,然后对象按照顺时针转动,寻找最近的节点,存入key1、key2存到节点3中,key3、key4存入节点2,key5存入节点1

    VI.当增加节点4的时候,只是节点3到节点4这一部分数据受到影响,不会像取余算法一样,影响70%的数据存储


    3.余数hash
    服务器有3台,那么被取余的数就是3.
    (1)根据数据取余,然后路由到对应的缓存服务器,比如1结尾的,路由到server1
    2结尾的,路由到server2 , 3结尾的路由到server3,
    0,1,2,3,4,5,6,7,8,9,10
    0,1,2,0,1,2,0,1,2,0,1
    (2)如果新增一台服务器,被取余数就是4,
    0,1,2,3,4,5,6,7,8,9,10
    0,1,2,3,0,1,2,3,0,1,2
    可以到到从数据2以后,70%的数会受到影响。

  • 相关阅读:
    【 socke】C# socket端口复用-多主机头绑定
    【网络】 NAT
    【socket】高级用法-ReceiveMessageFrom
    【socket】高级用法-异步
    C# GET 和 SET作用
    多态是什么意思?
    LINQ(LINQ to Entities)
    LINQ(隐式表达式、lambda 表达式)
    LINQ(LINQ to DataSet)
    C# 中的委托和事件
  • 原文地址:https://www.cnblogs.com/fubaizhaizhuren/p/7543198.html
Copyright © 2011-2022 走看看