当前位置:网站首页>看到这个应用上下线方式,不禁感叹:优雅,太优雅了!
看到这个应用上下线方式,不禁感叹:优雅,太优雅了!
2022-08-08 16:38:00 【华为云开发者联盟】
摘要: 本文讲述基于Sermant Agent接入的SpringCloud应用实现优雅上下线功能。
什么是优雅上下线
试想一个A场景,系统中运行着一个消费者(客户端)和两个服务提供者(服务端),消费者可负载均衡调用服务提供者。假设某个服务提供者因业务更新或其他场景需要滚动升级,若此时存在大量并发流量,便会出现以下问题:
- 大量TCP连接因服务提供者升级下线操作,导致大量请求错误。
- 由于消费者(客户端)存在注册表延迟刷新的问题,后续流量依旧会分配到已经下线的提供者,导致大量请求错误。
以上便是一个典型的“不优雅”场景。
于是,为了规避诸如此类的问题,服务优雅上下线应运而生,主要针对服务的重启、上线、下线等操作提供保护。
服务运维常见问题
- 服务自身存在大量懒加载机制(例如负载均衡初始化),在服务刚上线时,因并发流量请求涌入,导致大量请求同时进行懒加载,以至于请求响应慢,线程阻塞,甚至最终导致服务崩溃。
- 服务无法做到优雅下线,就如前面提到的A场景,服务端下线而客户端服务无法及时感知,导致流量流入已下线的实例,从而丢失大量流量。
优雅上下线提供了什么样的能力
服务端预热能力
服务端预热是基于客户端实现的,当流量进入时,Sermant Agent会动态调整流量,根据服务的预热配置,对流量进行动态分配。对于开启服务预热的实例,在刚启动时,相对于其他已启动的实例,分配的流量会更少,流量将以曲线方式随时间推移增加直至与其他实例近乎持平。目的是采用少流量对服务实例进行初始化,防止服务崩溃。
优雅下线能力
优雅下线结合服务端与客户端实现,主要实现点如下:
- 反注册
当服务端被要求下线时,Sermant Agent会动态根据当前注册中心进行反注册操作,及时刷新注册表,然而即使注册表已刷新,但是上游消费端因缓存问题却无法及时感知,从而引入下线通知。
- 下线通知
进行反注册后,Sermant Agent会采用接口通知与响应通知的方式告知所有上游,并主动同步刷新provider实例缓存。
- 黑名单
为保证流量不再调用已下线实例,引入黑名单机制。在客户端接收到下线通知后,自动将下线实例拉入黑名单,在执行流量分配时,自动过滤黑名单(已下线)实例,不再调用已下线实例。说明:黑名单采用定时刷新机制,默认为2分钟,即针对同一个IP实例,标记下线后,等待2分钟即可重新发现。
- 流量统计
为确保当前请求已全部处理完成,在服务下线时,Sermant Agent会尝试等待30s(可配置),定时统计和判断当前实例请求是否均处理完成,处理完成后最终下线。
如何使用优雅上下线能力
虚机场景
容器场景
基于Demo验证优雅上下线能力
以Nacos demo应用为例,通过Sermant Agent接入CSE,并在CCE集群上验证优雅上下线功能,参考自定义优雅上下线。
边栏推荐
猜你喜欢
随机推荐
【 8.7 】 source code - card to LCM with GCD 】 【 】
UTF-8 BOM文件导致配置文件无法读取
最新30系显卡搭建paddle飞浆环境|含CUDA下载安装
项目管理流程包含哪些
bzoj1251 序列终结者
MySQL数据库的简介及select语句的执行流程
NFT质押挖矿分红系统开发逻辑功能介绍
Acwing第 63 场周赛【未完结】
Is it safe to open an account with CICC Wealth?How does it work?
智能指针学习笔记
Mysql都有那些最需要掌握的原理?
APICloud AVM wraps date and time selection components
leetcode 155. Min Stack最小栈(中等)
pdf导出工具类
二、junit接口自动化框架之二次开发
ESP8266-Arduino编程实例-ADS1015(ADC)驱动
毕设-基于SSM学生考试系统
MySQL中常见的内些...啥
2020年适用于Linux的10个顶级开源缓存工具
ImportError: numpy.core.multiarray failed to import [cv2, matplotlib, PyTorch, pyinstaller ]