基于Sermant的全链路灰度发布在汽车行业DMS系统的应用

Sermant源码(二)如何无侵入接入配置中心 本章基于Sermant2.0.0,分析dynamic-config插件为springboot宿主应用无侵入接入配置中心。过程中涉及Sermant的两个核心通用能力(core):1. 阅读详情

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

摘要

随着汽车产业的智能升级,DMS系统作为汽车行业的经销管理系统也面临着更加多种多样的业务场景的挑战。借助Sermant,华为云能够为DMS系统提供一整套端到端全链路灰度发布方案,这套方案可以适应DMS系统应用中更多灵活多变的场景。

一、背景  

汽车行业是一个庞大的产业,涵盖了设计、制造、销售、维修等多个方面。目前,全球汽车行业已经成为了重要的经济支柱之一,每年产生数万亿美元的产值。汽车行业的发展也推动了相关产业的发展,如石油、钢铁、橡胶、玻璃等原材料行业,以及银行、保险、物流等服务行业。随着环保意识的提高和新能源技术的不断发展,汽车行业也面临着转型升级的挑战。目前汽车行业正在向智能化、电动化和共享化方向发展,面对更加多种多样的需求,行业相关的IT系统也需要不断进步以适应这些场景。

在汽车行业IT系统中,经常会提到DMS系统,那什么是DMS系统呢?DMS系统是指汽车经销商管理系统(Dealer Management System),它是一种专门为汽车经销商和售后服务提供商设计的软件系统,用于管理和优化他们的业务流程。DMS系统可以帮助汽车经销商实现业务数字化、自动化和智能化,提高业务效率、降低成本、提升服务质量,是现代化汽车经销商必备的管理工具。目前很多经销商的DMS系统基本上都是做过微服务化改造,里面不同微服务模块之间会相互调用,因此如何高效地使用和管理这些微服务模块是DMS系统的重要挑战之一。

二、痛点场景

目前DMS系统已经广泛应用在汽车经销商的业务当中,其中有一类是DMS系统在实际使用中的痛点场景,具体有:

  • 客户想在某一个门店A上线自己的新业务,作为业务试点门店,比如新品汽车销售,或者打折促销活动等。和新业务相关的流量只会流入试点门店B。
  • 为了节约成本以及降低部署服务工作量,希望能够实现逻辑上的环境隔离。例如,测试环境有部分服务复用生产环境上的模块,开发测试人员只需要聚焦于需要测试的服务模块。
  • 客户的交易、商品服务有新的业务要上线,新上线的功能间有依赖和交互,要在上线前做一些测试工作。
  1. 用户计划让测试人员专门账号来进行现网测试(类似于游戏等白名单控制的开服前验证)。
  2. 用户引入少量比例的生产流量进行验证。

三、解决方案

3.1  单点灰度发布方案是否可行?

针对上述问题,一般的思路是通过灰度发布去解决,通过灰度发布,可以引入部分的测试流量到新业务模块,也能控制带有具体特征的流量只流入到对应的测试模块,其余流量保持原有方式不动。

但是经过仔细考虑,就会发现如果只做单点灰度发布,其实是无法完善地解决以上场景的痛点问题,主要体现在:

  • 业务特征时常只在第一跳,也就是特征只在入口,传递过程中会丢失。

  • 除了第一跳入口,后续微服务之间进行调用的时候也会把特征给丢失。

3.2 全链路灰度方案是怎样的?

因此,仅仅依靠单点灰度发布的能力是不够的,还需要能够做到整条微服务调用链的可灰度,也就是全链路灰度能力,这样就可以灵活解决DMS系统在这一类业务中遇到的问题。目前要实现全链路灰度,一般要考虑这些问题的处理:

1)在第一跳的地方(一般是网关),我们需要能选中各种类型的流量,把这部分流量染色,再路由到正确的目标。

2)除了第一跳,剩下调用链路中的各个微服务能够识别染色标,透传染色标,并路由到正确的目标。

3)能对异常情况进行妥善处理。

目前,华为云针对以上难点,设计出一套相对完善的全链路灰度发布方案,整体方案如下:

1)在前端部分,请求会统一携带流量标签参数发到华为云CSE应用网关上面。

2)CSE应用网关会选中各种类型的流量,将这些流量根据需求分别染色,比如通过请求header进行标记染色。

3)CSE应用网关会将染色后的流量转发到带有不同tag的后端微服务实例,tag可以由应用发布流水线注入到相应发布的微服务实例当中。

4)借助微服务实例上挂载的Sermant Agent,接收到应用网关流量的微服务实例会通过Sermant Agent提供的流量染色以及标签透传能力(适配Dubbo,SpringCloud)将流量特征保留并转发到合适的下一跳微服务实例。对于后续链路上的微服务实例,都可以通过微服务实例上面的Sermant Agent进行特征的传递。

3.3 为什么要选择Sermant Agent?

考虑到目前Dubbo和SpringCloud是国内使用量较多的微服务开发框架,为了不产生过多框架适配工作量,因此选用了基于Java Agent技术的Sermant Agent,利用这种无侵入式的特点,用户只需要在微服务实例启动时将Sermant Agent挂载到实例进程当中即可。Sermant Agent针对Dubbo和SpringCloud两种主流微服务框架适配了流量染色以及标签透传的能力。通过流量染色和标签透传,Sermant Agent就可以实现流量特征的保留以及传递到下一跳。Sermant Agent进行流量染色以及标签透传的全流程如下:

通过配置中心,用户可以在控制台界面下发服务粒度的染色规则,用于判断入方向的流量特征是否符合特定条件,若匹配则对该流量进行染色,在同一调用链的出方向流量中携带该染色标签然后通过请求透传给下一跳,因此用户可以通过下发自定义的染色规则到对应微服务,允许目的特征流量进入微服务实例并为出流量赋予新的特征。

在全链路灰度发布的场景下,Sermant Agent染色规则相对简单,sermant Agent会允许目的特征的流量进入微服务实例然后染色时带上相同的特征,染色后的流量再流入到对应tag的微服务实例。

四、总结

基于Sermant的全链路灰度发布方案可以解决DMS系统目前在一些如新业务在试点门店测试上线等业务场景遇到的困难,并且这一套方案能适应各类敏捷迭代的业务场景。

在开发测试过程中,客户可以根据需求在逻辑上划分出一套属于自己的服务链路,只需要关注自己设定的特征流量即可,这种模式可以为客户省去搭建DMS系统中一些共用的模块时间以及节约环境资源,并且还可以很方便地将带有试点特征的流量引入到含有自己试点应用的链路环境当中。

在发布过程中,客户还可以根据需要把一部分生产流量引入到自己的新版本业务链路环境当中,完成新版本的验证。

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

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

从半导体物理到实战:手把手教你测量MOS管体二极管的Vf和Trr 本文深入探讨了MOSFET体二极管的关键参数测量方法,重点讲解了正向压降(Vf)和反向恢复时间(Trr)的测量原理与实战步骤。通过搭建测试平台,使用万用表和示波器等工具,手把手指导如何量化这些影响开关损耗和效率的核心参数,并对比分析了硅基与碳化硅(SiC)器件在体二极管性能上的显著差异。 阅读详情

相关推荐

《算法第四版》学习心得一——怎么学算法

 一、算法的两个核心 算法的核心内容实际上有两个: 算法的概念和思路。 算法的编程实现。 两者相互关联影响,缺一不可。 不理解基本概念和思路,就算把实现代码背下来,也无济于事,因为脑袋里依然是一片模糊。理解了概念和思路,不去用代码实现,脑袋里有的只是概念,无法根据真实需求实现解决方案。 二、学算法需要什么基础 首先,必须要有一定的编程语言基础,要理解语言中最基本的概念:数据类型,类,成...

illikang的博客 3909

Sermant 开源项目指南

Sermant 的目录结构通常包含以下几个关键部分: - `agent`:这里是Java Agent的实现,用于动态地增强应用程序以提供服务治理功能。 - `backend`:这个目录包含了后台服务的相关代码,它提供了与Java Agents之间的连接以及数据预处理服务。 - `config`:此目录存储了各种配置模板和样本,用于初始化项目设置。 - `docs`:文档目录,包含项目的用户手册和

gitblog_00982的博客 631

手把手教你用示波器搞定PCIe 5.0 REFCLK时钟信号测量(附完整参数解读)

本文详细介绍了如何使用示波器进行PCIe 5.0 REFCLK时钟信号测量,包括示波器与探头的选择、关键参数的测量方法及解读,以及实战中的常见问题与解决方案。通过手把手教学和完整参数解读,帮助硬件工程师高效完成时钟信号测量,确保系统稳定性。

weixin_28704565的博客 359

Sermant对这类增强冲突问题的处理方式

现在JavaAgent技术越来越受到各大厂商和开源社区的青睐,涌现出不少优秀的JavaAgent框架。开发者或厂商在使用JavaAgent的时候难免会遇到同时挂载多个JavaAgent的场景,如果JavaAgent开发方能够对其他同类框架做到良好的兼容性,将会给使用者带来更少的麻烦,毕竟使用者未必能透彻的了解字节增强的底层原理。上文经过分析已经找到多个JavaAgent类增强冲突的根因,那么该如何避免此类问题出现呢?这里给出两点较为通用的建议。

chengxuyuanlaow的博客 1136

LightTools中VBA宏的编写入门

LightTools和VBA联动

bestgamer的博客 2348

电商行业分析爬虫:抓取行业数据,进行行业分析

电商行业数据分析对于市场研究、竞争分析和商业决策至关重要。通过爬取电商平台的数据,我们可以深入了解市场动态、消费者行为和商品销售情况。本文将介绍如何构建一个电商行业分析爬虫,抓取商品信息、销售数据和用户评价等,并进行数据分析。

u014481728的博客 1628

开发者能力机制解析,玩转Sermant开发

本文将详细解析Sermant的插件加载和调度机制,以及开发者中常用到的统一动态配置和统一日志解析能力,带领开发者深入浅出地掌握Sermant的底层机制。

hwcloud_OS的博客 213

【win10】win 10 电脑喇叭音频显示红叉的处理方法

目录 一、报错情况 二、“音频服务未运行”解决方法 三、“未插入扬声器或耳机”解决方法 一、报错情况 (1)当电脑的扬声器喇叭图标上带有红X符号,提示“音频服务未运行”时: (2)小喇叭上面有红叉,显示“未插入扬声器或耳机”时: 二、“音频服务未运行”解决方法 (1)开始菜单搜索“服务”: (2)没有启动的点击“启动”,已启动的点击“重新启动”: (3)继续,右...

顾三殇 —— 博客空间(软件测试) 17万+

Sermant类隔离架构解析——解决JavaAgent场景类冲突的实践

Sermant是基于Java字节码增强技术的无代理服务网格,其利用Java字节码增强技术为宿主应用程序提供服务治理功能。因深知JavaAgent场景中类冲突问题会造成的影响,Sermant在设计之初便为此规划了全面的类隔离架构。经历多次迭代,如今Sermant的类隔离架构已可以轻松的应对各种复杂的类加载环境。本文围绕JavaAgent场景中的类隔离问题,从根源、解决方法等方面进行讲解,并对Sermant的类隔离架构进行详细解析。

hwcloud_OS的博客 666

Fiori Elements 的 Adapting the UI: Analytical List Page 全解析与实战

摘要:本文详细介绍了如何通过SAP Fiori elements的UI Adaptation功能对Analytical List Page(ALP)进行细粒度适配。重点讲解了页头过滤区、图表区域、表格区域等关键组件的可配置属性,包括过滤区折叠/固定、图表类型限制、表格滚动阈值等实用功能。文章强调这些适配均可通过可视化工具完成,无需修改业务代码,并提供了典型场景的实践清单。适用于SAP Fiori elements for OData V2项目,建议配合SAP Fiori tools的Adaptation E

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 434

optee系统启动流程

BL2 - Trusted Boot Firmware,一般为Trusted Bootloader, 也称第一个启动镜像。BL31 - EL3 Runtime Firmware,负责双系统切换,运行在secure monitor 或ATF中。BL33 - Non-Trusted Firmware,一般为uboot、linux kernel。BL32 - Secure-EL1 Payload, 一般为TEE OS Image。BL1 - Trusted ROM,一般为BootRom。

baron-周贺贺-代码改变世界ctw 279

基于微服务SDK框架与JavaAgent技术,低成本助力应用高效发布

微服务是一种用于构建应用的架构方案,可使应用的各个部分既能独立工作,又能协同配合,微服务的治理模式在适应云原生的方向也逐步在演进中。对于企业用户和开发者来说,如何尽可能以较低的成本、较好的效率来解决微服务治理过程中的各个问题是永恒的目标。

华为云官方博客 1846

YOLO11优化:特征融合 | 金字塔稀疏 Transformer(PST)——一个轻量级、即插即用的模块 | 25年7月最新成果

我们提出金字塔稀疏 Transformer(PST)——一个轻量级、即插即用的模块,通过由粗到细的 token 选择机制和共享注意力参数,在大幅降低计算量的同时保留空间细节。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1062

基于微服务 SDK 框架与 JavaAgent 技术,低成本助力应用高效发布

JVM 启动后,JavaAgent 运行于 Java 应用之前,可以修改原应用的目标类和方法的字节码,做到非侵入地增强,原应用中被增强的类在 JVM 中实例化的对象都是已经被 JavaAgent 处理过的,因此在业务应用的代码执行时,我们的服务治理逻辑就能悄无声息地通过这种方法实现注入。类似地,其他的服务治理能力的开发都可以通过这种方式,用户的 Java 业务应用无需修改,业务应用的开发者也无需理解其中的深层原理,只要把实现了服务治理功能的 JavaAgent 挂载上即可一键非侵入接入服务治理。

weixin_46575696的博客 821

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

字节码增强常见问题系列(二)| 兼容性难题:如何让不同字节码增强框架和谐共存?

用户在真实生产环境中可能会采用多个JavaAgent产品,不同的JavaAgent产品可能采用不同的字节码增强框架,而在使用不同的字节码增强框架时,可能会出现各种冲突问题,这些冲突可能导致字节码增强失效、应用程序无法启动等问题。即使是使用相同的字节码增强框架也可能会出现冲突问题。对用户而言,在生产环境引入多个不同或者相同的字节码增强框架而不出现兼容性问题尤为重要。

hwcloud_OS的博客 432

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

云原生微服务治理技术朝无代理架构的演进之路

本文基于对微服务治理技术从SOA, 微服务框架,到云原生架构的历史发展总结,提出了一种新的基于Javaagent技术的新一代无代理架构的服务治理技术,并介绍了其相关的代表性开源项目Sermant。

华为云官方博客 1409

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Sermant在异地多活场景下的实践

在异地多活(Multi-Active Geo-Distributed)场景下,Sermant(或其他类似的分布式系统中间件/框架)的实践通常涉及到确保系统的高可用性、数据一致性、负载均衡以及故障转移等多个方面。需要注意的是,异地多活架构的设计和实现是一个复杂的系统工程,需要综合考虑多个方面的因素。因此,在实际应用中,需要根据具体的业务需求和场景特点,选择合适的技术方案和工具,并进行充分的测试和优化。

爱生活爱学习。 356

Spring AI + GPT-5.5 + Ollama 配置教程:Base URL、超时与流式调用

由于不同 Spring AI、Spring Boot 小版本之间仍可能存在差异,创建项目时应检查 Spring Initializr、Spring AI BOM 和官方兼容矩阵,不要直接复制旧教程中的 Starter 名称和版本号。多人项目最好隔离不同客户端,并在脱敏前提下记录最终 URL、状态码、请求耗时、请求 ID 和模型 ID。Spring AI 接入模型 API,至少要同时确认 Starter、Base URL、请求路径、API Key、模型 ID、连接超时、读取超时和流式客户端这 8 项。

2601_95893075的博客 228

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 68

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 334

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 124

Spring Boot 数据源与 MyBatis(-Plus) 自定义配置详解

本文详解 Spring Boot 中单数据源环境下 HikariCP 与 MyBatis-Plus 的自定义配置。通过手动声明 SqlSessionFactory,实现下划线转驼峰、日志输出、一级缓存策略等精细化控制。结合 HikariCP 核心参数调优(如最大连接数、连接生命周期),确保高性能与稳定性。适用于仅需访问单一数据库的场景,避免多数据源复杂性,兼顾性能与可维护性。

BADAO_LIUMANG_QIZHI的博客 196

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 365

Decorator

TaskDecorator 是异步场景下"跨线程传递上下文"的标准方案,主要用于传递 MDC、用户信息、数据源路由等上下文数据,核心价值是让异步任务的日志链路不中断、业务上下文不丢失。TaskDecorator 是 Spring 提供的一个钩子接口,用于在异步任务执行前对 Runnable 进行包装,常用于跨线程传递上下文。如果你在项目中遇到具体的异步上下文传递问题,可以把代码贴出来,我帮你给出最合适的 Decorator 方案 👍。✅ 核心能力:在线程切换时,把"父线程的上下文"搬到"子线程"

wlwork66的博客 105
上一篇: 华为云亮相KubeCon EU 2024,以持续开源创新开启智能时代
下一篇: Sermant热插拔能力在故障注入场景的实践
华为云开源
博客等级 码龄4年 281粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值