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

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

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

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

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

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

有没有更好的解决方法呢?欢迎提出宝贵的意见。

[

如何应对缓存服务器宕机的情况相关推荐

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

    今天在演练这样一个场景--假如所有缓存服务器都宕机,而且不能很快恢复,并且假设数据库服务器能够支撑,在代码中如何应对这样的情况? 之前的做法是在读缓存的地方捕获异常并写入日志,然后直接从数据库读取数据 ...

  2. 如何在不会导致服务器宕机的情况下,用 PHP 读取大文件

    来自:开源中国 www.oschina.net/translate/performant-reading-big-files-php 作为PHP开发人员,我们并不经常需要担心内存管理.PHP 引擎在我 ...

  3. 游戏服务器宕机应对措施

    原文地址:服务器又宕机了,怎么办? 理想情况 对于一般的MMOG来说,玩家在进入游戏时会从数据库中将该玩家的所有相关数据读到内存,以便快速的进行游戏逻辑的处理,而在玩家下线时再将数据的改动存回数据库. ...

  4. 服务器高并发处理/服务器宕机了怎么处理?

    服务器高并发处理/服务器宕机了怎么处理? 高并发问题是大部分服务器都经历过的,由于资源的有限性,其同时处理请求的能力自然也有限制.当高并发出现时,服务端的处理和响应速度会大幅降低,更严重的会使服务器崩 ...

  5. linux服务器宕机分析/性能瓶颈分析

    linux服务器宕机分析/性能瓶颈分析 服务器宕机原因很多,资源不足.应用.硬件.系统内核bug等,以下一个小例子 服务器宕机了,首先得知道服务器宕机的时间点,然后分析日志查找原因 1.last re ...

  6. 一次硬盘问题引起的服务器宕机

    根据错误日志来看 似乎是硬盘的问题,检查一下看看 使用Megacli,没有返回 为啥SAS 6i/R的raid信息用MegaCli64命令就获取不到呢,SAS 6/iR 只支持2块硬盘做raid0或者 ...

  7. 谷歌公布 12 月 14 日服务器宕机的主要技术原因

    谷歌技术团队于 18 日发布了谷歌 12.14 服务器宕机事件的完整报告. 问题摘要 2020 年 12 月 14 日星期一,需要谷歌 OAuth 访问且面向客户的谷歌服务出现死机,并持续了 47 分 ...

  8. Nginx负载均衡,服务器宕机问题

    如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...

  9. 从春运分析服务器宕机原因

    春运,这一号称人类历史上规模最大的周期性人类大迁徙,2011年如期而至,在从1月19日开始为期40天左右的时间内,铁道部预计客流量将达28.5亿人次,快要把我国大众运个来回了.如此浩大的客流,造就了一 ...

最新文章

  1. 百度翻译Q1 DAU增长40%,疫情期学生在线学习率猛增
  2. 开启2020高效办公,从团队知识管理开始
  3. Mysql-cluster环境配置
  4. Mesos源码分析(8): Mesos-Slave的初始化
  5. step5 . day1 网络编程基础知识
  6. 爱说说技术原理:前后台参数约定及逻辑代码(三)
  7. 山寨版 颈椎病治疗秘籍
  8. entity framework5 sqlserver2005 事务(TransactionScope)报未启用MSDTC错误解决办法
  9. windows nginx 停止和启动_大数据离线项目实践之nginx服务器搭建
  10. UICollectionView 应用
  11. linux下-bash: ls: command not found
  12. @Autowired 与@Resource的区别
  13. 支付即服务、门店小程序、微信先享卡分别亮相,微信支付持续助力行业数字化升级
  14. 关于 react的生命周期
  15. docker ubuntu安装python_BAT架构师手把手教你如何使用Docker安装GPU版本caffe2
  16. 5.MongoDB之正则表达式与聚合框架
  17. Windows下安装dilb解决方法
  18. vue项目使用SockJS插件实现webSocket通信
  19. 短视频源码APP开发,短视频的功能
  20. PYTHON处理MOD/MYD11(LST)产品

热门文章

  1. 音乐发烧友必备听歌神器foobar2000-可视化音乐配置
  2. 电站锅炉烟气SCR脱硝改造
  3. 腾讯帝国靠抄袭崛起?
  4. 小强不一样的2015总结,不煽情不装逼,只是很直白而已
  5. android设置主题的方法,Android_修改Android App样式风格的方法,android中可以自定义主题和风格 - phpStudy...
  6. 微信商户发红包和获取用户信息
  7. 深圳—顺德—广州—深圳
  8. 三星手机gt-i8558操作系统android 4.2开启辅助功能,安卓系统android4.2,4.2.1,4.2.2usb调试模式打开教程...
  9. 对于c++项目webserver的此站点的连接不安全
  10. WebService教程