InfoQ 极客传媒 15 周年庆征文|PassJava 网站生产级事故复盘
你好,我是悟空。
今天读者群里反馈我的网站 passjava.cn
崩了,上去一看果然崩了。
原因就是我的网站引用了这个站点 cdn.jsdelivr.net
的静态文件,而这个站点崩了!
它是一个国际的免费的 CDN 站点,很多公开的 npm 包、Github 仓库,都可以使用它来作为静态资源服务器,而且很多国内和国外的知名网站都用了。
有些同学可能对 CDN 不了解,这里做个说明:
内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
这个 CDN 是免费的、速度又快,白用它谁说不香呢?是真的吗?
我们生产环境前几个月爆过一次雷,客户反馈后台管理系统崩了,也是因为引用这个站点的 JS 脚本文件加载不出来的问题。
恰巧前天晚上我其实也发现了这个站点访问不了,但过了一个小时后就恢复访问了。报错截图如下所示:
但昨天下午读者又反馈长时间不能访问,那这个就是生产级 T0 的事故了。遇到这种情况怎么办?
关于修复方案
先安抚读者情绪。
将问题原因用能听懂的话描述出来。
提供一个修复方案。
提供修复完成的时间。
下班后,我就赶紧开始修复了,其实修复方案也挺简单,就是把所有引用这个 CDN 的静态文件替换成一个可以访问的链接就可以了。具体修复方案如下:
先将 cdn.jsdelivr.net 的静态文件一个一个全部下载下来(浏览器直接输入这个文件链接,然后保存下来)。我的网站上引用了 javascript 脚本、css 文件、json 文件。
然后将这些下载的静态文件全部都放到自己的服务器或者 CDN 上。
替换自己的网站里面的链接。
这里有个问题:这个网站 cdn.jsdelivr.net 已经崩了,如何能下载上面的静态文件?
方案一:等网站恢复后再下载,不断重试,有几率一直访问不了。
方案二:我已经把我用到的静态文件上传到 GitHub 了,如果你用的也是 docsify 框架搭建的网站,可以直接访问这个 Github 下载。
https://github.com/Jackson0714/static-files/tree/main
关于 CDN
我个人是买了七牛云 CDN 服务和对象存储的,网站流量不大,所以资费不贵。首先把文件都丢到七牛云的对象存储里面,然后拿到文件对应的 CDN 地址,替换到自己的网站中。注意:有些 js 脚本的代码中也引用了 cdn.jsdelivr.net 的文件,所以还需要改 js 脚本代码,比如我引用的 github 上的 autoload.js 文件里面就有。
如果没有自己购买 CDN 服务,直接上传到大厂商的对象存储也行,比如七牛云、阿里、腾讯的对象存储,这几家都提供了免费的空间。上传到自己的公开的对象存储上之后,就可以拿到静态文件的公有链接了。
如下图所示,我上传到了七牛云上面的对象存储上了,同时七牛云会提供一个 CDN 的链接给我。
另外需要注意的是如果覆盖上传了文件到自己的对象存储后,则需要刷新下 CDN,不然网站加载的文件还是之前上传的,导致网站上看不到改动的效果。如下图所示的刷新界面,填入刷新的目录,点击刷新就可以了,不过有刷新限制,不要频繁刷新。
网站恢复
好了,经过 2 个小时的紧急修复:下载文件、修改 js 脚本、上传文件、刷新 CDN、替换链接等一系列操作,我的小破站终于恢复正常了。赶紧在群里给读者反馈网站恢复了。但问题是读者们把我的这个月的绩效扣没了。。。
最后再说一句,我的小破站买的最低配的服务器,别给我的网站压测了😂,在此蟹蟹了🙏。
电脑端访问:www.passjava.cn
评论 (1 条评论)