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 后,则把其影响平均分担到其他所有节点上。

memcached整理の分布式集群算法的更多相关文章

  1. 分布式集群算法 memcached 如何实现分布式?

    memcached 是一个”分布式缓存”,然后 memcached 并不像 mongoDB 那 样,允许配置多个节点,且节点之间”自动分配数据”. 就是说--memcached 节点之间,是不互相通信 ...

  2. Memcached 服务分布式集群如何实现?

    特殊说明:Memcached 集群和 web 服务集群是不一样的,所有 Memcached 的数据总和才是数据库的数据.每台 Memcached 都是部分数据.(一台 memcached 的数据,就是 ...

  3. Redis面试题及分布式集群

    Reference: http://blog.csdn.net/yajlv/article/details/73467865 1. 使用Redis有哪些好处? (1) 速度快,因为数据存在内存中,类似 ...

  4. Redis分布式集群几点说道

    原文地址:http://www.cnblogs.com/verrion/p/redis_structure_type_selection.html  Redis分布式集群几点说道 Redis数据量日益 ...

  5. redis高可用分布式集群

    一,高可用 高可用(High Availability),是当一台服务器停止服务后,对于业务及用户毫无影响. 停止服务的原因可能由于网卡.路由器.机房.CPU负载过高.内存溢出.自然灾害等不可预期的原 ...

  6. elasticsearch 口水篇(5)es分布式集群初探

    es有很多特性,分布式.副本集.负载均衡.容灾等. 我们先搭建一个很简单的分布式集群(伪),在同一机器上配置三个es,配置分别如下: cluster.name: foxCluster node.nam ...

  7. 在Hadoop1.2.1分布式集群环境下安装hive0.12

    在Hadoop1.2.1分布式集群环境下安装hive0.12 ● 前言: 1. 大家最好通读一遍过后,在理解的基础上再按照步骤搭建. 2. 之前写过两篇<<在VMware下安装Ubuntu ...

  8. hadoop学习之hadoop完全分布式集群安装

    注:本文的主要目的是为了记录自己的学习过程,也方便与大家做交流.转载请注明来自: http://blog.csdn.net/ab198604/article/details/8250461 要想深入的 ...

  9. Twemproxy 分布式集群缓存代理服务器

    Twemproxy 分布式集群缓存代理服务器 是一个使用C语言编写.以代理的方式实现的.轻量级的Redis代理服务器, 它通过引入一个代理层,将应用程序后端的多台Redis实例进行统一管理, 使 应用 ...

随机推荐

  1. DNS_PROBE_FINISHED_NXDOMAIN

    DNS_PROBE_FINISHED_NXDOMAIN 用如下链接清除dns即可 chrome://net-internals/#dns dns不稳定 手动绑定host即可

  2. Linux下编译、安装并启动memcached

    首先使用yum安装gcc make.autoconf.libtool系列工具,这几个工具是编译所需要的,命令如下: yum install gcc make autoconf libtool 然后到l ...

  3. 2、keys相关命令

    redis的官网http://redis.io是学习redis的重要资源库,所有命令都分门别类的罗列在了这里http://redis.io/commands. 1.数据库选择命令: SELECT in ...

  4. GNU Bash Shell 编程图解笔记

    bash,Unix shell的一种,在1987年由布莱恩·福克斯为了GNU计划而编写.1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但能运行于大多数类Unix系统的操作系统之上,包括 ...

  5. 「小程序JAVA实战」Springboot版mybatis逆向生成工具(32)

    转自:https://idig8.com/2018/08/29/xiaochengxujavashizhanspringbootbanmybatisnixiangshengchenggongju32/ ...

  6. adb命令检测apk启动时间、内存、CPU使用情况、流量、电池电量等——常用的adb命令

    ADB:Android Debug Bridge,是Android SDK里一个可以直接操作安卓模拟器或真实设备的工具,颇为强大.   检测APP:   adb shell am start -W p ...

  7. 禁止xfce4黑屏

    我在ubuntu server上安装了xfce,可是每隔十分钟电脑就会黑屏.安装了xfce自带的电源管理程序.貌似不起作用.后来从网上找到如下方法: 修改/etc/X11/xorg.conf配置文件, ...

  8. [iOS]隐藏导航栏把右滑退出操作保留

    项目因为用到上面导航栏样式多变,就隐藏了导航栏自己用View代替了,但手势却不见了,后来发现问题解决.操作如下: 千万不要取消 Shows Navigation Bar 这个选项否则手势会消失 应该是 ...

  9. filter入门

    TestFilter.java package com.cdsxt.filter; import java.io.IOException; import javax.servlet.Filter;im ...

  10. Opencv HOG特征检测

    HOGDescriptor hogDescriptor = HOGDescriptor(); hogDescriptor.setSVMDetector(hogDescriptor.getDefault ...