当前位置:网站首页>看到这个应用上下线方式,不禁感叹:优雅,太优雅了!
看到这个应用上下线方式,不禁感叹:优雅,太优雅了!
2022-08-08 14:53:00 【51CTO】
摘要: 本文讲述基于Sermant Agent接入的SpringCloud应用实现优雅上下线功能。
什么是优雅上下线
试想一个A场景,系统中运行着一个消费者(客户端)和两个服务提供者(服务端),消费者可负载均衡调用服务提供者。假设某个服务提供者因业务更新或其他场景需要滚动升级,若此时存在大量并发流量,便会出现以下问题:
- 大量TCP连接因服务提供者升级下线操作,导致大量请求错误。
- 由于消费者(客户端)存在注册表延迟刷新的问题,后续流量依旧会分配到已经下线的提供者,导致大量请求错误。
以上便是一个典型的“不优雅”场景。
于是,为了规避诸如此类的问题,服务优雅上下线应运而生,主要针对服务的重启、上线、下线等操作提供保护。
服务运维常见问题
- 服务自身存在大量懒加载机制(例如负载均衡初始化),在服务刚上线时,因并发流量请求涌入,导致大量请求同时进行懒加载,以至于请求响应慢,线程阻塞,甚至最终导致服务崩溃。
- 服务无法做到优雅下线,就如前面提到的A场景,服务端下线而客户端服务无法及时感知,导致流量流入已下线的实例,从而丢失大量流量。
优雅上下线提供了什么样的能力
服务端预热能力
服务端预热是基于客户端实现的,当流量进入时,Sermant Agent会动态调整流量,根据服务的预热配置,对流量进行动态分配。对于开启服务预热的实例,在刚启动时,相对于其他已启动的实例,分配的流量会更少,流量将以曲线方式随时间推移增加直至与其他实例近乎持平。目的是采用少流量对服务实例进行初始化,防止服务崩溃。
优雅下线能力
优雅下线结合服务端与客户端实现,主要实现点如下:
- 反注册

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

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

为保证流量不再调用已下线实例,引入黑名单机制。在客户端接收到下线通知后,自动将下线实例拉入黑名单,在执行流量分配时,自动过滤黑名单(已下线)实例,不再调用已下线实例。说明:黑名单采用定时刷新机制,默认为2分钟,即针对同一个IP实例,标记下线后,等待2分钟即可重新发现。
- 流量统计
为确保当前请求已全部处理完成,在服务下线时,Sermant Agent会尝试等待30s(可配置),定时统计和判断当前实例请求是否均处理完成,处理完成后最终下线。
如何使用优雅上下线能力
虚机场景
参考 虚拟机场景使用优雅上下线能力
容器场景
参考 CCE场景使用优雅上下线能力
基于Demo验证优雅上下线能力
以Nacos demo应用为例,通过Sermant Agent接入CSE,并在CCE集群上验证优雅上下线功能,参考 自定义优雅上下线。
边栏推荐
- JS加法器(DOM)
- P8352-[SDOI/SXOI2022]小N的独立集【dp套dp】
- Synergistic authors open source throttling, 2022 trend of technology foresight (asynchronous programming/container technology)
- What is low-code development?Is everyone really optimistic about low-code development?
- Make mistakes small yards artisan study room 】 【 the ladder of the progress of children
- 深度学习中的常见正则化方法(Regularization)以及优化器中的WeightDecay参数详解
- 【小码匠自习室】CSP-J/S复试高分秘诀经验分享
- Common regularization methods in deep learning (Regularization) and detailed explanation of WeightDecay parameters in optimizers
- MySQL:Update高并发下变慢的案例及其涉及的特性
- egg.js框架的基本设置 及 使用
猜你喜欢
随机推荐
【小码匠自习室】ABC084 - D:喜欢这样的大神,超有才华
如何成为团队核心?从写出不可维护的代码开始
浏览器跨域方案,适用于本地调试接口(超简单)
什么是低代码开发?大家都真的看好低代码开发吗?
token系统讲解及过期处理
【小码匠自习室】ABC180-C: 马虎是小孩的天性吗?
IBM3650M4的ESXI主机报警“其他主机硬件对象的状态”
兆骑科创赛事服务平台对接,海内外高层次人才引进
让您知道华为云服务器的强大【华为云至简致远】
TCP补充
一万块钱能做一手尿素期货吗?尿素期货怎么做才安全?
小程序轮播图实现由远及近动画
技术分享 | 接口自动化测试之JSON Schema模式该如何使用?
[内部资源] 想拿年薪30W的软件测试人员,这份资料必须领取
第一章、RPC 基础知识
面试官:Redis 大 key 要如何处理?
JS-Bom-while (calculate leap year)
MySQL:Update高并发下变慢的案例及其涉及的特性
优雅地实时检测和更新 Web 应用
【小码匠自习室】重做ABC250-D, 我无力反抗









