Xmemcached stand by

2011-08-01 18:02:49|  分类: 缓存 |  标签: |字号大中小 订阅

Xmemcached在元旦左右准备发1.3这个版本,这个版本新增加的一个关键特性就是所谓的failure模式。关于这个,可以看下memcached官方文档的解释
 《Failure,or Failover》。

展开来说,在某个memcached节点挂掉或者由于其他故障连接断开的时候,大部分客户端的默认策略都是failover的,也就是会查找下一个可用的memcached节点继续使用,挂掉或者连接不上的节点的数据会转移到其他节点上,路由的策略可以是Round Robin,也可以是一致性哈希。这样的模式在节点意外故障挂掉的情况下运行的很好,但是memached节点也完全可能因为一个意外的事故而短暂挂掉,比如你不小心弄掉了网线又马上接上去,比如机房交换机突然停电又立即恢复了,假设在故障前,用户A正要更新数据到节点A,节点A意外断开,那么这些数据就更新到下一个有效节点B,但是节点A又马上恢复,这时候用户又从节点A去读数据,读到却是更新前的老数据了(新数据更新到B节点去了),这种情况对用户来说就非常困惑,你告诉我更新成功,但是看到却还是更新前的数据。

怎么解决呢?一个简单的方案就是所谓failure模式,当某个节点挂掉的时候,不会从节点列表移除,请求也不会转移到下一个有效节点,而是直接将请求置为失败,就刚才的场景来说,在用户更新数据到节点A的时候,节点A意外断开,那么用户的这次更新请求不会转移到节点B,而是直接告诉用户更新失败,用户再次查询数据则绕过节点A直接查询后端存储。这种模式很适合这种节点短暂不可用的状况,请求会穿透缓存到后端,但是避免了新旧数据的问题。
 Xmemcached 1.3将支持failure模式,只要你设置下failureMode为true即可,简单示例:

XMemcachedClientBuilderbuilder=
//设置使用failure模式
builder.setFailureMode(true);

在此模式下,某个节点挂掉的情况下,往这个节点的请求都将直接抛出MemcachedException的异常。

不仅如此,xmemcached 1.3还将引入standby node的概念,你可以设置某个memached节点的备份节点,当这个节点挂掉的时候会将请求转发给这个备份节点,不会简单地抛出异常,也不会转发给其他节点。要使用standby node,必须首先设置使用failure mode,一个例子:

XMemcachedClientBuilderbuilder=newXMemcachedClientBuilder(AddrUtil
.getAddressMap("192.168.1.99:11211,192.168.1.100:11211192.168.1.101:11211,192.168.1.102:11211"));
builder.setFailureMode(true);

可以看到,新的服务器字符串格式变化为host:port,host:port host:port,host:port的格式,以空格隔开的是两个节点组成的一个分组,以逗号隔开的是主节点和备份节点,以上面的例子来说,我们设置客户端使用的节点是192.168.1.99和192.168.1.101,其中99对应的备份节点是100,而101的备份节点是102。并且我们需要设置使用failure mode为true。
 
 Failure mode加上standby节点可以比较好的解决新旧数据的问题,并且也可以防止请求穿透缓存到DB,但是主备两个节点之间的数据同步,xmemcached不准备帮你做,我的建议是可以使用repcached这个patch做复制。
 有的朋友可能希望,在使用备份节点之前先flush掉备份节点的数据,防止使用到老的数据,请求还是可以穿透缓存去DB查找,并存储到备份节点,我仔细考虑了这个方案,衡量之下还是不准备做自动flush,主要是并发上很难处理,并且flush数据这个事情可以手工来搞,根据我的经验,做的太透明太自动不一定是好事。你可以在主节点恢复之后,手工flush下备份节点的数据。

目前,xmemcached 1.3已经整装待发,对这些特性有兴趣的朋友可以先从svn下载源码尝鲜,有任何改进的建议请发邮件给我。我的邮件地址在博客的右上角。

Xmemcached failure stand by相关推荐

  1. xmemcached spring 配置文件

    memcached spring 配置文件 <bean class="java.net.InetSocketAddress" name="server1" ...

  2. 02.XMemcached的使用

        关于XMemcached的介绍或文档请参考:https://code.google.com/p/xmemcached/wiki/User_Guide_zh     关于Memcached的命令 ...

  3. 人物志-丘吉尔 Success consists of going from failure to failure without loss of enthusiasm. —— Winston Chu

    Pic from: Veterans Today [名言解析] Success consists of going from failure to failure without loss of en ...

  4. 二十一世纪大学英语读写教程(第二册)学习笔记(原文)——4 - Turning failure into Success(反败为胜)

    Unit 4 - Turning failure into Success(反败为胜) Turning failure into Success Fredelle Maynard Vicky - be ...

  5. Failure [INSTALL_FAILED_ALREADY_EXISTS

    adb install 安装的时候提示的失败 这个错误呢Failure [INSTALL_FAILED_ALREADY_EXISTS是安装失败已经存在了 这个时候要确认应用是否卸载了,如果卸载了 可以 ...

  6. 有关Run-Time Check Failure #2 - Stack around the variable 'XXX' was corrupted.错误的解决方法

    有关Run-Time Check Failure #2 - Stack around the variable 'XXX' was corrupted.错误的解决方法 今天我在敲完一段代码运行的时候出 ...

  7. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 数据库报错

    -- 查询mysql 数据库链接空闲时间持有最大空闲时间,单位为秒 SHOW VARIABLES WHERE VAriable_name = 'interactive_timeout'; -- 会出现 ...

  8. disk boot failure,insert system disk and press enter

    每次一开机就出现提示:"disk boot failure,insert system disk and press enter" http://topic.csdn.net/t/ ...

  9. ssh时出现 Agent admitted failure to sign using the key

    在将自己的公钥添加到要登陆的机器上时,仍然不能免密码登陆,并出现以下提示: Agent admitted failure to sign using the key. 需要进行以下操作即可解决: ss ...

最新文章

  1. linux dmesg命令参数及用法详解(linux显示开机信息命令)
  2. 在 ubuntu 中设置安装 boost 库
  3. 【Windows】Windows Restart Manager 重启管理器
  4. android系统学习笔记十一
  5. 浅谈离线化方案的探索,跨容器
  6. ActiveMQ 权限
  7. 树莓派搭建局域网内的静态网页
  8. 对数线性模型:逻辑斯谛回归和最大熵模型
  9. 简单的Swagger生产环境中屏蔽
  10. matlab颜色选取与绘制?(附有颜色全表)
  11. 计算机联锁维修管理机,计算机联锁试卷
  12. 大核注意力Large Kernel Attention(LKA)
  13. c# .net PayPal支付验证
  14. 英语思维导图大全 介词(七)
  15. VUE2中provide 和 inject用法,以及怎么做响应式数据?
  16. 英语基础知识:非谓语使用规则上篇
  17. Linux 内存管理中的 RSS 、VSZ等的含义
  18. javascript call callee
  19. stm32项目_stm32f103c8t6项目_循迹避障小车完整制作过程_智能小车设计_STM32智能小车教程-循迹-避障-蓝牙遥控-跟随
  20. 数据压缩及解压缩算法,多种文件的压缩与解压缩-java android

热门文章

  1. 基于jsp+mysql+Spring+SpringMVC+mybatis的ssm框架个人博客系统多用户
  2. 南京网预赛 11 BY bly
  3. MIT2020年力作:机器学习加速器综述
  4. linux设备驱动读书笔记(转)
  5. 各知名企业笔试题笔经大全
  6. 41-构造函数/析构函数
  7. 小学生都能读懂的区块链原理和术语介绍(故事图文)-引自《从零开始自己动手写区块链》
  8. mkv封装格式+ebml语法
  9. javaweb出现HTTP500的可能问题的解决方案
  10. 7-10 公路村村通 (30 分)