快速让生产环境服务进入维护熔断模式

了解如何在不改动一行代码、不停止任何内网服务的前提下,使用 orbitproxy 云端点的维护模式在网关层对生产流量进行熔断,并向访问者展示清晰的维护说明。

生产环境的服务总有需要“暂时不对外”的时刻:版本发布、数据库迁移、依赖组件升级,或者线上突发故障需要立即止血。此时你通常面临几个问题:

  • 直接停掉服务,访问者看到的是空白页面或者浏览器的连接错误,没有任何说明,体验和品牌形象都会受损
  • 在应用内部实现维护开关,需要修改代码并重新发布,而这恰恰是你最不想在故障时做的事
  • 异常请求持续打进来,不断消耗已经不稳定的内网服务,让恢复变得更困难

orbitproxy 的维护模式把这个能力前移到了网关:开启之后,所有访问该域名的流量由云网关直接熔断,不再转发给内网服务,访问者收到的是一个带有明确状态的维护页面。你的服务本身不需要做任何配置变更。

在这个案例中你将了解到什么

在本用例中,你将学习如何使用 orbitproxy 保护生产环境在维护期间不被访问:

  1. 如何一键让云端点进入维护熔断模式,并确认流量已被网关拦截
  2. 如何为维护页面定制具备品牌调性的展示内容
  3. 如何在维护完成后恢复流量,并通过访问日志确认维护期间的访问情况

你需要准备什么

一个正在工作的 HTTPS 云端点:维护模式作用于 HTTPS 云端点。如果你还没有创建,可以先参考使用orbitproxy作为你任何服务的流量入口完成创建

维护模式目前仅支持 HTTPS 云端点。TCP 云端点的操作菜单中不会出现“进入维护”。

1. 确认服务当前正常工作

在进入维护之前,先确认你的云端点能够正常转发流量。请求你的域名:

terminal
curl -i https://$YOUR_DOMAIN

此时你应该能得到内网服务正常返回的响应。保留这次结果,后面用来和维护期间的响应做对比。

2. (可选)准备你的维护页面

如果你什么都不做,维护期间访问者会看到 orbitproxy 默认的维护页面,状态码为 590,提示“服务正在维护中,请耐心等待,如有特殊请求请联系官方客服”。

如果你希望维护页面展示自己的品牌、预计恢复时间或者客服渠道,可以提前为 590 状态码配置自定义响应。具体的配置方式请参考自定义异常页面,在添加规则时将状态码选择为 590 维护中,并填写你自己的维护页面 HTML 即可。

自定义响应内容需要经过审核,通常在 1 小时内完成,因此建议在计划维护之前提前配置好。对于突发的故障维护,直接使用默认页面即可。

3. 让云端点进入维护模式

在 orbitproxy 控制中心的HTTPS/TCP云端点页面中找到需要维护的云端点:

  1. 点击卡片右上角的 Action 操作按钮
  2. 点击 进入维护
云端点 Action 菜单中的进入维护
  1. 在弹出的确认框中确认。确认框会提示:进入维护状态以后,所有访问该域名的流量将会被 orbitproxy 云网关进行熔断,维护期间不再转发给内网服务

确认之后,云端点的公网地址旁会出现 维护中 标记,表示熔断已经生效。

4. 验证熔断已经生效

再次请求你的域名:

terminal
curl -i https://$YOUR_DOMAIN

这一次请求不会再到达你的内网服务。你将得到状态码 590,响应内容是维护页面:如果你完成了第 2 步,看到的是你自己配置的页面,否则是 orbitproxy 默认的维护页面。

orbitproxy 默认维护页面

此时你可以放心地处理内网服务:重启、发布、迁移数据,或者排查问题,都不会有外部流量打进来。

维护期间,所有访问该域名的请求都会被熔断,包括第三方系统发来的 Webhook 回调和 API 调用。如果你的服务依赖这些回调,请提前评估对上下游的影响。

5. 在访问日志中查看维护期间的访问

维护期间被拦截的请求并不会凭空消失。如果你为云端点配置了访问日志,可以在控制中心的云端点访问日志中,通过错误码筛选 维护模式,查看维护期间有多少请求被熔断、来自哪里。

维护期间被熔断的访问日志

这对于评估维护窗口对业务的影响,以及判断是否存在异常的访问来源都很有帮助。

6. 维护完成,恢复流量

维护完成并确认内网服务恢复正常之后,回到 HTTPS/TCP 云端点页面:

  1. 点击对应云端点卡片右上角的 Action 操作按钮
  2. 点击 关闭维护
  3. 在确认框中确认。确认框会提示:关闭维护状态后,内网服务将正常收到公网请求流量,请保证服务正常可用

“维护中”标记消失后,云端点恢复转发。再次执行 curl 请求,确认响应已经回到第 1 步中的正常结果。

关闭维护意味着流量会立刻重新进入你的内网服务。请在服务确认可用之后再执行这一步,避免恢复瞬间出现新的故障。

接下来是什么?

  • 使用自定义响应为 502、503、504 等其他异常状态也配置品牌化的页面
  • 使用访问日志完整记录并追踪进入你服务的每一个请求