`
mowengaobo
  • 浏览: 164143 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Memcached集群/分布式的单点故障

 
阅读更多

 四月, 2010 (13:33) | 架构设计 |  繁体 English    DeliciOus    分享到新浪微博】 
作者: H.E. | 您可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 
网址: http://www.javabloger.com/article/memcached-cluster-error-msag.html
豆瓣读书 向你推荐有关 架构设计、 类别的图书。

 

口水:Memcached在2009风靡全球,现在对Memcached态度大家各自褒贬不一,话不多说进入正题。

我看到过这样一段文字

memcached如何处理容错的?
不处理!:) 在memcached节点失效的情况下,集群没有必要做任何容错处理。如果发生了节点失效,应对的措施完全取决于用户。节点失效时,下面列出几种方案供您选择:
* 忽略它! 在失效节点被恢复或替换之前,还有很多其他节点可以应对节点失效带来的影响。
* 把失效的节点从节点列表中移除。做这个操作千万要小心!在默认情况下(余数式哈希算法),客户端添加或移除节点,会导致所有的缓存数据不可用!因为哈希参照的节点列表变化了,大部分key会因为哈希值的改变而被映射到(与原来)不同的节点上。
* 启动热备节点,接管失效节点所占用的IP。这样可以防止哈希紊乱(hashing chaos)。


  同学们,根据上面的说法,memcached其中一个节点失效以后,memcached本身是没有任何策略维持失效转发的,这对于大型系统是一个无法接受的事实。

    Memcached分布式每个服务器端本身没有相互相连的关系,数据分布是由客户端来维持的,也可以说Memcached还没有为集群提供真的高可用方案,因为从集群的定义上来说需要满足:1.压力分载 2.失效转发。

   在项目组中lianjie.you同学问我如果在分布式中的其中一台Memcached节点down掉了,应该如何解决?我当时愣住了,一时之间还不能给出任何完整的答案。

   今早在座公车来上班的路上用手机上网Google了一下,发现原来在网上有很多人与我们有相同的问题,我Google的关键字是“Memcached 单点”  、“Memcached 单点故障”。给出的搜索结果都不算让人满意,我才打算写一篇关于解决集群中Memcached单点故障的文章。Javabloger只向大家提供2种解决思路,暂时不提供具体代码。

  现象描述:
    在客户端连接的部分写入多个服务器端的ip地址,客户端将会自动的把缓存数据分布的放在每个不同的机器上,如图所示:

http://www.javabloger.com/images/article_pic/memcached/masd-1_s.png
查看大图请点击这里

现象后果:
    如果其中一个缓存节点的机器down机,那么客户端存入的缓存数据将会丢失一部分,就是图中红色字体描述的“Losed 33% Cache Data”,也就是说那部分数据彻底没有了!如果是用户的关键性信息那么就玩大了,如图所示:http://www.javabloger.com/images/article_pic/memcached/masd-2_s.png
查看大图请点击这里

解决方案1:本地备份缓存
    在本地放一份缓存,同时也在分布式Memcached上放一份缓存,如果当其中一台节点当机了,客户端程序直接读取本地的缓存,本地客户端维护一个HashMap即可,这样的方案虽然很简陋,但是可以满足一部分场景的需要,当你很急需的时候可以作为临时方案暂时替代一下。

解决方案2:采用缓存代理服务器
    采用 Magent 缓存代理,防止单点现象,缓存代理也可以做备份,通过客户端连接到缓存代理服务器,缓存代理服务器连接缓存服务器,缓存代理服务器可以连接多台Memcached机器可以将每台Memcached机器进行数据同步。这样的架构比较完善了,如果其中一台缓存代理服务器down机,系统依然可以继续工作,如果其中一台Memcached机器down掉,数据不会丢失并且可以保证数据的完整性,以上描述的系统架构如图所示:
http://www.javabloger.com/images/article_pic/memcached/masd-4_s.png
查看大图请点击这里

还是那句话:没有任何架构是最完美的,只是最合适的,任何架构都不可能一步到位,都是经过一步一步演变过来的。

–end–

分享到:
评论

相关推荐

    tomcat与memcached集群jar

    在Memcached中,集群允许将数据分发到多个服务器,以扩展存储容量并减少单点故障。 在“压缩包子文件的文件名称列表”中提到的“tomcat与memcached集群需要的jar”,这通常包括以下组件: 1. **Memcached客户端库*...

    nginx tomcat memcached 集群 session共享

    在构建高可用性和可扩展性的Web服务时,集群和会话共享是两个关键点。这里我们讨论的主题是如何通过Nginx、Tomcat和Memcached来...这种架构在处理高并发访问时尤为有效,同时降低了单点故障的风险,提高了用户体验。

    tomcat7 memcached集群

    标题中的“tomcat7 memcached集群”指的是在Tomcat 7这个流行的Java应用服务器中,利用memcached构建的分布式缓存系统,以实现session共享。Session共享是Web应用程序中的一个关键概念,它允许用户在不同服务器之间...

    Nginx+Tomcat+Memcached集群Session共享

    在实际应用中,还需要考虑安全性、容错性和性能优化等方面的问题,例如,定期备份Memcached数据,防止单点故障;使用SSL加密传输Session数据,防止数据泄露;监控和调整Nginx和Memcached的性能参数,确保系统的高效...

    Nginx+Tomcat+Memcached实现tomcat集群和session共享

    2. **负载均衡**:通过轮询、最少连接数等策略,Nginx可以将请求均匀地分发到多个Tomcat实例,避免单点压力过大。 3. **缓存**:Nginx还可以缓存静态资源,减轻后端服务器的压力。 **Tomcat** Tomcat是Apache软件...

    Nginx+Tomcat+MemCached_集群配置

    通过设置反向代理,Nginx 可以实现负载均衡,将流量分发到多个 Tomcat 实例上,避免单点故障,提高系统的整体处理能力。同时,Nginx 还可以缓存一些静态资源,减轻后端服务器的压力。 Tomcat 是基于 Java 的应用...

    memcached session共享所用到的jar包

    在Java Web应用中,结合memcached进行session共享可以有效地支持负载均衡,确保用户体验的一致性,同时避免了单点故障的风险。 总结来说,memcached session共享是解决分布式环境中会话一致性问题的有效方法。通过...

    第八章 企业项目开发--分布式缓存memcached1

    然而,Memcached的这种设计也带来了单点故障的风险,为确保高可用性,通常采用缓存备份策略,即在多个节点上保存相同的数据。 在Java开发中,有多种Memcached客户端可以选择。官方提供的Memcached Client for Java...

    谷粒商城电商项目 ( 大型分布式基础+高级、高可用集群部署)(全栈开发篇)

    - **负载均衡**:为了应对高并发访问,谷粒商城采用了负载均衡技术,如Nginx或HAProxy,将用户请求分发到多个服务器,避免单点过载。 - **分布式数据库**:通过分库分表策略,如ShardingSphere,解决大数据量下的...

    memcached+tomcat的session共享

    - 降低单点故障:如果某台Tomcat服务器宕机,session数据不会丢失,因为它们在memcached中是持久化的。 然而,这种方式也存在一些潜在的问题: - 安全性:session数据在内存中存储,如果memcached被攻击,可能会...

    tomcat6-7+memcached支持jar包

    4. **分布式缓存**:在Tomcat集群中,使用Memcached作为分布式缓存,可以确保所有服务器实例都能访问相同的数据,提供一致的服务,并且当某个节点故障时,其他节点仍能继续提供服务。 5. **性能优化**:通过使用...

    分布式系统架构资料合集

    在分布式架构中,负载均衡是关键一环,豆瓣可能采用了如Nginx等负载均衡器来分散用户请求,确保单点故障不会影响整体服务。数据库层面,他们可能实施了主从复制或者分片策略来提高读写性能,同时利用缓存技术(如...

    分布式数据库面试专题系列:Memcached+Redis+MongoDB-06.rar

    - **面试题**:如何解决Memcached的单点故障问题?Memcached如何进行数据备份? 2. **Redis**: - **简介**:Redis是一个开源的、高级的键值存储系统,支持多种数据结构,如字符串、哈希、列表、集合、有序集合等...

    分布式系统介绍

    5. 故障容忍性(Fault Tolerance):分布式系统需要有能力在部分组件发生故障时继续提供服务,系统对单点故障的依赖性越低越好。 二、分布式系统的抽象与模型 分布式系统需要使用抽象和模型来简化复杂的分布式操作...

    西工大网络与分布式实验4web

    通过将工作负载分配给多个资源,可以防止单点故障,提高整体性能。常见的负载均衡策略包括轮询、最少连接数和IP哈希等。 【容错和故障恢复】 在分布式系统中,故障是不可避免的。因此,了解如何设计容错机制和实现...

    tomcat分布式

    分布式部署是大型系统或高并发环境下的常见解决方案,它可以将负载分散到多个服务器上,降低单点故障的风险,同时提高服务的响应速度。 分布式Tomcat的实现通常涉及以下几个关键知识点: 1. **负载均衡**:通过...

    Memcached使用点滴.docx

    虽然分布式缓存可能会有数据传播的损耗,但 Memcached 的集中式缓存模式在实现简单备份后,可以有效地解决单点故障问题。 计数器功能是 Memcached 的一个重要特性,特别是在访问控制场景中。Memcached 提供了原子性...

    Memcached Redis MongoDB对比

    Redis通过客户端实现分布式读写,支持主从复制,但每次从节点连接主节点时需要整个数据集的快照,没有增量复制功能,因此在单点故障问题上处理起来较为复杂。而Memcached本身不具备数据冗余机制,但使用成熟的hash...

    memcached php

    3. **Memcached集群**:当单个Memcached实例无法满足需求时,可以搭建Memcached集群以扩展存储能力。集群笔记可能包含如何配置多个节点、数据分片策略和故障转移等关键信息。 4. **PHP与Memcached集成**:PHP通过...

    nginx+tomcat+memcached

    这种解决方案不仅提高了系统的可扩展性,还降低了单点故障的风险。在实际操作中,还可以根据具体需求进行更复杂的配置和优化,例如使用一致性哈希算法进行负载均衡,或者结合Redis等其他缓存系统来进一步提升性能。

Global site tag (gtag.js) - Google Analytics