作者:聂子雄 华为云高级软件工程师
摘要
随着汽车产业的智能升级,DMS系统作为汽车行业的经销管理系统也面临着更加多种多样的业务场景的挑战。借助Sermant,华为云能够为DMS系统提供一整套端到端全链路灰度发布方案,这套方案可以适应DMS系统应用中更多灵活多变的场景。
一、背景
汽车行业是一个庞大的产业,涵盖了设计、制造、销售、维修等多个方面。目前,全球汽车行业已经成为了重要的经济支柱之一,每年产生数万亿美元的产值。汽车行业的发展也推动了相关产业的发展,如石油、钢铁、橡胶、玻璃等原材料行业,以及银行、保险、物流等服务行业。随着环保意识的提高和新能源技术的不断发展,汽车行业也面临着转型升级的挑战。目前汽车行业正在向智能化、电动化和共享化方向发展,面对更加多种多样的需求,行业相关的IT系统也需要不断进步以适应这些场景。
在汽车行业IT系统中,经常会提到DMS系统,那什么是DMS系统呢?DMS系统是指汽车经销商管理系统(Dealer Management System),它是一种专门为汽车经销商和售后服务提供商设计的软件系统,用于管理和优化他们的业务流程。DMS系统可以帮助汽车经销商实现业务数字化、自动化和智能化,提高业务效率、降低成本、提升服务质量,是现代化汽车经销商必备的管理工具。目前很多经销商的DMS系统基本上都是做过微服务化改造,里面不同微服务模块之间会相互调用,因此如何高效地使用和管理这些微服务模块是DMS系统的重要挑战之一。
二、痛点场景
目前DMS系统已经广泛应用在汽车经销商的业务当中,其中有一类是DMS系统在实际使用中的痛点场景,具体有:
- 客户想在某一个门店A上线自己的新业务,作为业务试点门店,比如新品汽车销售,或者打折促销活动等。和新业务相关的流量只会流入试点门店B。
- 为了节约成本以及降低部署服务工作量,希望能够实现逻辑上的环境隔离。例如,测试环境有部分服务复用生产环境上的模块,开发测试人员只需要聚焦于需要测试的服务模块。
- 客户的交易、商品服务有新的业务要上线,新上线的功能间有依赖和交互,要在上线前做一些测试工作。
- 用户计划让测试人员专门账号来进行现网测试(类似于游戏等白名单控制的开服前验证)。
- 用户引入少量比例的生产流量进行验证。
三、解决方案
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作为专注于服务治理领域的字节码增强框架,致力于提供高性能、可扩展、易接入、功能丰富的服务治理体验,并会在每个版本中做好性能、功能、体验的看护,广泛欢迎大家的加入。
- Sermant 官网:Sermant
- GitHub 仓库地址:GitHub - huaweicloud/Sermant: Sermant, a proxyless service mesh solution based on Javaagent.
- 扫码加入 Sermant 社区交流群