ServiceStage集成Sermant实现应用的优雅上下线

news2024/11/15 3:51:30

作者:聂子雄 华为云高级软件工程师

摘要

优雅上下线旨在确保服务在进行上下线操作时,能够平滑过渡,避免对业务造成影响,保证资源的高效利用。Sermant基于字节码增强的技术实现了应用优雅上下线能力,应用发布与运维平台ServiceStage通过集成Sermant使得应用在进行持续发布时实现无侵入式地优雅上下线。

1. ServiceStage简介

ServiceStage(应用管理与运维平台)是华为云面向企业的应用管理与运维平台,提供应用发布、部署、监控与运维等一站式解决方案。整个平台支持一系列技术栈,包含Java、Node.js、Docker、Tomcat等。在微服务框架层面,支持Apache ServiceComb Java Chassis(Java Chassis)、Spring Cloud等框架的微服务应用,让企业应用上云更简单。

ServiceStage主要具备如下的一些能力模块:

  1. 应用管理:支持应用生命周期管理、环境管理。
  2. 微服务应用接入:支持Java Chassis、Spring Cloud微服务框架。配合微服务引擎可实现服务注册发现、配置管理和服务治理。
  3. 应用运维:通过日志、监控、告警支持应用运维管理。

2. Sermant简介

Sermant 是基于Java字节码增强技术的云原生无代理服务网格,通过 JavaAgent 对宿主应用进行非侵入式增强,以解决Java应用的微服务治理问题。Sermant的初衷是建立一个面向微服务治理的对开发态非侵入的解决方案生态,降低服务治理开发和使用的难度,通过抽象接口、功能整合、插件隔离等手段,达到简化开发、功能即插即用的效果。

Sermant整体架构包括Sermant Agent、Sermant Backend、Sermant Injector、动态配置中心等组件。其中Sermant Agent是提供字节码增强基础能力及各类服务治理能力的核心组件,Sermant Backend、Sermant Injector、动态配置中心为Sermant提供其他能力的配套组件。

3. 应用上下线发布过程遇到的挑战

在应用上下线发布过程中,如何做到流量的无损上/下线,是一个系统能保证SLA的关键。如果应用上下线不平滑,就会出现短时间的服务调用报错,比如连接被拒绝、请求超时、没有实例和请求异常等问题。

在应用上线发布过程中,由于过早暴露服务,实例可能仍处在JVM JIT编译或者使用的中间件还在加载,若此时大量流量进入,可能会瞬间压垮新起的服务实例。

在应用下线过程中,服务消费者感知服务提供者下线有延迟,在一段时间内,被路由到已下线服务提供者实例的请求都抛连接被拒绝异常。其次服务实例在接收到停止服务信号时,会立即关闭,但是这时候可能在请求队列中存在一部分请求还在处理,如果立即关闭这些请求都会损失掉。

4. ServiceStage优雅上下线方案

为了保证应用正确上下线、流量不丢失,ServiceStage基于Sermant提供了一套优雅上下线的方案,包括预热、延迟下线等,避免了请求超时、连接拒绝、流量丢失等问题的发生。

4.1优雅上线实现机制

预热是优雅上线的核心机制,Sermant Agent提供了延迟注册机制,减少流量丢失,从而实现优雅上线。

1.延迟注册

在服务启动成功之后不立刻注册,而是延迟一段时间再去注册,目的是虽然服务启动成功了,但可能还有一些框架或者业务的代码没有初始化完成,可能会导致调用报错,可以通过设置延迟注册,让服务充分初始化后再注册到注册中心对外提供服务。

2.预热

该方式主要用于解决当流量突然增加时,可能瞬间把实例压垮的问题。通过预热,让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,目的是采用少流量对服务实例进行初始化,防止服务崩溃。预热是基于客户端实现的,当流量进入时,Sermant Agent会动态调整流量,根据服务的预热配置,对流量进行动态分配。对于开启服务预热的实例,在刚启动时,会给该实例分配较少的流量,随后流量将以曲线方式逐渐增加至与其他实例近乎持平。

4.2优雅下线实现机制

延迟下线是优雅下线的核心机制,且Sermant Agent还提供了流量统计机制,即服务处理完所有统计的请求后再下线,减少流量丢失,从而实现了优雅下线。

1.延迟下线

当服务提供者实例下线时,无法避免仍有业务请求还未处理完成,从而可能会出现请求丢失的现象。延迟下线即对下线的实例提供保护,优雅下线插件基于下线

实时通知+刷新缓存的机制快速更新上游的实例缓存,服务消费者能尽早感知服务。提供者实例下线的行为,同时基于流量统计的方式,确保即将下线的实例尽可能的将流量处理完成,尽量避免流量丢失。

2.流量统计

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

4.3   整体流程

使用ServiceStage完成应用优雅上下线流程示例如下:

1.资源准备

通过云平台以及ServiceStage提供的能力,快速创建应用所需要的计算(ECS,CCE等),存储(OBS,EVS等),网络(VPC,ELB等)以及一些中间件资源(DCS,DMS,CSE等)。

2.创建环境

在ServiceStage的控制台,找到环境创建页面,完成环境创建,随后将提前准备好的资源纳管到新创建的环境当中。

3.安装Sermant Injector

ServiceStage为了简化Sermant Agent的安装流程,专门集成了Sermant Injector,通过Sermant Injector,ServiceStage可以实现宿主应用自动挂载Sermant的快速部署方式,只需在应用部署的yaml中的labels添加sermant-injection: enabled即可快速将Sermant Agent安装到应用实例上。

在ServiceStage上,只需在界面勾选Sermant Injector选项,即可自动完成Sermant Injector的安装。

4.创建应用

在ServiceStage的控制台,找到应用创建页面,完成应用创建。

5.部署待实现优雅上下线应用

选择2中已创建好的环境,将准备好的应用代码通过ServiceStage的组件部署功能快速部署到该环境中。

6.验证优雅上下线

针对应用中的实例,在ServiceStage上对其进行部分重启或者下线,随后通过脚本文件,持续调用实例接口,查看流量请求情况,并与未开启优雅上下线开关情况下的数据进行对比,验证优雅上下线的实际效果。

5. 总结

Sermant基于Java字节码增强的技术为微服务应用提供了稳定可靠的优雅上下线能力,而ServiceStage本身作为一个高效的应用发布与运维平台,通过集成Sermant,提供了微服务应用优雅上下线的端到端解决方案,为广大使用者提供更高效更便捷的使用体验。

--------------------------------------------------------------------

Sermant 作为专注于服务治理领域的字节码增强框架,致力于提供高性能、可扩展、易接入、功能丰富的服务治理体验,并会在每个版本中做好性能、功能、体验的看护,广泛欢迎大家的加入。

  • Sermant 官网:https://sermant.io
  • GitHub 仓库地址:https://github.com/sermant-io/Sermant
  • 扫码加入 Sermant 社区交流群

1111.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2101412.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

摩博会倒计时!OneOS操作系统抢先了解!

2024年第二十二届中国国际摩托车博览会(摩博会)临近,中移物联OneOS与智能硬件领域佼佼者恒石智能宣布强强合作,与9月13日至16日在重庆国家会展中心共同展现多款Model系列芯片(Model3、Model4、Model3C、Model3A&#x…

I2C软件模拟时序的基本要素

目录 前言 一、关于I2C 二、正文 1.引脚的配置 2.I2C的起始和终止时序 3.发送一个字节 4.接收一个字节 5.应答信号 6.指定地址写和指定地址读 总结 前言 环境: 芯片:STM32F103C8T6 Keil:V5.24.2.0 本文主要参考江科大教程&#…

系统架构师考试学习笔记第三篇——架构设计高级知识(11)软件可靠性基础知识

本章知识点: 第11课时主要学习软件可靠性基本概念、建模、管理、设计、测试和评价等内容。本课时内容侧重于概念知识,根据以往全国计算机技术与软件专业技术资格(水平)考试的出题规律,考查的知识点多来源于教材,扩展内容较少。根据考试大纲,本课时知识点会涉及单项选…

注册安全分析报告:央视网

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

day47——面向对象特征之继承

一、继承(inhert) 面向对象三大特征:封装、继承、多态 继承:所谓继承,是类与类之间的关系。就是基于一个已有的类,来创建出一个新类的过程叫做继承。主要提高代码的复用性。 1.1 继承的作用 1> 实现…

16、修改Markdown Preview Enhanced默认样式

前言 vscode的markdown preview enhanced插件的主题并不一定符合每个人的审美,所以有的时候需要自定义,笔者根据网上大佬的文章整合了下自定义修改Markdown Preview Enhanced默认样式的方法,模板在文章中,大家可以直接使用,希望能…

【数据结构】反射,枚举你必须知道的相关知识

前言: 🌟🌟本期讲解关于反射以及枚举,希望能帮到屏幕前的你。 🌈上期博客在这里:http://t.csdnimg.cn/7D225 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 目录 &#x1f…

获得并修改硬件序列号--CPU、主板、内存、硬盘等(有源码)

大家都知道很多Anti Cheat会封硬件序列号,所以本文探索一下如何get and modify序列号。 这个服务是比较贵的: 于是有了研究一下的想法。 思路: 1. 通过厂商自带的程序刷新固件。 2. 自己写驱动修改。 思路1不讨论,要拿到厂商去修改,很不方…

台球助教陪练预约系统源码开发

随着科技的发展和人们对生活质量要求的提高,体育运动的数字化趋势日益明显。台球作为一种集休闲娱乐与竞技于一体的运动项目,在全球范围内拥有广泛的爱好者群体。为了更好地满足这部分人群的需求,开发一个高效的台球助教陪练预约系统变得尤为…

国家超算互联网入选国家数据局“全国一体化算力网应用优秀案例”

在2024年8月29日举行的中国国际大数据产业博览会上,国家数据局公布了首批“全国一体化算力网应用优秀案例”。 这一举措是在经过严格的评审过程后,挑选了包括“国家超算互联网”在内的25个创新平台和方案,它们代表了当前算力网建设的先进与创…

【ssh】环境问题汇总

问题1.同时显示两个不同的 Conda 环境,如图 (base) 环境 是 Conda 安装后默认激活的环境。 (ani) 是手动创建的另一个 Conda 环境。 解决:执行conda deactivate。如果 (ani) 环境多次激活,需要多次执行 conda deactivate 才能回到 base 环境…

【论文分享】sNPU: Trusted Execution Environments on Integrated NPUs 24‘ISCA

目录 AbstractINTRODUCTIONBACKGROUND AND RELATED WORKTrusted Execution Environment (TEE)Neural Processing Unit (NPU)Integrated NPU v.s. Discrete NPU Multi-tasking Requirements for NPUsLow NPU utilization for a single ML workloadSimultaneous execution of bot…

jquery swiper插件的用法

一、Swiper插件简介 Swiper是一个纯JavaScript打造的滑动特效插件,面向手机、平板电脑等移动终端,同时也支持桌面浏览器。Swiper开源、免费、稳定、使用简单且功能强大,是架构移动终端网站的重要选择。 它支持触摸滑动、响应式设计、循环滑动…

基于Java+SpringBoot+Vue+MySQL的地方美食分享网站

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于SpringBootVue的地方美食分享网站【附源码文档】、前后…

NXP i.MX8系列平台开发讲解 - 4.1.3 GPSD 使用

专栏文章目录传送门:返回专栏目录 Hi, 我是你们的老朋友,主要专注于嵌入式软件开发,有兴趣不要忘记点击关注【码思途远】 文章目录 关注星号公众号,不容错过精彩 作者:HywelStar 目录 1. 认识GPSD 2. 安装GPSD 2.…

哪些好用的待办事项清单值得推荐:待办任务清单app

在现代快节奏的生活中,我们每个人都面临着大量的待办事项。无论是工作中的紧急任务,还是生活中的琐碎事务,这些事情常常让我们感到应接不暇。为了更好地管理这些待办事项,将它们列成清单,并设置明确的完成时间节点&…

2024年9月3日嵌入式学习

数据结构 1定义 一组用来保存一种或者多种特定关系的数据的集合(组织和存储数据) 程序的设计:将现实中大量而复杂的问题以特定的数据类型和特定的存储结构存储在内存中, 并在此基础上实现某个特定的功能的操作&am…

数据结构(6.4_5)——有向无环图

有向无环图:若一个有向图中不存在环,则称为有向无环图,简称DAG图(Directed Acyclic Graph) DAG描述表达式 普通表达式: DAG描述表达式:解题方法: 练习 总

初始MYSQL数据库(2)——创建、查询、更新、删除数据表的相关操作

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: MYSQL 前面我们学习了创建、删除数据库以及创建、查看、删除数据表的相关操作。 我们知道数据库中所存储的数据其实就是数据表中一条一条的记…

eval 函数 >>>> 变量 = eval (字符串)

作用: 去掉引号并会进行数据之间的加法等运算 eval函数与input的使用 注意eval 后面的括号中必须是字符串(加了引号的),不能直接跟字符串