zoukankan      html  css  js  c++  java
  • memcached集群和一致性哈希算法

    场景

    由于memcached集群各节点之间都是独立的,互不通信,集群的负载均衡是基于客户端来实现的,因此需要客户端用户设计实现负载均衡算法。

    取模算法

    N个节点,从0->N-1编号,key对N 取模,余i,则key落在第i台服务器上
    image

    有 N 台服务器, 变为 N-1 台,
    每 N(N-1)个数中, 只有(n-1)个单元,%N, %(N-1)得到相同的结果
    所以 命中率在服务器 down 的短期内, 急剧下降至 (N-1)/(N
    (N-1)) 所以: 服务器越多, 则 down 机的后果越严重!
    = 1/(N-1)

    一致性hash算法

    • 把各服务器节点映射放在钟表的各个时刻上, 把 key 也映射到钟表的某个时刻上. 该 key 沿钟表顺时针走,碰到的第 1 个节点即为该 key 的存储节点
      image

    • 某节点宕机对其他节点的影响
      当某个节点宕机后,只影响该节点顺时针之后的 1 个节点,而其他节点
      不受影响.因此,一致哈希 最大限度地抑制了键的重新分布
      image

    一致性hash算法+虚拟节点

    1. 节点在圆环上分配分配均匀,因此承担的任务也平均,但事实上, 一般的 Hash 函数对于节 点在圆环上的映射,并不均匀.
    2. 当某个节点 down 后,直接冲击下 1 个节点,对下 1 个节点冲击过大,能否把 down 节点上的 压力平均的分担到所有节点上?
    3. 可以引入虚拟节点来达到目标
      虚拟节点即----N 个真实节点,把每个真实节点映射成 M 个虚拟节点, 再把 M*N 个虚拟节点, 散列在圆环上. 各真实节点对应的虚拟节点相互交错分布
      这样,某真实节点 down 后,则把其影响平均分担到其他所有节点上
      image
  • 相关阅读:
    Atitit 数据库view视图使用推荐规范与最佳实践与方法
    Atitit mybatis快速开发 的sql api接口
    一个数据包经过路由器和交换机各会发生什么变化
    c preprocessor
    A database of opensource HTTP proxies written in python.
    google chrome os下载
    一道笔试题多字串查找
    一个老题:将正整数n分为若干num个不同的正整数之和
    web dev framework
    memory leakage
  • 原文地址:https://www.cnblogs.com/warking/p/6924451.html
Copyright © 2011-2022 走看看