当前位置: 首页 > news >正文

前端容灾

什么是容灾

容灾的概念始于后端,指当遇到某个服务器或某个机房发生自然灾害、断网断电等情况下的应急办法,可以保证服务依然可用。 新入行的小伙伴可能有疑问,都断网断电了怎么可能保证网站还可以正常访问那?其实这是对大型网站,理解不深导致的,你认为的网站是这样的

单机


像这种单机的服务自然没法做什么容灾了,这一台机器挂了服务也就挂了。但现在的大型网站,早就不是上图那个样子了,而是这样 多机 甚至这样 集群

最外层那个抗压的服务器一般是Nginx或Apache ,可以做到当某台机器挂了以后屏蔽掉那台机器,这就是后端容灾的基本手段之一,通过集群做到高可用。

说这些只是想让你理解什么是容灾,这不是今天的重点。今天的重点是前端容灾

什么是前端容灾

前端容灾指的是当后端接口挂了,依然可以保证页面展示信息完整。我们以百度首页中新闻模块举例,当你打开百度的时候,服务端渲染好的页面出来以后,需要请求新闻接口拿到数据渲染新闻模块。你的老板告诉你,不论任何情况,必须展示新闻和广告,即使新闻接口挂了。这个时候怎么办,也就是前端容灾的范畴了。

前端容灾可用手段

localstorage缓冲接口数据

新闻模块的接口,每次有返回的时候,都存入localstorage中,以接口路径为key,返回数据为value,当新闻接口请求失败的时候先从localstorage中读上次成功请求时候的数据,展示出来。

备份一份静态数据到CDN

让业主方同学提供一份兜底新闻数据,存放在CDN上,新闻接口返回失败,用户localstorage中也没有数据的时候,去CDN对应地址拉取数据渲染

利用Service worker的caches API做页面接口缓存

Service worker提供了fetch事件可供监听,当页面发出请求的时候,会先过fetch方法,你可以在这里定义任何你需要的缓存策略,比如请求成功后,将结果存入caches。Service worker中,你甚至可以缓存当前页面的HTML,让网站离线运行。

通过上面这些手段,可以保证只要给用户吐出HTML就能保证页面完整性。对于让页面始终可吐出HTML这件事,那就又属于后端,运维同学所做的了。可以借助上面我介绍到的集群的方式,也可以通过CDN的方式(动态DNS)来解决。

上面三种,是笔者在工作中使用过的前端容灾手段,如果你有更好的想法,可以在评论区告诉我,感谢


原文发布时间:06月22日

原文作者:GeoffZhu

本文来源掘金如需转载请紧急联系作者

相关文章:

  • 学习 服务器部署 hello world
  • Java 基础 之 位运算
  • java泛型使用
  • 【RocksDB】TransactionDB源码分析
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 2-快速填充单元格
  • Linux学习笔记之文件系统
  • 所谓死锁
  • Linux下函数调用堆栈帧的详细解释【转】
  • Array.some()方法
  • python浏览器自动化测试库【2018/7/22-更新】
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 剥开比原看代码12:比原是如何通过/create-account-receiver创建地址的?
  • ubuntu 出错 /etc/sudoers is world writable
  • J2ee分布式架构 dubbo + springmvc + mybatis + ehcache + redis 技术介绍
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • canvas 高仿 Apple Watch 表盘
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Fabric架构演变之路
  • php的插入排序,通过双层for循环
  • spring cloud gateway 源码解析(4)跨域问题处理
  • windows-nginx-https-本地配置
  • zookeeper系列(七)实战分布式命名服务
  • 创建一种深思熟虑的文化
  • 动态规划入门(以爬楼梯为例)
  • 后端_MYSQL
  • 来,膜拜下android roadmap,强大的执行力
  • 配置 PM2 实现代码自动发布
  • 悄悄地说一个bug
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 用简单代码看卷积组块发展
  • nb
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​卜东波研究员:高观点下的少儿计算思维
  • # .NET Framework中使用命名管道进行进程间通信
  • #include<初见C语言之指针(5)>
  • #图像处理
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • $.proxy和$.extend
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (七)理解angular中的module和injector,即依赖注入
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)程序员技术练级攻略
  • (转)项目管理杂谈-我所期望的新人
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET BackgroundWorker
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET Core IdentityServer4实战-开篇介绍与规划