应对业务服务的发布和服务升级时,线上出现问题的可能性很高,就 Serverless 架构下讨论如何保障上线过程当中服务的优雅下线java
Solomon_肖哥弹架构 跟你们“弹弹” 如何更加优雅的进行服务下线,贯穿南北与东西流量的调度方案。后端
平时发布过程否遇到如下问题:服务器
一般发版安排在凌晨两三点,在业务流量比较小的时候。那如何解决上面的问题,如何保证应用发布过程稳定、高效,保证业务无损。markdown
上图描述了咱们使用微服务架构开发应用的一个常见场景,咱们先看下这个场景的服务调用关系:架构
上图有两类流量app
当服务 A 发布的时候,服务 A1 实例停机后,SLB 根据健康检查探测到服务 A1 下线,而后把实例从 SLB 摘掉。实例 A1 依赖 SLB 的健康检查从 SLB 上摘掉,通常须要几秒到十几秒的时间,在这个过程当中,若是 SLB 有持续的流量打入,就会形成一些请求继续路由到实例 A1,致使请求失败;负载均衡
服务 A 在发布的过程当中,如何保证通过 SLB 的流量不报错?咱们接着看下 SAE 是如何作的。框架
请求失败的缘由在于后端服务实例先中止掉,而后才从 SLB 摘掉,那咱们是否是能够先从 SLB 摘掉服务实例,而后再对实例进行升级呢?less
按照这个思路,SAE 基于 K8S service 的能力给出了一种方案微服务
这就是 SAE 对于应用升级过程当中关于南北向流量的保障方案。
在传统的发布流程中,服务提供者中止再启动,服务消费者感知到服务提供者节点中止的流程以下:
从第 2 步到第 6 步的过程当中,Eureka 在最差的状况下须要耗时 2 分钟,Nacos 在最差的状况下须要耗时 50 秒。在这段时间内,请求都有可能出现问题,因此发布时会出现各类报错,同时还影响用户的体验,发布后又须要修复执行到一半的脏数据。最后不得不每次发版都安排在凌晨两三点发布,心惊胆颤,睡眠不足,苦不堪言。
在传统发布流程中,客户端有一个服务调用报错期,缘由就是客户端没有及时感知到服务端下线的实例。在传统发布流程中,主要是借助注册中心通知消费者来更新服务提供者列表,那能不能绕过注册中心,服务提供者直接通知服务消费者呢?答案是确定的,咱们主要作了两件事情:
经过上面这个方案,就使得下线感知的时间大大减短,从原来的分钟级别作到准实时,确保应用在下线时能作到业务无损。
上文介绍的是 SAE 在处理优雅下线方面的一些能力,在应用升级的过程当中,只有实例的优雅下线是不够的,还须要有一套配套的发布策略,保证咱们新业务是可用的,SAE 提供分批发布和灰度发布的能力,可使得应用的发布过程更加省心省力;
咱们先介绍下灰度发布,某应用包含 10 个应用实例,每一个应用实例的部署版本为 Ver.1 版本,现需将每一个应用实例升级为 Ver.2 版本。
从图中能够看出,在发布的过程当中先灰度 2 台实例,在确认业务正常后,再分批发布剩余的实例,发布的过程当中始终有实例处于运行状态,实例升级过程当中依照上面的方案,每一个实例都有优雅下线的过程,这就保证了业务无损。
再来看下分批发布,分批发布支持手动、自动分批;仍是上面的 10 个应用实例,假设将全部应用实例分 3 批进行部署,根据分批发布策略,该发布流程如图所示,就再也不具体介绍了。
你的点赞与关注 是 Solomon_肖哥弹架构持续的动力。