【摘要】

2024年3月,我作为系统架构师,主导了某造车新势力公司“自动驾驶数据闭环平台”的架构重构与研发工作。该平台主要为集团算法团队提供路测数据海量接入、场景挖掘、自动化标注、模型训练调度以及仿真验证等核心闭环业务支撑。本文以该项目为例,深入论述了基于服务网格(Service Mesh)的架构设计与实践。文章主要从三个核心论点展开:用基于 Istio 虚拟服务与目标规则的动态流量路由方案,解决跨语言异构微服务在海量数据流转中的治理逻辑侵入与发布风险问题,实现基础管控能力与业务彻底解耦的效果;用基于 Envoy 代理结合全链路追踪的统一观测方案,解决超长闭环链路中数据处理卡顿与单点故障定位极其困难的痛点,实现跨组件调用透明化及异常秒级定界的效果;用基于 mTLS 身份认证与细粒度授权策略的零信任方案,解决敏感模型资产与路测隐私数据在内部网络易遭横向越权访问的安全隐患,实现核心数据域内部通信绝对可信的高安全防护效果。该重构项目已于2024年11月正式全量上线,核心服务故障定位时间缩短约百分之六十,跨语言服务接入效率跃升,圆满完成了架构升级目标。

【正文】

随着自动驾驶研发全面迈入数据驱动时代,海量数据的闭环迭代能力已成为车企的核心竞争力。我所参与重构的“自动驾驶数据闭环平台”,其核心职责是将全国各地上路测试车辆采集的视频流、激光雷达点云以及车辆底盘控制等PB级历史数据与TB级每日新增数据接入云端。这些海量原料需要经过云端清洗、高价值场景挖掘、算法自动标注、模型分布式训练以及大规模虚拟仿真验证后,最终生成优化后的感知与规控模型重新下发至车端。在平台发展初期,底层微服务主要由Java编写,依赖传统的Spring Cloud体系进行服务治理。

随着深度学习与仿真业务的爆发,平台涌入了大量 Python 和 C++ 异构微服务,直接引爆了原有 Spring Cloud 架构的三大痛点:一是多语言治理成本极高,熔断限流等逻辑严重侵入算法代码;二是可观测性出现断层,跨语言长链路排障犹如大海捞针;三是内部安全管控缺失,未脱敏路测数据与核心模型存在极大的内网越权读取风险。为了彻底根治这些架构顽疾,我决定全面引入 Istio 服务网格技术,确立了将流量治理、可观测性与安全防护能力统一下沉至 Sidecar 基础设施层的演进蓝图

一、在核心业务的流量治理层面,我用基于 Istio 虚拟服务(VirtualService)与目标规则(DestinationRule)的动态流量路由技术方案,解决了跨语言异构微服务在海量数据流转过程中的治理逻辑侵入与灰度发布风险问题,实现了基础流量管控能力与业务代码的彻底解耦以及全语言统一调度的效果。在过去的数据闭环流水线中,自动标注服务调用深度学习推理模型时经常遇到GPU算力抖动导致的超时现象。由于Python模型团队缺乏完善的微服务开发经验,往往在代码中硬编码各种极不规范的重试逻辑,导致一旦出现大面积算力拥塞,极易引发全链路的雪崩效应。引入服务网格后,我彻底剥离了这些侵入式代码。无论上层应用是Java、Python还是C++,其所有入站和出站流量均被劫持至伴生的Envoy代理中。我通过Istio控制平面全局下发配置,为所有高耗时推理服务统一设定了网络层的超时、重试与连接级熔断策略。同时,当算法团队发布精度更高的新版感知模型时,平台不再需要业务配合停机,而是直接在网格层基于请求头或权重设置灰度路由策略,将百分之五的影子流量率先导入新版本,在精准验证资源占用与错误率无异常后,再平滑放量至全网。这一改造让算法工程师得以百分之百专注于模型代码本身,极大加速了异构业务的迭代交付能力。

二、在系统运维的可观测性体系建设上,我用基于 Envoy 伴生代理结合 Prometheus 与 Jaeger 的全链路追踪方案,解决了由于自动驾驶数据闭环链路过长导致的数据处理卡顿与单点故障定位极其困难的问题,实现了平台跨组件调用耗时的透明化及异常节点的秒级定界效果。一次完整的数据挖掘与打标任务,往往会横跨网关接入、元数据解析、特征提取、2D/3D融合标注以及最终的仿真集发布等数十个微服务节点。原系统故障排查之所以缓慢,正是由于缺乏一个贯穿全语言的“上帝视角”。在网格架构下,我利用Envoy天生具备的全流量拦截特性,实现了标准化的遥测数据自动采集。当车辆上报的数据包进入平台时,网格入口网关会自动生成并向后透传TraceID。即使是缺乏埋点经验的C++仿真服务,只要流量经过其Sidecar,就会被自动上报诸如QPS、P99延迟以及上下游依赖等黄金指标。通过将这些数据接入Grafana大盘与追踪分析系统,运维团队现在的排障方式发生了质变:当某批路测数据处理超时,直接通过链路拓扑图即可清晰看到耗时是集中在数据库层的慢SQL,还是阻塞在某个GPU节点的模型推理上。这种所见即所得的观测底座,直接将核心链路的排障耗时压缩了一半以上。

三、在平台内部的数据安全管控方面,我用基于网格 mTLS 加密通信与细粒度授权策略(AuthorizationPolicy)的零信任治理方案,解决了极其敏感的自动驾驶模型资产与路测隐私数据在内部网络极易遭到越权访问的安全隐患,实现了核心数据域内部通信的绝对可信与高强度的边界隔离效果。路测数据包含大量未脱敏的行人面部与车牌特征,相关模型更是车企花费上亿算力训练出的核心壁垒。传统的边界防火墙防御模式在面对庞杂的内部微服务调用时形同虚设。为了践行“零信任”架构,我规划了分阶段的安全治理演进。在改造初期,我先在非核心业务域开启宽容模式(PERMISSIVE),允许明文与加密流量并存,以平滑梳理错综复杂的跨语言调用关系。在摸清底数后,我针对模型仓库、训练调度中心等核心敏感命名空间强制开启严格模式(STRICT),实现所有微服务间通信的mTLS双向加密,彻底杜绝内网数据嗅探。在此基础上,我进一步配置了基于服务账号(ServiceAccount)的授权策略,明确规定只有经过签名的训练调度服务才有资格拉取模型仓库的权重文件,其他任何非白名单服务发起的网络请求都会在底层的Envoy代理端被直接拦截阻断。这套零信任防御体系为自动驾驶的数据流转构筑了一道坚不可摧的安全城墙。

【总结】

经过长达八个月的分阶段实施与演进,新一代自动驾驶数据闭环平台于2024年11月顺利全量上线并平稳运行至今。网格架构的引入非但没有增加系统的响应负担,反而通过精细化的资源隔离(限制Sidecar的配置感知范围)保障了大规模集群的运行效率。目前,平台不仅支撑了日均TB级的高价值数据挖掘与自动化标注作业,更让跨语言服务的接入周期从数天缩短至大半天。回顾整个项目的架构重构历程,我深刻体会到,对于包含多种技术栈、调用链路极其复杂的系统而言,服务网格无疑是解耦业务与基础设施的最佳利器。在未来的平台规划中,我将重点关注 Ambient Mesh(无Sidecar模式的服务网格)以及底层的 eBPF 技术,以期进一步降低数据代理带来的CPU与内存开销,为公司的自动驾驶业务打造一个更加轻量、极致的云端算力底座。

【费曼学习法拆解】

费曼学习法的目标:你能把它讲给一个“懂业务但不懂网格”的人听,而且对方能复述出主线。

1)一句话总纲

先背这句:

因为自动驾驶数据闭环平台存在 Java、Python、C++ 多语言服务并存,导致传统 Spring Cloud 治理侵入性强、非 JVM 服务接入困难、链路观测和安全管控不统一,所以我引入 Istio 服务网格,将流量治理、可观测性和 mTLS 安全下沉到 Sidecar 基础设施层,并采用“先观察、后管控”的三阶段迁移,最终使核心链路故障定位时间缩短约 60%,跨语言服务接入效率提升约 50%。


2)费曼讲解脚本:60 秒版

把服务网格讲成人话:

原来平台是 Spring Cloud 微服务,Java 服务治理比较方便,但自动驾驶数据闭环平台里不只有 Java,还有 Python 模型服务和 C++ 仿真服务。

问题是,Python 和 C++ 很难直接复用 Spring Cloud 的限流、熔断、重试、链路追踪和安全能力。结果就是不同语言维护不同治理逻辑,升级治理框架还要改业务代码,维护成本高,故障定位也慢。

我引入 Istio 的思路是:不再让每个服务自己在代码里实现治理,而是在每个 Pod 旁边放一个 Envoy Sidecar。所有服务之间的流量先经过 Sidecar,业务服务只写业务逻辑,限流、熔断、灰度、追踪和 mTLS 安全由 Sidecar 和 Istio 控制平面统一完成。

我主要做了四件事:

第一,做流量治理。用 VirtualService 和 DestinationRule 实现灰度发布、超时、重试和熔断,让新版本模型服务可以先接 5% 流量,稳定后再逐步放量。

第二,做可观测性。通过 Envoy 自动采集请求量、错误率和延迟,并用 TraceID 串联数据接入、场景挖掘、自动标注、训练调度和仿真验证链路。

第三,做安全治理。先用 PERMISSIVE 模式观察调用关系,再对核心命名空间启用 STRICT mTLS,并通过 AuthorizationPolicy 限制服务访问权限。

第四,做平滑迁移。先接入非核心服务,只观察不管控;再接入核心服务,逐步启用灰度、熔断和超时;最后再启用 mTLS 和访问控制,避免一次性切换导致业务中断。

落地过程中有两个坑:一个是 Sidecar 带来的资源开销和配置膨胀,我用 Sidecar 资源限制服务感知范围;另一个是少量 C++ 服务使用私有 TCP 协议,我没有强行做复杂解析,而是先纳入 TCP 层治理,再小范围试点 Envoy 扩展,长期推动协议标准化。

最终效果是:跨语言服务接入效率提升约 50%,核心链路故障定位时间缩短约 60%。


3)记忆小抄:6 个关键词钩子

按顺序背:

异构治理痛点 → Sidecar 解耦 → 流量治理 → 可观测性 → mTLS 安全 → 平滑迁移与两类挑战

每个词绑定一句可扩写解释:

1. 异构治理痛点

Java、Python、C++ 多语言服务并存,Spring Cloud 对非 JVM 服务支持弱,导致多套治理体系、升级侵入大、链路观测不统一。

2. Sidecar 解耦

把限流、熔断、重试、灰度、追踪和安全认证从业务代码迁移到 Envoy Sidecar,治理能力下沉到基础设施层。

3. 流量治理

通过 VirtualService 和 DestinationRule 统一实现灰度发布、超时、重试和熔断,保护数据处理、自动标注和模型评估等核心链路。

4. 可观测性

通过指标、日志和 TraceID 串联数据接入、清洗、场景挖掘、预标注、训练调度和仿真验证链路,使故障定位从查日志变成按链路找瓶颈。

5. mTLS 安全

先 PERMISSIVE 观察,再对核心命名空间启用 STRICT mTLS,并用 AuthorizationPolicy 控制服务访问权限,实现服务间身份可信和通信加密。

6. 平滑迁移与两类挑战

迁移按“先观察、后管控;先边缘、后核心”推进。Sidecar 资源开销通过 Scope 隔离降低,私有 TCP 服务先做连接级治理,再小范围试点协议扩展。


4)三个为什么:费曼核心

为什么要从 Spring Cloud 迁到 Istio?

因为自动驾驶数据闭环平台不只有 Java 服务,还有 Python 模型服务和 C++ 仿真服务。Spring Cloud 对非 JVM 服务治理支持弱,导致治理逻辑分散、接入标准不统一、框架升级侵入业务代码,所以需要把治理能力下沉到语言无关的网络代理层。

为什么 Sidecar 能解决多语言治理?

因为 Sidecar 治理的是服务之间的网络流量,而不是某种编程语言的代码。Java、Python、C++ 服务只要部署在网格中,流量都经过 Envoy,就可以统一获得灰度、熔断、限流、追踪和 mTLS 安全能力。

为什么要强调平滑迁移?

因为服务网格迁移相当于给已有微服务系统更换通信底座。如果一次性全量注入 Sidecar 并启用强管控,可能引入延迟、资源开销、探针异常、mTLS 兼容问题和协议适配问题。因此必须先观察、后管控,先边缘、后核心,逐步扩大范围。

5)必须背住的两个工程落地坑

坑 1:Sidecar 资源消耗与配置膨胀

现象:
注入 Envoy Sidecar 后,部分 Pod 的 CPU 和内存占用明显上升,控制平面配置推送压力增加。

根因:
默认情况下,Sidecar 可能感知集群中过多服务,Envoy 需要维护较大的服务发现、路由和策略配置。

解法一句话:
按业务域划分 Namespace,并通过 Sidecar 资源限制配置感知范围,只让每个 Sidecar 看见自己业务域需要访问的服务。

收益一句话:
代理资源占用和控制面配置推送压力明显下降,大规模服务发布时不再出现集中推送导致的明显抖动。

坑 2:私有 TCP 二进制协议治理

现象:
部分 C++ 仿真服务使用私有 TCP 二进制协议,Istio 无法像 HTTP / gRPC 那样识别业务路径和请求字段。

根因:
Envoy 对标准 HTTP / gRPC 的七层治理能力成熟,但对私有二进制协议无法天然理解业务语义。

解法一句话:
先纳入 TCP 层治理,实现连接级超时、连接数限制、基础指标采集和故障隔离;确需业务字段识别的少量服务,再在灰度环境中试点 Envoy 扩展;长期推动新服务改造为 gRPC 或标准 HTTP 协议。

收益一句话:
避免大规模重写老服务,也避免在核心链路上过度使用高风险自定义插件,使迁移更加稳妥。

6)考场最稳主矛盾句

直接背这句:

因为自动驾驶数据闭环平台存在 Java、Python、C++ 多语言服务并存,导致传统 Spring Cloud 治理侵入业务代码、非 JVM 服务接入困难、链路观测和安全管控不统一,所以我引入 Istio 服务网格,将流量治理、可观测性和 mTLS 安全下沉到 Envoy Sidecar 基础设施层,并通过分阶段迁移降低改造风险,最终使核心链路故障定位时间缩短约 60%,跨语言服务接入效率提升约 50%。

7)极简背诵版

考试紧张时,只背这一版:

原平台是 Spring Cloud 微服务,但自动驾驶数据闭环平台里有 Java、Python、C++ 多语言服务,治理逻辑分散,链路追踪和安全管控不统一。我引入 Istio 服务网格,在每个 Pod 旁边注入 Envoy Sidecar,把灰度、熔断、限流、追踪和 mTLS 从业务代码中解耦出来。迁移时先观察、后管控,先边缘、后核心,并通过 Sidecar Scope 控制资源开销,对私有 TCP 服务先做连接级治理。最终故障定位时间缩短约 60%,跨语言服务接入效率提升约 50%。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐