文档说明
应急服务
在面对紧急情况时,比如:网站备案、网站重新备案、域名过期、服务器宕机等意外事故,需要有应对措施和策略。下面我们准备了一个应急方案,主要应对当网站重新备案需要关站时,此时依赖国内CDN的服务统统都不能用了,只能使用境外源站。本方案没有完全考虑源站宕机的情况,但会适当使用负载均衡的方法而有所兼顾。
1.我们准备了所有应急域名(重要)
域名 | 别名 | 备用域名 |
www.webcache.cn | www | www.upcache.cn |
lib.webstatic.cn | lib | lib.upcache.cn |
font.webstatic.cn | font | font.upcache.cn |
cdnjs.webstatic.cn | cdnjs | cdnjs.upcache.cn |
npm.webcache.cn | npm | npm.upcache.cn |
code.webcache.cn | code | code.upcache.cn |
code-ext.webcache.cn | code-ext | code-ext.upcache.cn |
code-dev.webcache.cn | code-dev | code-dev.upcache.cn |
cdn.webcache.cn | cdn | cdn.upcache.cn |
以上应急域名在非应急状态下均解析为跳转到正常域名,可在应急状态过渡期提前使用。
2.我们搭建了一个状态服务(getstatus.webcache.cn)
本状态服务除了显示本站旗下各个服务的运行状态以外,更重要的是可以查询本站状态,比如:是否为应急状态。然后,网站开发者用户在调用我们的服务地址时,需要先查询这个状态,从中可以得到各个服务的应急域名。本状态服务比较简单,不强依赖特别环境,所以没有考虑域名不可用的情况,但会使用负载均衡和容灾切换措施来保证该服务一直都能用,为最高保障优先级。
下面来说说具体的使用方法:
1)首页可以看本站旗下各个服务的运行状态,且可以邮件订阅,方便及时接收我们服务的最新状态。由于使用的是第三方服务,限于该服务收费价格和有限的免费,我们采取结合当前服务的活跃度和资金状况来使用该服务。
2)通过此URL地址“https://getstatus.webcache.cn/”获取基本状态,也可以使用JS调用查询。具体URL参数如下:
参数 | 可选值 | 必填 | 说明 |
format | json, jsonp | 否 | 以JSON/JSONP格式输出,内容更详细 |
rescue | 1, true, 0, false | 否 | 模拟设定为应急状态,可查看应急状态下的域名,方便调试。必须配合format参数一起使用 |
callback | 默认为callback | 否 | 回调函数名, JSONP方式调用时需要 |
默认不带参数输出为正常状态,格式为“<状态值>, <状态文本>”,如下:
1, 正常
按JSON格式输出为:
{
"status": 1,
"status_text": "正常",
"status_description": ""
}
按JSONP格式输出为:
callback({
"status": 1,
"status_text": "正常",
"status_description": ""
});
应急状态下,输出为:
{
"status": 4,
"status_text": "应急服务中",
"status_description": "",
"domains": {
"www": "www.upcache.cn",
"lib": "lib.upcache.cn",
"font": "font.upcache.cn",
"cdnjs": "cdnjs.upcache.cn",
"npm": "npm.upcache.cn",
"code": "code.upcache.cn",
"code-ext": "code-ext.upcache.cn",
"code-dev": "code-dev.upcache.cn",
"cdn": "cdn.upcache.cn"
}
}
以下为所有站点状态信息:
值 | 状态 | 说明 |
-1 | 暂停 | |
0 | 停止 | |
1 | 正常 | |
2 | 建设中 | |
3 | 维护中 | |
4 | 应急服务中 | 会输出对应域名 |
5 | 异常 |
目前,本站切换状态是手动的,在计划切换网站状态之前,会先在状态服务上发布事件通知,包括具体的实施时间,到时才切换网站状态。请务必订阅我们的状态服务,不要错过重要事件及维护您网站的时间档口。
3.我们准备调整网络服务架构,并增加应急状态切换环节
我们当前的网络服务架构:
我们准备去调整的网络服务架构:
其中,黑色圆点虚线代表URL跳转,黑色短杠虚线代表引出服务,红线代表应急服务走向,红色虚线代表准备切换的应急服务走向,黄线代表应急服务前置过渡走向,蓝线代表容灾切换的备用IP解析走向,青桔线代表LVS走向。
相对之前的架构,我们引入了状态服务、LVS负载调度和过渡代理。这里说一下应急服务切换过程,先准备好备用域名,并别名解析到一个节点域名上,该节点域名高速解析(60秒)到过渡代理(nginx服务)上,过渡代理调用状态服务来判断当前网站状态是否为应急服务,不是则URL跳转到正式域名上,此路线为应急服务前置准备。然后,管理员手动到状态服务后台切换状态为应急服务,这时,过渡代理能立即判断并切换到反向代理对应的服务上,不再作URL跳转,此时会有大量来自用户网站的流量流经这里,但此过渡代理,我们只给有限资源。然后,我们下一步立刻切换节点域名的DNS解析到LVS调度器上,所以这一步的DNS解析需要生效快,接着,之前过渡代理上的大量流量会转移到这里,但由于此应急线路没有国内CDN的加持,还是会有较大压力。还有,就是由于全国各地电信运营商的DNS生效时间不一样,有的会比较慢,所以仍然还有少部分流量流经到过渡代理上,但已经是少数了,应该压力不大。恢复网站状态的话,只需对上述2个步骤反向操作就可以了。
以上具体化的数目并不代表实际情况,实际情况会有所微调,甚至会更多一些细节。比如:容灾切换和LVS调度器是有一定难度的,不容易找到便宜服务的。
4.网站开发者须获取到服务域名后再加载资源
此有四种获取方式:
1)在后端引入资源地址时每次都从本站状态服务获取到域名,然后拼接出资源全路径地址输出
2)后端每天定时从本站状态服务中获取到域名,当页面访问时再拼接地址输出
3)如果网站为纯静态页面,没有后端服务的话,则可订阅我们的状态服务,及时接收我们的通知。当我们发布网站切换为应急状态时,您可以及时收到,并修改网站引入我们服务的资源地址,或提前修改好,到时只做切换。
4)如果不嫌麻烦的话,可以考虑使用异步加载资源的方式,使用JSONP方式调用我们的状态服务,从而得到具体域名,见上述参数说明。然后,再拼接资源地址并异步加载。
本服务介绍完毕!当前此服务正在研究部署中,有变动时,将及时更新。
更新时间:2024.09.12