热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

代码中如何应对缓存服务器宕机的情况

今天在演练这样一个场景——假如所有缓存服务器都宕机,而且不能很快恢复,并且假设数据库服务器能够支撑,在代码中如何应对这样的情况
今天在演练这样一个场景——假如所有缓存服务器都宕机,而且不能很快恢复,并且假设数据库服务器能够支撑,在代码中如何应对这样的情况?

之前的做法是在读缓存的地方捕获异常并写入日志,然后直接从数据库读取数据;在写缓存的地方捕获异常并写入日志,继续后续处理。这样看起来不错,虽然缓存服务器宕机,但程序可以继续工作,虽然速度慢一些,但不会让网站服务中断,然后只要把缓存服务器恢复即可。

但是如果缓存服务器宕机时,访问量很大,每一个操作缓存的地方都抛异常、写日志,这是两个开销很大的操作,大量的这样的操作会给Web服务器带来很大的压力。有没有更好的解决方法呢?

当操作缓存时抛出了第一个异常,我们就已经知道缓存服务器发生了故障。接下来对缓存的任何操作不仅没有必要,而且由此产生的异常会带来额外的开销、影响性能。只要我们通过一种方式在知道缓存服务器发生故障的第一时间通知后续缓存操作代码不要进行缓存操作,就能解决这个问题。

我们想到的一个解决方法是通过全局静态变量,该全局静态变量保存缓存服务器当前可用状态,只要有一个操作缓存的地方出现异常就将该变量置为不可用状态,并写日志、发通知。每一个操作缓存的地方在操作前先检查一下这个全局静态变量,一发现缓存服务器不可用,就放弃操作缓存,进入无缓存情况下的操作流程。当我们得知缓存服务器宕机后,先专心把缓存服务器恢复正常运行,然后更新一下这个全局静态变量即可。

这又是一个看起来不错的解决方法。但是全局静态变量只能在当前应用程序的当前进程中全局,无法在Web Farm(比如使用负载均衡,同一个应用程序运行于多台服务器上)与Web Garden(同一个应用程序运行于同一台服务器的多个进程中)的场景中全局。所以采用这个解决方法,缓存服务器宕机时,每个进程都要进行捕获异常、设置全局静态变量的操作,虽然不是最佳解决方法,但总比异常满天飞要好很多。还有一个更头疼的问题,就是在缓存服务器恢复正常后,如何将这些全局静态变量恢复为可用状态?无法代码进入每一个进程中进行操作,目前我们只想到一个解决方法——重启应用程序(如果是IIS,回收应用程序池)。

有没有更好的解决方法呢?继续思考,也期待你的良计妙策

推荐阅读
  • 深入理解一致性哈希算法及其应用
    本文详细介绍了分布式系统中的一致性哈希算法,探讨其原理、优势及应用场景,帮助读者全面掌握这一关键技术。 ... [详细]
  • MySQL 高性能实战教程
    本课程深入探讨 MySQL 的架构、性能调优、索引优化、查询优化及高可用性等关键领域。通过实际案例和详细讲解,帮助学员掌握提升 MySQL 数据库性能的方法与技巧。 ... [详细]
  • 本文介绍了数据库体系的基础知识,涵盖关系型数据库(如MySQL)和非关系型数据库(如MongoDB)的基本操作及高级功能。通过三个阶段的学习路径——基础、优化和部署,帮助读者全面掌握数据库的使用和管理。 ... [详细]
  • Nginx 反向代理与负载均衡实验
    本实验旨在通过配置 Nginx 实现反向代理和负载均衡,确保从北京本地代理服务器访问上海的 Web 服务器时,能够依次显示红、黄、绿三种颜色页面以验证负载均衡效果。 ... [详细]
  • 在项目中使用 Redis 时,了解其不同架构模式(如单节点、主从复制、哨兵模式和集群)对于确保系统的高可用性和扩展性至关重要。本文将详细探讨这些模式的特点和应用场景。 ... [详细]
  • 深入解析Spring Cloud微服务架构与分布式系统实战
    本文详细介绍了Spring Cloud在微服务架构和分布式系统中的应用,结合实际案例和最新技术,帮助读者全面掌握微服务的实现与优化。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 使用LVS与ldirectord实现高可用负载均衡
    本文介绍了如何通过LVS(Linux Virtual Server)结合ldirectord工具来实现服务器的健康检查及负载均衡功能。环境设置包括一个LVS节点和两个真实服务器节点,通过配置ldirectord进行健康状态监测,确保系统的高可用性。 ... [详细]
  • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
  • 探讨GET与POST请求数据传输的最大容量
    在Web开发领域,GET和POST是最常见的两种数据传输方法。本文将深入探讨这两种请求方式在不同环境下的数据传输能力及其限制。 ... [详细]
  • 本文提供了一套实用的方法论,旨在帮助开发者构建能够应对高并发请求且易于扩展的Web服务。内容涵盖了服务器架构、数据库管理、缓存策略以及异步处理等多个方面。 ... [详细]
  • 一面问题:MySQLRedisKafka线程算法mysql知道哪些存储引擎,它们的区别mysql索引在什么情况下会失效mysql在项目中的优化场景&# ... [详细]
  • 本文详细探讨了虚拟化的基本概念,包括服务器虚拟化、网络虚拟化及其在云计算环境中的应用。特别强调了SDN技术在网络虚拟化和云计算中的关键作用,以及网络虚拟化技术如何提升资源利用效率和管理灵活性。 ... [详细]
  • 利用GitHub热门资源,成功斩获阿里、京东、腾讯三巨头Offer
    Spring框架作为Java生态系统中的重要组成部分,因其强大的功能和灵活的扩展性,被广泛应用于各种规模的企业级应用开发中。本文将通过一份在GitHub上获得极高评价的Spring全家桶文档,探讨如何掌握Spring框架及其相关技术,助力职业发展。 ... [详细]
  • 本文详细介绍了反向代理与负载均衡的概念及其在Nginx中的应用。反向代理主要用于将客户端请求转发到后端服务器,而负载均衡则通过分发请求来提高系统的响应速度和可用性。 ... [详细]
author-avatar
berryhu
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有