
关于作者
关于造父智能
业务场景与核心挑战
造父智能(哈啰robotaxi)在阿里云上进行自动驾驶训练的场景介绍
✓多云存储:同时使用多个公有云的对象存储,比如阿里云的 OSS,百度的 BOS,每个公有云的 SDK、IAM 体系和 endpoint 都不一样;
整体架构总览
五层数据流架构

核心架构是 Alluxio 加速层和 asset-api 编排层的配合设计:
核心能力框架
4点摘要对齐:
3条生产经验:
核心技术方案
UFS自动注册:从声明式到编排式的演进

扩展到多家公有云时,改动点仅一处:在 mountOptions 构建逻辑的 switch 里新增一行 case 分支即可,底层 SDK、配额、endpoint 差异仍然存在,但 mountOptions 层抽象保持稳定。如果我们要扩展支持新的公有云,只需要加这一行代码,用户就可以在多云场景下无缝使用多个公有云的存储。

挂载策略翻译:节点异构长期约束下的策略抽象

✓物理 GPU 节点:这是最常用也是首选的方式,可装 CSI Driver,首选 CSI Ephemeral Inline Volume;它在 Kubernetes 中是完整的 Node 节点,与 Alluxio 的适配是最好的,只需要部署 Alluxio 的专属 operator 就可以直接走 CSI 的挂载方式,直接在物理 GPU 上实现数据访问加速;

挂载翻译引擎采用纯函数设计,核心函数 Translate 接收 Mount 和 Params 参数,返回 Volume 和 VolumeMount 列表,通过 switch 分支实现三种挂载策略。该设计无外部依赖,HTTP/DB/ 配置中心均由调用方注入,三种策略对应独立的分支,彼此可独立测试;团队后续在新增节点或存储类型时,只需新增分支,不影响既有逻辑,天然具备确定性、无副作用、可独立演进的特性。团队可通过单队列灰度验证的方式,在独立队列上迭代、测试不同的挂载策略。
三种策略的适用域与代价:
subpath 失效与 CSI Ephemeral 自愈:突破 FUSE 自愈边界
根因分析:问题在 bind-mount 层
解决方案:对齐 Pod 生命周期

团队现在的解决方案是弃用静态 subpath,使用 CSI Ephemeral Inline Volume,不再预先声明静态 Volume,直接在 Pod 的 Volume 字段声明 CSI 类型卷,当 FUSE 异常的时候,CSI 的 NodePublish 会直接把新的挂载点传递到业务容器里,业务容器会立刻感知到挂载点变更,自动重新挂载。这个方案的适用域是短生命周期任务 Pod,不适用于长期运行的 infra Pod。
跨 NS PVC 自动同步:补齐 K8s 原生分发机制
解决方案
生产实践经验
多云凭证治理

造父智能(哈啰robotaxi)的多云凭证管理演进了三个版本:最开始是单 endpoint 维度,造父智能(哈啰robotaxi)在上海的一个 region,对应单一的 OSS 对象存储;后面演进到多集群 endpoint 的方式,因为团队发现单集群的计算节点不够用了,就引入了多集群共享同一个 OSS 的模式;第三个版本是 OSS 已经不能满足业务的存储需求,团队就引入了其他公有云的对象存储,变成了多云多集群的混合模式。

团队封装了统一的 ResolveS3Key 函数,调用方无需关心优先级规则,内部封装 cluster 优先 + endpoint 兜底的逻辑。这是典型的 “场景后追加” 问题,关键在于容纳历史的抽象设计,而非推倒重来。
路径规范化

队列级灰度
总结与展望

通过 Alluxio 核心加速层与 asset-api 编排层的配合,团队成功解决了多云异构 GPU 场景下的训练 I/O 瓶颈问题,实现了业务完全不感知底层存储差异的统一数据访问体验,在这个过程中团队逐渐明确了 Alluxio 企业版的边界条件,同时团队也在 K8s 平台层对这些边界做了补位。一句话总结就是:Alluxio 的核心价值是加速,平台的核心价值是把加速层合法接入 K8s 的各类现实约束。两层是配合关系,非竞争关系,平台层的复杂度,完全建立在 Alluxio 核心层的稳定之上。





