【网商双十一】基于 ServiceMesh 技术的业务链路隔离技术及实践

简介: 基于容器、ServiceMesh 等云原生技术的「业务单元隔离」的方案更加轻量和灵活。当前我们已经实现了 RPC、调度以及 HTTP 流量的隔离,后续还将进一步完善支持消息等流量的隔离。

黑白色描边人物插画矢量互联网宣传中文微信公众号封面.png

文|张化仁(花名:花伦 )

网商银行基础技术架构部架构师

校对|阚广稳(花名:空门)

本文 4832 字 阅读 10 分钟

|引言|

微服务架构下,服务之间的调用错综复杂,一个应用可能会承载着多种不同的业务流量。由于运行在同一个应用进程内,多种业务流量之间势必会存在相互影响的情况。

如果某种业务流量陡增,导致应用进程负载激增,进而请求排队,其它业务流量也势必会受影响。多数时候这种相互影响的情况都是在容忍范围以内或者可以规避的,特定场景下我们可能就需要考虑通过隔离某些业务流量的方式,来消除业务之间相互影响的风险:

  • 例如,当后台调度型的流量影响了在线用户请求;
  • 再如,当低敏的甚至可失败的业务影响了高敏的需要重保的业务。

业务链路隔离的诉求是业内普遍存在的。通常的方案是新创建一个应用,然后将需要隔离的业务迁移到这个新应用上。

新建应用的方式,研发运维等都需要付出成倍的成本,相关应用还需要配合改造和迁移。对于只有单个应用需要创建的情况或许还能勉强接受,网商银行部分应用例如高保极简网关、高保客户视图等当前就是采用的这种方案。这种方式是非常笨重的,而且当我们期望特定业务关联的整条链路上的多个应用都进行业务隔离的话,这种方案的成本将非线性上升进而变得难以接受。

云原生架构下,对容器和流量可以进行更精细化的管控,对于上述业务流量隔离的场景,我们有了更简洁、更灵活、更通用的替代方案--我们称之为「业务单元隔离」,可以在不创建新应用的情况下实现上述诉求。此方案当前已在包括核心链路在内的网商多个业务场景得到应用,也顺利通过了今年双十一大促的考验。

那么「业务单元隔离」具体是什么?我们是如何借助「业务单元隔离」实现业务链路的隔离呢?本文将和大家细述。

PART. 1 概念及基本原理

概念及运维模型

「业务单元隔离」是一套流量染色和资源隔离的方案,可以帮助业务相对简单地实现业务链路隔离。在调研和验证的过程我们也提出了优化改进方案并推进落地,最终进一步减轻了业务接入的成本。

「业务单元隔离」需要结合两个新的概念来阐述:「AIG」和「业务单元」。

AIG 是某个应用为了支撑某些业务而隔离出来的一组资源。由一个或多个应用的 AIG 组成的、服务与某个或某类特定业务的业务链路我们称为一个业务单元。保证有且只有符合特征的流量引流到某个业务单元,我们称之为「业务单元的隔离部署」。

AIG 运维模型简单示意

主要任务及配套设施

从「业务单元隔离」的概念中我们不难看出:要实现某个业务链路的流量隔离,至少需要做有以下几件事情:

1.业务单元构建:给链路上的应用分别创建 AIG 组成一个业务单元,且须保证不能有流量流入新建的业务单元。

2.业务流量识别:需要通过某种方式识别出上游应用流入的特定业务的流量。

3.特定业务引流:对于识别到的特定业务的流量,需要有机制让这些流量流向新创建的业务单元。

很显然,上述的这些事情,必然需要基础设施侧和应用侧相互配合才可实现。如下图所示,相关的基础设施及作用如下:

1.业务单元构建:需要为 AIG 提供完整的研发/运维/监控支持;

2.流量识别(RPC):链路中业务单元上游的应用(A)需要接入打标染色 SDK,以便通过染色管控平台下发打标染色规则;

3.流量识别(调度):复杂调度(消息触发,应用单 LDC 内自主分发批任务)通过转换成基于 SOFARPC 的流式任务,从而实现染色和隔离。

4.特定业务引流:MOSN 侧的精细化路由需要支持 AIG,让流量可以流入到新特定的业务单元。

业务单元隔离方案总览及周边配套设施

业务单元构建

业务单元实际是一个相对抽象的概念,对应一条业务链路。

网商的实践中,为了让业务单元更加具象化,我们规定一个业务单元内的多个应用,其 AIG 名称(appname-aigcode)中的 aigcode 部分必须尽可能一致。

因此,构建一个特定的业务单元,本质上是要给链路上相关的应用,都创建出服务于特定业务隔离的资源组(AIG)。

对于单个应用,构建 AIG 包含两部分:

一是初始化 AIG 元数据;

其次是围绕此 AIG 的各种运维操作(扩缩容、上下线、重启、sidecar 注入升级等)。

可以看到要支持 AIG,PaaS 侧几乎所有运维操作都需要适配,工作量非常很大。所以 PaaS 侧在支持 AIG 这件事情上也必须权衡取舍,决定只在终态的 workload 运维模式下支持了 AIG,这也导致 AIG 强依赖应用从现有的 image 的模式迁移到 workload 的模式。

workload 运维模式下,PaaS 将发布和运维的内容都编排成 CRD 资源,交给底层 sigma(K8s)做运维。切换到 workload 运维模式有利于集团统一发布运维体系,也可以更好的支持弹性扩缩容、自愈等场景。

但相比 image 模式,workload 模式对用户使用习惯和体验上冲击很大,初期相关的问题也非常多。因此尽管网商 workload 一直在有序推进,在后续核心业务接入 AIG 的项目中,为了避免强制切换到 workload 运维模式影响核心业务运维应急,我们也给 PaaS 提了支持仅对 AIG 机器开启了 workload 的诉求,并且针对这种情况做了完备的混合运维验证。

RPC 流量隔离

业务单元创建好之后,如何确保新的业务单元在不引流的情况下默认没有 RPC 流量流入呢?

应用的机器之所以有 RPC 流量流入,是因为注册中心(SOFARegistry)和跨机房负载均衡(AntVip)中挂载了机器 IP:应用进程启动成功 MOSN 感知到后,MOSN 会将服务信息注册到 SOFARegistry,发布运维过程机器健康检查通过后 PaaS 侧会调用接口往 AntVip 上挂载机器的 IP。

所以,要确保新的 AIG 机器默认没有流量流入,就需要 MOSN 和 PaaS 侧做出调整。

整体调整方案如下图所示:

默认情况下没有 RPC 流量流入 AIG 原理

如何识别特定业务的 RPC 流量呢?

上游应用接入打标染色 SDK 之后,其在作为服务端被其它应用调用、作为客户端调用其它应用的时候,都可以被 SDK 中的 RPC 拦截器拦截,拦截器对比 RPC 请求和下发的打标染色规则,一旦 match 就会在 RPC Header 中增加业务请求标识。

基于打标染色 SDK 的流量识别示意

最后,就是将流量引流到特定业务单元。

借助 MOSN 强大的精细化路由能力,我们可以让流量路由到指定的业务单元,并在业务单元内部收敛。业务单元隔离主要用到了 MOSN 的客户端路由能力,在客户端应用发起调用、请求流经当前 Pod 的 MOSN 时,可以按我们下发的路由规则控制流量的走向。

引流到特定业务单元 & 业务单元内流量收敛

调度流量隔离

调度本质是消息,简单的调度场景通常也不会有隔离的诉求。很多有隔离诉求的场景当前都是“消息任务+三层分发”的模式,利用调度触发批处理逻辑。

三层分发协议是基于 tb-remoting 协议分发请求的,不是标准的 SOFARPC 协议,不经过 MOSN,因此 MOSN 也无法控制这种请求的走向。

为了解决这个问题,AntScheduler 推出了全新的流式调度模式,通过将三层分发模式转变成多次标准 SOFARPC 调用,从而和 MOSN 无缝配合,满足流量隔离的诉求。

对于希望调度流量直接路由到 AIG 的场景,AntScheduler 界面上可以直接配置,配置后平台会下发服务级别的 MOSN 客户端路由规则。

对于整条链路隔离的场景,调度平台对接了打标染色平台,发起的 RPC 流量会自动打标,下游应用可以选择基于此标定做进一步的染色和引流。

“消息任务+三层分发” vs“流式任务”

PART. 2 异步补账链路隔离

「业务单元隔离」基础设施落地后,先后有几个业务场景逐步接入。异步补账链路隔离是「业务单元隔离」首次应用在核心链路,实现了实时交易流量和异步补账流量的隔离,避免相互之间的影响。今年双十一大促异步补账业务单元承载了 10% 的异步补账流量,表现丝滑。

接下来我将以这个项目为载体,详述我们如何借助「业务单元隔离」实现业务链路的隔离。

项目背景

项目相关的应用处于网商核心链路上,本就属于重保对象,而后续预期业务将急速发展,因此链路的高可用保障面临巨大挑战。

当前链路主要有两种流量,一种是实时类交易的流量,另一种是上游异步发起的补账流量。

对于补账类的流量,由于已经落库,对失败是容忍的。而实时交易的流量,是必须重保的对象。

后续业务发展异步补账流量将急剧增加,实时交易类的流量面临受影响的风险,因此业务侧期望能有一种方式,让异步补账流量和实时交易类的流量实现资源隔离,保障实时类交易的高可用性。

图片

总体方案

由于链路涉及到多个核心应用,如果采用传统的新建应用的方案,初期改造及后续维护的成本都极高,故而业务希望采用「业务单元隔离」的方案。经过和业务方深入沟通,确认要新创建异步补账业务单元,并承载下述流量:

1.来自上游应用 U 的异步补账流量(RPC);

2.来自上游应用 U 的补账调度的后续流量(调度->RPC);

图片

异步补账 RPC 隔离

上述异步补账单元上游应用 U 需要进行少许改造,接入流量打标染色 SDK,以便我们可以识别到异步补账的流量。

应用 U 接入 SDK 后,作为服务端被其它应用调用或者作为客户端调用其它应用的时候,都会被 SDK 中的 RPC 拦截器拦截,可以进行打标和染色处理。已染色的流量的 RPC 请求或响应 Header 中会带上流量标识,MOSN 路由时识别此标识即可实现将流量引到异步补账业务单元。

下图是异步补账的 RPC 流量的打标染色和引流逻辑示意:

图片

异步补账调度隔离

调度流量的识别需要应用从“消息任务+三层分发”模式切换到流式任务模式,转变成多次 SOFARPC 调用,进而可以借助 MOSN 精细化路由到指定的 AIG。

本项目中,补账调度 RPC 请求已经打好标识,因此仅需在上游应用 U 侧进行染色和 MOSN 引流规则的下发即可。

整个逻辑示意如下图:

图片

压测及灰度机制

打标染色 SDK 在对流量进行打标染色时是可以识别压测流量的,但本项目中我们没有使用这种方式,而是在 MOSN 路由规则中增加了限定条件。

一方面是由于 SDK 尚不支持网商压测流量识别;

另一方面 MOSN 规则下发流程上更加简单。

MOSN 路由规则支持配置多个规则,每个规则由生效范围 scope、限定条件 condition、路由目标 destination 组成,支持任何比例的灰度,也支持限定压测流量,可确保整个引流过程的安全。下图上游应用 U 灰度引流 1/1000 的压测流量(shadowTest=T)到应用 A 的异步补账 AIG(A-vostro)的 MOSN 路由规则示意:

图片

单元内流量自收敛

流量流入到业务单元内后,后续还会继续调用其它应用,需要下发 MOSN 路由规则来保证流量收敛在业务单元内部,否则默认还是会流回默认的业务单元。

起初的方案是继续借助打标染色 SDK 写入的流量标识来路由,规则如:scope: app=U;condition: sl_biz_unit=xxx;destination: mosn_aig=A-vostro。

但是这种规则是和客户端应用、服务端应用强绑定的,对于复杂的场景如本项目来说,每一条调用关系都需要下发一条规则,整体的梳理及维护的工作量是非常大的。

调研和验证的时候我们识别到这个问题,和相关同学讨论后,最终提出了更简洁可行的方案(AIG 自收敛)。在 MOSN 侧支持识别自身的 aigcode,下发给所有调用此应用的应用,规则可以简化为只和当前应用以及 aigcode 相关,如:scope: aigcode=vostro;destination: mosn_aig=A-vostro。简化后,规则数量和单元内的应用数量一致。

本项目自收敛规则如下图:

图片

|总结及展望|

本文主要介绍了网商在应对业务流量隔离场景的一种全新的解决方案以及业务实践过程。

相比传统的新增应用的笨重的方案,基于容器、ServiceMesh 等云原生技术的「业务单元隔离」的方案更加轻量和灵活。当前我们已经实现了 RPC、调度以及 HTTP 流量的隔离,后续还将进一步完善支持消息等流量的隔离。

欢迎有类似诉或对相关技术方案有兴趣的同学随时来交流探讨。

本周推荐阅读

云原生运行时的下一个五年

蚂蚁集团技术风险代码化平台实践(MaaS)

还在为多集群管理烦恼吗?OCM来啦!

Service Mesh 在中国工商银行的探索与实践

img

相关文章
|
机器人
钉钉markdown
钉钉markdown
2129 0
|
3月前
|
人工智能 自然语言处理 API
阿里云百炼 Token Plan 全解析:个人版与团队版支持模型、套餐定价、API调用实战教程
随着大模型落地场景持续拓宽,文本生成、图像绘制、视频生成、语音交互、代码智能体等需求同步爆发,开发者与企业往往需要同时接入十余款不同厂商模型,单独采购各模型Token套餐不仅管理繁琐,整体调用成本也难以管控。阿里云百炼推出TokenPlan订阅服务,采用统一Credits额度抵扣机制,一份订阅即可兼容数十款主流AI模型,覆盖文本、视觉、音视频全品类能力,同时区分个人版、团队版两大订阅体系,分别匹配独立开发者、企业协作团队两类使用人群,通过包月固定费用模式精准控制月度AI预算,规避按量计费带来的账单波动风险。
723 2
|
7月前
|
人工智能 监控 测试技术
只会写Prompt已经不够了:2026年,AI Skill正在成为新能力
近两年,AI使用正从“写Prompt”迈向“装Skill”:Cursor、Claude等工具已支持可复用的AI技能包。Skill如手机App,内嵌领域知识(如日志分析),让AI真正成为懂业务的助手。对大学生而言,掌握Skill组合能力,是提升技术岗竞争力的新起点。
|
2月前
|
人工智能 自然语言处理 API
最新版介绍阿里云百炼 Token Plan 订阅方案介绍:从计费逻辑到选型指南
本文深度解析阿里云百炼平台的Token Plan订阅方案,该方案以统一Credits计量单位实现全模态AI能力通兑,覆盖文本、图像、视频、语音生成等场景,兼容Qwen、GLM、DeepSeek等主流模型与多款AI编程工具。方案分为个人版与团队版两大产品线,个人版39元/月起,设5小时+7天双窗口限额,还可享预览版模型夜间2折权益;团队版面向企业协作场景,提供固定月度额度、多租户隔离与数据隐私保障,高峰期调用不排队。文章同步梳理了最新组合购全档位套餐,最低68元起即可搭配轻量应用服务器,一站式配齐AI开发全链路资源。
|
5月前
|
存储 弹性计算 数据可视化
阿里云服务器价格怎么查?手把手教你使用价格计算器查询价格,及成本优化建议
本文介绍了阿里云服务器价格查询与成本优化方法。用户可通过官网"定价→价格计算器",按地域、实例规格、存储、带宽、购买时长等参数自助估价,实时生成费用明细并支持导出清单。价格受实例类型、地域、带宽、存储及购买时长等多因素影响,其中包年购买折扣最优。文章以企业级Web应用为例演示完整操作流程,并建议用户善用多方案对比、弹性架构、分级存储及长期承诺等策略降本。当前2026年活动中,经济型e实例99元/年、u1实例199元/年、轻量服务器38元/年起,另有u2a实例2.5折、九代实例6.4折等优惠,可通过阿里云活动中心查询最新价格。
|
6月前
|
弹性计算 人工智能 小程序
阿里云ECS云服务器部署 OpenClaw 图文步骤:微信小程序集成+千问Qwen3.6-Plus配置+避坑指南
2026年,OpenClaw(原Clawdbot)作为开源AI代理自动化框架的标杆产品,凭借轻量化部署、跨平台兼容、大模型生态完善、即时通讯集成便捷的核心优势,成为个人与团队搭建专属智能助手的首选方案。阿里云ECS云服务器以稳定可靠、弹性扩展、安全可控、性能强劲的特性,为OpenClaw提供7×24小时不间断运行的理想环境,彻底解决本地部署断电、断网、公网无法访问的痛点。
910 2
|
7月前
|
人工智能 监控 安全
AWS Bedrock 接入 Claude 4.6:近期热门讨论背后的企业落地信号
近期X与GitHub热议AWS Bedrock接入Claude 4.6,焦点已从模型性能转向企业落地难题:认证刷新、配额治理、可观测性与限流。讨论凸显AI工程化分水岭——模型能力趋同,真正瓶颈在于如何无缝融入现有IAM、监控、计费与网络治理体系。
|
人工智能 Java API
Java AI智能体实战:使用LangChain4j构建能使用工具的AI助手
随着AI技术的发展,AI智能体(Agent)能够通过使用工具来执行复杂任务,从而大幅扩展其能力边界。本文介绍如何在Java中使用LangChain4j框架构建一个能够使用外部工具的AI智能体。我们将通过一个具体示例——一个能获取天气信息和执行数学计算的AI助手,详细讲解如何定义工具、创建智能体并处理执行流程。本文包含完整的代码示例和架构说明,帮助Java开发者快速上手AI智能体的开发。
3819 8
|
监控 算法 Java
JVM 调优之 glibc 引发的内存泄露
Pmap 提供了进程的内存映射,pmap 命令用于显示一个或多个进程的内存状态。其报告进程的地址空间和内存状态信息
JVM 调优之 glibc 引发的内存泄露
|
Java C# Swift
Java Stream中peek和map不为人知的秘密
本文通过一个Java Stream中的示例,探讨了`peek`方法在流式处理中的应用及其潜在问题。首先介绍了`peek`的基本定义与使用,并通过代码展示了其如何在流中对每个元素进行操作而不返回结果。接着讨论了`peek`作为中间操作的懒执行特性,强调了如果没有终端操作则不会执行的问题。文章指出,在某些情况下使用`peek`可能比`map`更简洁,但也需注意其懒执行带来的影响。
1009 2
Java Stream中peek和map不为人知的秘密

热门文章

最新文章