文档说明

了解详细的文档说明及使用细节,可以避免开发时犯错或少犯错,从而节省您的宝贵时间。

应急服务

在面对紧急情况时,比如:网站备案、网站重新备案、域名过期、服务器宕机等意外事故,需要有应对措施和策略。下面我们准备了一个应急方案,主要应对当网站重新备案需要关站时,此时依赖国内CDN的服务统统都不能用了,只能使用境外源站。本方案没有完全考虑源站宕机的情况,但会适当使用负载均衡的方法而有所兼顾。

1.我们准备了所有应急域名(重要)

域名 别名 备用域名
www.webcache.cn www www.qcache.cn
lib.webstatic.cn lib lib.alnk.cn
font.webstatic.cn font font.qcache.cn
cdnjs.webstatic.cn cdnjs cdnjs.qcache.cn
npm.webcache.cn npm npm.qcache.cn
code.webcache.cn code code.qcache.cn
code-ext.webcache.cn code-ext code-ext.qcache.cn
code-dev.webcache.cn code-dev code-dev.qcache.cn
cdn.webcache.cn cdn cdn.qcache.cn

以上应急域名在非应急状态下均解析为跳转到正常域名,可在应急状态过渡期提前使用。

2.我们搭建了一个状态服务(status.webcache.cn)

本状态服务除了显示本站旗下各个服务的运行状态以外,更重要的是可以查询本站状态,比如:是否为应急状态。然后,网站开发者用户在调用我们的服务地址时,需要先查询这个状态,从中可以得到各个服务的应急域名。本状态服务比较简单,不强依赖特别环境,所以没有考虑域名不可用的情况,但会使用负载均衡和容灾切换措施来保证该服务一直都能用,为最高保障优先级。

下面来说说具体的使用方法:

1)首页可以看本站旗下各个服务的运行状态,且可以邮件订阅,方便及时接收我们服务的最新状态。由于使用的是第三方服务,限于该服务收费价格和有限的免费,我们采取结合当前服务的活跃度和资金状况来使用该服务。

2)通过此URL地址“/status”获取基本状态,也可以使用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.qcache.cn",
    "lib": "lib.alnk.cn",
    "font": "font.qcache.cn",
    "cdnjs": "cdnjs.qcache.cn",
    "npm": "npm.qcache.cn",
    "code": "code.qcache.cn",
    "code-ext": "code-ext.qcache.cn",
    "code-dev": "code-dev.qcache.cn",
    "cdn": "cdn.qcache.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.03.21