`
argan
  • 浏览: 129616 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

如何提高缓存服务器的可用性

阅读更多

上一篇我们讨论到了问题 ,现在我来讲讲我的解决方法。

 

首先要明确几点:

*缓存服务器不是数据库,是允许部分失败的,也是允许一定程度上的不一致的

*我们要解决的是分布式缓存的整体可用性,而不是单台服务器的可用性

 

如果场景不是这样,或者不同意我对缓存服务器的作用的假设,下面就没必要看了。

 

首先,我们肯定是在客户端来解决这个问题,在我看来,服务器端解决,让每个服务节点知晓其他的存在,这是把事情复杂化了,而且往往是吃力不讨好的。就像应用服务器的集群一样,只要你想想session复制这个问题,你就不会在有100个节点的情况下,是用服务器的集群了。

 

在客户端处理这个问题,有很多好处,服务器简单了,除了干缓存服务这件事情,其他什么都不管,简单就是美嘛。这也是我为什么特别欣赏memcached的原因,他的设计实在太简单了,功能也非常简单,几乎一点浪费都没有(当然,这是整体设计而言,实现细节有的地方还是需要改进,比如以前的文本协议,内部的锁等,都有改进的余地)。另外,在客户端处理其实更容易容错,毕竟在靠近数据的地方处理,总会在另外一端容易,我发送失败了还可以选择其他策略,如果在接收端处理,这个就麻烦多了,就算再回到客户端,这个效率都差很多。

 

然后,就是具体的策略问题了。2N的策略没必要,也不一定完全可靠,上一篇已经讨论过了,其实关键的是我们不需要完全 可靠。我们主要来探讨N+n(n<<N)的方案。这其实是讨论中二柱哥提到的方案,我这里简单的在这个场景描述一下,不知道理解是否正确,更专业的可以参考FEC(向前纠错)

 

在我们这里,所谓的N+n方案,实际上就是将系统的数据划分为N份,即提供N个节点,然后同时提供n个额外的节点,当根据原来的方案在N中找不到(N中的某节点挂了),这时候这个节点可以由n中的一个来顶替,当N中那个挂掉的节点恢复的时候,让他回到n中去,这样,就可以很大程度上保证整个farm的可用性,实际上应该比传统的每一台都一主一备的还好(2N方案)。当然,这是在N不算很小的时候才会有意义,否则N为1的话,就退化成主备的方案了。

 

在cache的客户端实现这个算法实际上并不困难,似乎方案很不错了,只需要适当调整n的大小就可以了。但是这里有一点漏洞,这一点,二柱哥也提到了(偶像啊),原话:

一个系统内,关于冗余的设计最好能单点控制, 不然容易出现震荡

如果没有这样的经历的话,很容易忽略掉这个问题,想象一下,如果按照我们上面的方案去做,我们需要在每个客户端去对N和n中的每个节点维护他的状态,记录是否可用,然后根据情况来执行算法,问题就在于每个客户端瞬时检测到的节点状态不一定一致,这时候就会发生震荡,因此我们需要想办法来在一个单点来控制这些冗余。

 

如何设计这个单点又是一个问题,我也没很好的想法,大家讨论讨论吧。

 

 

 

分享到:
评论

相关推荐

    redis缓存服务器

    通过理解这些基本概念和特性,你可以根据实际需求有效地利用 Redis 缓存服务器来优化应用程序性能,提高系统响应速度,并确保数据的安全性和一致性。无论是在 web 应用、数据统计、实时分析还是消息传递等领域,...

    squid缓存服务器的配置

    Squid是一个高性能的代理缓存服务器,主要用于加速Web浏览,减少对外部网络的带宽需求,提高响应速度,以及提供一定的安全性和访问控制功能。在企业、教育机构或任何大型网络环境中,Squid作为缓存服务器的应用极为...

    详解大型网站web服务器缓存.zip

    CDN还能通过分散流量,增强网站的可用性和抗攻击能力。 其次,反向代理缓存是指在Web服务器前设置一个代理服务器,这个代理服务器会接收用户的请求,并将结果缓存起来。当后续的相同请求到来时,代理服务器可以直接...

    redis做mysql缓存服务器(公司内部培训资料)

    此外,Redis还实现了主从复制机制(Master-Slave),使得数据可以在多台服务器之间同步,从而实现高可用性和负载均衡。 Redis不仅能够作为一个简单的缓存系统,还能作为消息队列中间件、实时数据分析平台等多种角色...

    memcached 分布式缓存服务器

    **memcached 分布式缓存服务器** `memcached` 是一款高效、轻量级的分布式内存对象缓存系统,主要用于缓解数据库的负载压力,通过在内存中存储数据,提高网络应用的数据读取速度。它广泛应用于网站开发、API服务、...

    03-VIP-Redis缓存高可用集群(预习)1

    1. **哨兵模式**:在Redis 3.0以前,哨兵(Sentinel)系统常用于实现高可用性。哨兵监控Master节点状态,一旦检测到Master故障,会自动执行主从切换,将健康的Slave提升为新的Master。然而,哨兵模式有其局限性,如...

    jcs 缓存服务器

    **JCS缓存服务器详解** Java Cache System(JCS)是一种高效的、可扩展的、分布式的内存缓存系统,主要用于提高应用程序的性能和响应速度。它通过将数据存储在内存中,避免了频繁的数据库访问,从而减少了I/O操作,...

    基于HAProxy的高性能缓存服务器nuster.zip

    HAProxy是一款广泛使用的开源负载均衡器,它能有效地分配网络流量,提高服务的可用性和响应速度。Nuster则是一个专门针对HTTP代理和RESTful NoSQL缓存服务优化的解决方案。 描述中提到,Nuster是基于HAProxy的,...

    定时更新服务器缓存信息

    另一方面,如果缓存管理不当,则可能导致缓存雪崩或穿透等问题,严重影响服务的可用性与稳定性。 #### 定时更新缓存信息原理 本案例中的代码实现了一个简单的定时更新缓存信息的功能。具体来说,该代码通过检测缓存...

    先锋缓存类-测试可用

    总的来说,“先锋缓存类-测试可用”是一个针对ASP环境的缓存解决方案,它提供了对数据缓存、管理和维护的工具,旨在优化asp页面的运行效率,减少对底层数据源的依赖,从而提高网站的整体性能。通过理解和熟练使用这...

    php+redis服务器的缓存类

    Redis还提供了持久化选项,防止数据丢失,并可通过主从复制实现高可用性。 3. **PHP Redis扩展**:PHP通过一个名为`phpredis`的扩展与Redis通信。这个扩展提供了丰富的API,允许开发者执行各种Redis命令,包括设置...

    cpp-分布式缓存服务器memcachedb

    **分布式缓存服务器Memcachedb详解** Memcachedb是一个基于Memcached的开源项目,由新浪公司的开发团队设计并推出。它的主要目标是在原有Memcached的基础上引入了持久化存储功能,同时实现了异步主辅复制机制,以...

    大型分布式系统中的缓存架构

    CDN(Content Delivery Network)是一种分布式网络服务,通过在全球范围内部署多个缓存服务器,将内容分发到离用户更近的地方。当用户请求内容时,CDN会利用全局负载均衡技术,将请求导向最近的缓存服务器,以减少网络...

    Squid cache(简称为Squid)代理缓存服务器

    3. **负载均衡**:通过配置,Squid可以作为负载均衡器,将请求分散到多个后端服务器,防止单一服务器过载,确保服务的稳定性和可用性。 4. **内容过滤**:管理员可以利用Squid的过滤功能阻止特定类型的内容,例如...

    缓存一致性问题与解决方案

    - **降级策略**:在极端情况下启用降级逻辑,如返回默认值或预设信息,保证服务可用性。 **缓存击穿、穿透、雪崩问题**: - **缓存击穿**:大量请求同一已失效的缓存项,直接请求数据库,可能导致数据库压力过大。...

    Web应用服务器缓存浅谈PPT

    它将数据分布在多台服务器上,提供高可用性和可扩展性。在高并发的Web应用中,分布式缓存能够确保服务的稳定性和性能。 接下来,我们将深入探讨缓存策略。常见的缓存策略有LRU(最近最少使用)、LFU(最不经常使用...

Global site tag (gtag.js) - Google Analytics