zoukankan      html  css  js  c++  java
  • 分布式缓存一致性hash算法理解

    今天阅读了一下大型网络技术架构这本苏中的分布式缓存一致性hash算法这一节,针对大型分布式系统来说,缓存在该系统中必不可少,分布式集群环境中,会出现添加缓存节点的需求,这样需要保障缓存服务器中对缓存的命中率,就有很大的要求了:

      采用普通方法,将key值进行取hash后对分布式缓存机器数目进行取余,以集群3台分布式缓存为例子:

        对于数据进行取hash值然后对3其进行取余,余数为0则进入node 0,余数位1则进入node1,余数位2则进入node2.

        如果增加一个节点则对4进行取余,则会将node0中的部分,node1中的部分,node2中的部分分割到node3中,则出现了命中率为75%

        如果增加2个节点的话则对5进行取余,则只有3/5的机器被命中

      普通方法的设计会导致当你的节点添加的数目越多,导致你的命中率越低导致对数据库的操作压力就越大

      

      采用一致性Hash算法:

        构造一个0~2^32的整数环,然后将节点的名称比如说node0对其进行取hash值将其分布在该店上,

    然后将key值取hash值后进行比较:

    举例:node0的hash值为432323232;node1 hash值为879798098,则如果key1的hash值为559798098,则其大于node0的hashi值,则顺时针旋转,找到了node1则将其存放在node1中的缓存中。

    扩容后,将三个变成4个

    在node2和node0中插入一个node3,则导致node2到node1中中原先存放在node1中的数据分成两半,node2-node3部分存放在node3中,node3和node1的存放在node1中,则可以看出node0-node2以及node0-node1中这段没有改变。则也是75%但是还有问题就是node2和node0的负载数是node2的一倍,所以还是得出现解决办法

      引用虚拟的方式:将一个物理分布式缓存服务器分层n个虚拟机,分布在这个圆环周围,由于hash散列的不规则性,他会分布于不同的区域,见下图,如果再次插入新服务器之后,他会在器分布的虚拟机器上不规则的分布于各个点中,则会比较均匀的分布在各个环中,这样影响的可以将上面的问题解决了。

      

    根据该书说明,在实践中,一台物理服务器虚拟成150个虚拟服务器节点合适。

  • 相关阅读:
    base64URL处理
    智慧幼儿园方案:AI技术如何助力幼儿园智慧建设?
    TSINGSEE青犀视频开发webrtc项目如何实现Windows视频采集?
    国内采用HTTP协议传输视频都有什么优势?
    如何根据直播场景选择合适的直播协议?
    EasyPlayer-RTSP WebActiveX注册提示failed to create control 未指定错误
    luogu题解P2312解方程--暴力模+秦九韶
    【补充习题四】凑微分技巧与积分因子法解常微分方程
    【GMOJ7177】鱼跃龙门
    【洛谷P1791】人员雇佣
  • 原文地址:https://www.cnblogs.com/lonecloud/p/8093328.html
Copyright © 2011-2022 走看看