应用发布、服务升级一直是一个让开发和运维同学既兴奋又担心的事情。
兴奋的是有新功能上线,自己的产品可以对用户提供更多的能力和价值;担心的是上线的过程会不会出现意外情况影响业务的稳定性。确实,在应用发布和服务升级时,线上问题出现的可能性更高,本文我们将结合 Serverless 应用引擎(以下简称 SAE)就 Serverless 架构下,讨论如何保障上线过程中服务的优雅下线。
在平时的发布过程中,我们是否遇到过以下问题:
- 发布过程中,出现正在执行的请求被中断?
- 下游服务节点已经下线,上游依然继续调用已经下线的节点导致请求报错,进而导致业务异常?
- 发布过程造成数据不一致,需要对脏数据进行修复。
有时候,我们把发版安排在凌晨两三点,赶在业务流量比较小的时候,心惊胆颤、睡眠不足、苦不可言。那如何解决上面的问题,如何保证应用发布过程稳定、高效,保证业务无损呢?首先,我们来梳理下造成这些问题的原因。
场景分析
这个图描述了我们使用微服务架构开发应用的一个常见的场景,先看下这个场景的服务调用关系:
- 服务 B、C 把服务注册到服务注册中心,服务 A、B 从注册中心发现依赖的服务。
- 业务流量从负载均衡路由到服务 A,在 SLB 上配置服务 A 实例的健康检查,当服务 A 有实例停机的时候,相应的实例从 SLB 摘掉;服务 A 调用服务 B,服