• memcached整理の分布式集群算法


      memcached如何实现分布式?

      memcached是一个“分布式内存对象缓存系统”,然而memcached并不像mongodb那样,允许配置多个节点,且节点之间“自动分配数据”,就是说memcached节点之间是不能互相通信的,因此,memcached的分布式,要靠用户去设计算法,把数据分布在多个memcached节点中。

      分布式之取模算法

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

      

      取模算法对缓存命中率的影响

         假设有N台服务器,运行中突然down掉一台,那么取模的底数就变为了N-1

      后果是什么呢?

      后果是命中率在服务器down期间内,急剧下降至1/N-1;服务器越多,则down机后果越严重。

      一致性哈希算法原理

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

      

      一致性哈希对其他节点的影响  

      当某个节点down 后,只影响该节点顺时针之后的1 个节点,而其他节点不受影响.因此,Consistent Hashing 最大限度地抑制了键的重新分布。

      

      一致性哈希+虚拟节点对缓存命中率的影响

      节点在圆环上分配分配均匀,因此承担的任务也平均,但事实上, 一般的Hash 函数对于节点在圆环上的映射,并不均匀。当某个节点down 后,直接冲击下1 个节点,对下1 个节点冲击过大,能否把down 节点上的压力平均的分担到所有节点上?答案是可以的。

      引入虚拟节点

      

      虚拟节点即----N 个真实节点,把每个真实节点映射成M 个虚拟节点, 再把M*N 个虚拟节点,散列在圆环上. 各真实节点对应的虚拟节点相互交错分布这样,某真实节点down 后,则把其影响平均分担到其他所有节点上。

  • 相关阅读:
    Java自学-多线程 线程池
    Java自学-多线程 交互
    Java自学-多线程 死锁
    Java自学-多线程 线程安全的类
    Windows任务计划定时执行脚本简介
    利用 Powershell 编写简单的浏览器脚本
    Edge浏览器现已支持Tampermonkey(油猴)
    Chrome扩展移植到Edge浏览器教程
    <Android> Location Service 分析
    <OPTEE>Trusted Application结构分析
  • 原文地址:https://www.cnblogs.com/tomcatx/p/4277210.html
Copyright © 2020-2023  润新知