集成 Sermant,ServiceStage 带你实现应用上下线平滑过渡
摘要:为了保证应用正确上下线、流量不丢失,ServiceStage 基于 Sermant 提供了一套优雅上下线的方案,包括预热、延迟下线等,避免了请求超时、连接拒绝、流量丢失等问题的发生。
本文分享自华为云社区《ServiceStage 集成 Sermant 实现应用的优雅上下线》,作者:华为云开源。
优雅上下线旨在确保服务在进行上下线操作时,能够平滑过渡,避免对业务造成影响,保证资源的高效利用。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

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Redis集群slot迁移改造实践
作者:来自 vivo 互联网存储团队- Xu Xingbao Redis 集群经常需要进行在线水平扩缩容,实际操作过程中发现迁移期间服务时延剧烈抖动,业务侧感知明显,为了应对以上问题对原生 Redis 集群 slot 迁移功能进行优化改造。 一、背景介绍 Redis 集群服务在互联网公司被广泛使用,众所周知服务集群化可以突破单节点的能力瓶颈,带来规模、可用性、扩展性等多方面的收益。在实际使用 Redis 集群的过程中,发现在进行涉及集群数据迁移的水平扩缩容操作时,业务侧多次反馈 Redis 请求的时延升高问题,甚至发生过扩容操作导致集群节点下线的可用性故障,并进一步引发迁移流程中断、节点间数据脑裂等一系列严重影响,给运维同事带来极大困扰,严重影响线上服务的稳定。 二、问题分析 2.1 原生迁移介绍 Redis 集群功能采用无中心架构设计,集群中各个节点都维护各自视角的集群拓扑并保存自有的分片数据,集群节点间通过 gossip 协议进行信息协调和变更通知。具体来说 Redis 集群数据管理上采用虚拟哈希槽分区机制,将数据的键通过哈希函数映射到 0~16383 整数槽内,此处的槽位在 Re...
- 下一篇
技术解读 MySQL InnoDB 大对象存储格式
摘要:本文介绍了 InnoDB 大对象的存储格式,包括 InnoDB 会将数据行中的字段按照大对象格式进行存储的场景,InnoDB 大对象溢出页存储常见存储格式,并详细介绍了 InnoDB 对大对象的常见组织管理方式。 本文分享自华为云社区《【华为云 MySQL 技术专栏】InnoDB 大对象存储格式解析》,作者: GaussDB 数据库。 1. 背景 在 MySQL 中,大字段是经常使用到的对象,例如:字符类型,包括日志、博客内容以及二进制类型的视频文件等。在 InnoDB 中,大字段也叫大对象(Large Object,简称 LOB),通常认为不会高频全量访问。InnoDB 的数据是按照聚簇索引进行组织的,当聚簇索引的数据行中存在大对象时,InnoDB 为了提升聚簇索引 B+ 树中数据行的访问效率,会对数据行中大对象的存储格式进行优化。 本文将基于 MySQL 8.0.38 的代码,介绍 InnoDB 的 DYNAMIC 行格式中 LOB 的存储格式。 2. 大对象的存储形式 在 InnoDB 中,大对象的存储形式主要有两种: 1) 内联存储在 InnoDB 聚簇索引的行记录中; ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Windows10,CentOS7,CentOS8安装Nodejs环境