写点什么

看到这个应用上下线方式,不禁感叹:优雅,太优雅了!

  • 2022 年 8 月 08 日
  • 本文字数:1092 字

    阅读完需:约 4 分钟

看到这个应用上下线方式,不禁感叹:优雅,太优雅了!

什么是优雅上下线


试想一个 A 场景,系统中运行着一个消费者(客户端)和两个服务提供者(服务端),消费者可负载均衡调用服务提供者。假设某个服务提供者因业务更新或其他场景需要滚动升级,若此时存在大量并发流量,便会出现以下问题:


  • 大量 TCP 连接因服务提供者升级下线操作,导致大量请求错误。

  • 由于消费者(客户端)存在注册表延迟刷新的问题,后续流量依旧会分配到已经下线的提供者,导致大量请求错误。


以上便是一个典型的“不优雅”场景。


于是,为了规避诸如此类的问题,服务优雅上下线应运而生,主要针对服务的重启、上线、下线等操作提供保护。

服务运维常见问题


  1. 服务自身存在大量懒加载机制(例如负载均衡初始化),在服务刚上线时,因并发流量请求涌入,导致大量请求同时进行懒加载,以至于请求响应慢,线程阻塞,甚至最终导致服务崩溃。

  2. 服务无法做到优雅下线,就如前面提到的 A 场景,服务端下线而客户端服务无法及时感知,导致流量流入已下线的实例,从而丢失大量流量。

优雅上下线提供了什么样的能力


  • 服务端预热能力


服务端预热是基于客户端实现的,当流量进入时,Sermant Agent 会动态调整流量,根据服务的预热配置,对流量进行动态分配。对于开启服务预热的实例,在刚启动时,相对于其他已启动的实例,分配的流量会更少,流量将以曲线方式随时间推移增加直至与其他实例近乎持平。目的是采用少流量对服务实例进行初始化,防止服务崩溃。


  • 优雅下线能力


优雅下线结合服务端与客户端实现,主要实现点如下:


  • 反注册



当服务端被要求下线时,Sermant Agent 会动态根据当前注册中心进行反注册操作,及时刷新注册表,然而即使注册表已刷新,但是上游消费端因缓存问题却无法及时感知,从而引入下线通知。


  • 下线通知



进行反注册后,Sermant Agent 会采用接口通知与响应通知的方式告知所有上游,并主动同步刷新 provider 实例缓存。


  • 黑名单



为保证流量不再调用已下线实例,引入黑名单机制。在客户端接收到下线通知后,自动将下线实例拉入黑名单,在执行流量分配时,自动过滤黑名单(已下线)实例,不再调用已下线实例。

说明:黑名单采用定时刷新机制,默认为 2 分钟,即针对同一个 IP 实例,标记下线后,等待 2 分钟即可重新发现。


  • 流量统计


为确保当前请求已全部处理完成,在服务下线时,Sermant Agent 会尝试等待 30s(可配置),定时统计和判断当前实例请求是否均处理完成,处理完成后最终下线。

如何使用优雅上下线能力

虚机场景


参考虚拟机场景使用优雅上下线能力

容器场景


参考CCE场景使用优雅上下线能力

基于 Demo 验证优雅上下线能力


以 Nacos demo 应用为例,通过 Sermant Agent 接入 CSE,并在 CCE 集群上验证优雅上下线功能,参考自定义优雅上下线


点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 4
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
看到这个应用上下线方式,不禁感叹:优雅,太优雅了!_云计算_华为云开发者联盟_InfoQ写作社区