关于failure模式,可以看下memcached官方文档的解释https://code.google.com/p/memcached/wiki/NewConfiguringClient#Failure,_or_Failover
展开来说,在某个memcached节点挂掉或者由于其他故障连接断开的时候,大部分客户端的默认策略都是failover的,也就是会查找下一个可用的memcached节点继续使用,挂掉或者连接不上的节点的数据会转移到其他节点上,路由的策略可以是Round Robin,也可以是一致性哈希。这样的模式在节点意外故障挂掉的情况下运行的很好,但是memached节点也完全可能因为一个意外的事故而
短暂挂掉,比如你不小心弄掉了网线又马上接上去,比如机房交换机突然停电又立即恢复了,假设在故障前,用户A正要更新数据到节点A,节点A意外断开,那么这些数 据就更新到下一个有效节点B,但是节点A又马上恢复,这时候用户又从节点A去读数据,读到却是更新前的老数据了(新数据更新到B节点去了),这种情况对用 户来说就非常困惑,你告诉我更新成功,但是看到却还是更新前的数据。
怎么解决呢?一个简单的方案就是所谓failure模式,当某个节点挂掉的时候,不会从节点列表移除,请求也不会转移到下一个有效节点,而是直接将请求置 为失败,就刚才的场景来说,在用户更新数据到节点A的时候,节点A意外断开,那么用户的这次更新请求不会转移到节点B,而是直接告诉用户更新失败,用户再 次查询数据则绕过节点A直接查询后端存储。这种模式很适合这种节点短暂不可用的状况,请求会穿透缓存到后端,但是避免了新旧数据的问题。
Xmemcached支持failure模式,只要你设置下failureMode为true即可,简单示例:
XMemcachedClientBuilder builder =……
//设置使用failure模式
builder.setFailureMode(true);
在此模式下,某个节点挂掉的情况下,往这个节点的请求都将直接抛出MemcachedException的异常。
不仅如此,xmemcached还将引入standby node的概念,你可以设置某个memached节点的备份节点,当这个节点挂掉的时候会将请求转发给这个备份节点,不会简单地抛出异常,也不会转发给其 他节点。要使用standby node,必须首先设置使用failure mode,一个例子:
XMemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil
.getAddressMap("192.168.1.99:11211,192.168.1.100:11211 192.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下备份节点的数据。
分享到:
相关推荐
5. **分布式**:Memcached支持基于键的分布式策略,这意味着多个客户端可以同时访问同一个Memcached实例,且数据自动分散在各个节点上,无需额外的分布式协调机制。 **Memcached的安装与使用**: 1. 安装Memcached...
- 最新版本的Redis支持集群模式,增强了系统的扩展性和可用性。 #### 九、结论 综上所述,Memcached和Redis各有优势,选择哪种方案取决于具体的应用需求。如果应用主要需要缓存功能,并且对数据的可靠性和持久性...
connect-memcached, 用于连接的Memcached会话存储 连接 memcachedMemcached会话存储,使用节点 Memcached 与缓存服务器进行通信。安装通过 npm:$ npm install connect-memcached示例var express =
- **节点间的独立性**:每个 Memcached 实例都独立运行,彼此之间不共享数据。 - **C/S 架构**:客户端通过网络连接到 Memcached 服务器。 - **异步 I/O 模型**:使用 libevent 进行事件驱动的 I/O 处理,保证了高...
解压后,用户通常需要按照安装指南进行编译和安装,设置配置文件,并通过命令行工具启动和管理Memcached服务。 **集成和使用** 在Windows上部署Memcached,需要关注以下关键点: 1. **安装**:解压文件并根据官方...
当在编译 Memcached 时,如果选择使用 libevent 模式,可以提高其性能和可扩展性。libevent 提供了一种方式来处理多个长时间运行的连接,而无需创建大量的线程或进程。 安装 libevent: ```bash sudo apt-get ...
当数据量超过单个服务器的内存限制时,可以将Memcached 部署在多台服务器上,通过一致性哈希策略将数据均匀分配到各个节点,从而实现数据的分布式存储和访问。 ### 3. 性能优化 - **内存管理**:Memcached 使用...
标题中的“Windows-Memcached-32位和64位”指的是在Windows操作系统上使用的Memcached服务,分别针对32位和64位处理器架构。Memcached是一款高性能、分布式的内存对象缓存系统,用于在Web应用中加速数据访问速度。它...
**标题解析:** “memcached安装及java应用使用...总结,本文应该涵盖了从安装memcached到在Java应用中使用它的全面指南,包括相关配置、操作、最佳实践和优化技巧,旨在帮助开发者充分利用memcached来提升应用性能。
本篇文章将详细讲解如何安装和配置memcached,以及与之相关的libevent和magent。 首先,我们需要了解libevent库。libevent是一个事件通知库,它允许程序处理多个网络连接,并有效地处理来自不同源的事件。在安装...
标签“memcached 服务器端 下载”明确了这是关于获取memcached服务端的资源,而且是下载操作,通常这包括了memcached服务器的运行文件和可能需要的客户端驱动(如PHP扩展)。 在压缩包中的`php_memcached.dll`和`...
文件详细描述了Memcached相关原理和使用方法,内容包括:Memcached原理介绍、Memcached安装和使用说明、Memcached使用的技巧等。
它的使用通常包括初始化一个MemcachedClient实例,配置服务器节点,然后通过这个客户端对象进行get和set操作来存取数据。 其次,Xmemcached是另一个强大且高效的Java客户端,它支持多线程、NIO和Future模式,提供了...
- 对于扩展性,`memcached`支持分布式集群模式,通过一致性哈希策略将数据分散到多个节点,实现高可用和水平扩展。 8. **与其他技术的集成** - `memcached`常与Web开发框架(如PHP、Python、Ruby等)结合使用,...
- **`mcmaster`**:在分布式环境中,mcmaster可以用于集群管理和故障转移,监控多个Memcached节点的状态,并在节点失效时自动重新分配数据。 - **`telnet`**:最基础的管理方式是直接通过telnet连接到Memcached...
- memcached的性能受网络延迟影响,尽量选择靠近应用服务器的节点部署。 在Java应用中集成memcached,可以显著提升数据读取速度,尤其适用于高并发、读多写少的场景。但同时也要注意,memcached并非万能解决方案,...
在终端(也即cmd命令界面)下输入 ‘c:\memcached\memcached.exe -d install’ 安装 3. 再输入: ‘c:\memcached\memcached.exe -d start’ 启动。NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动...
3. **消息类型**:包括点对点(Queue)和发布/订阅(Topic)两种模式,分别对应于一对一和一对多的通信方式。 4. **连接工厂与会话**:连接工厂负责创建到ActiveMQ服务器的连接,会话则用于创建消息的生产者和消费者...