vaelin.io类AI平台后端架构拆解
vaelin.io 这类 AI 平台的后端架构里,多租户模型隔离要解决的问题很简单:多个客户共用同一套推理服务时,不能让 A 租户调用、覆盖或读取 B 租户的模型。
常见做法并不是每租户一套 GPU 集群,而是通过命名空间、网关路由和存储权限组合实现逻辑隔离。
本文拆解三种主流思路和落地要点,帮你快速设计出可扩展的隔离方案。
先读懂模型隔离到底隔离什么
模型隔离通常涉及三个层面:模型文件、推理进程、调用入口。
- 模型文件:每个租户的模型权重、配置文件存放在独立目录或对象存储 Bucket,通过文件系统权限或 IAM 策略限制访问。
- 推理进程:不同租户的推理服务运行在独立容器或 Pod 中,避免一个租户的请求占满 GPU 显存,影响其他租户。
- 调用入口:API 网关根据租户标识把请求路由到对应模型服务,同时校验 Token 归属,防止越权调用。
三种隔离方案怎么选
不同规模、不同成本预算的 AI 平台,选择会相差很大。
- 网络隔离:每个租户独立 Kubernetes Namespace,配合 NetworkPolicy 隔离流量。适合安全要求高、租户数量少的场景。
- 进程级隔离:每个租户独立部署一套推理 Pod,资源用 ResourceQuota 和 LimitRange 限制。隔离最彻底,但资源成本高。
- 模型路由隔离:所有租户共享一套推理服务,网关通过请求头或 JWT 中的租户 ID 选择模型路径。成本低,适合中小型平台,但需要网关层多花功夫。
实际项目中,推荐先用模型路由隔离起步,再对高价值租户升级为独立 Pod,这样兼顾成本和扩展性。
按这五步落地多租户隔离
假设你已经在 Kubernetes 上跑着一套推理服务,可以按下面的顺序改造。
第一步:为每个租户创建独立命名空间,并设置资源配额。
kubectl create namespace tenant-a
kubectl create namespace tenant-b
创建配额文件 quota.yaml:
apiVersion: v1
kind: ResourceQuota
metadata:
name: gpu-quota
namespace: tenant-a
spec:
hard:
requests.nvidia.com/gpu: "1"
limits.cpu: "8"
limits.memory: 16Gi
应用后,租户 A 最多只能使用 1 张 GPU,避免资源抢占。
第二步:模型存储使用独立目录或对象存储 Bucket。
如果使用共享存储卷,必须用 subPath 区分租户,并设置只读权限。
volumeMounts:
- mountPath: /models
name: model-store
subPath: tenant-a
readOnly: true
第三步:部署统一模型网关,接收所有推理请求,解析租户 ID,再转发到对应模型服务。
网关可以从 JWT 或后端 Token 中取租户 ID,不要信任前端传入的 Header。
# 伪代码示例
if request.token.tenant_id == "tenant-a":
upstream = "http://model-a.default.svc.cluster.local"
第四步:给每个模型服务设置独立的 HPA 和资源限制,避免某租户流量突增时把整台机器打满。
resources:
limits:
nvidia.com/gpu: "1"
memory: 8Gi
第五步:在网关层记录审计日志,每次调用都要包含租户 ID、模型版本、请求时间,方便后期排查越权和滥用。
容易踩的坑
- 逻辑隔离不等于安全隔离。如果多个租户共享同一个模型服务进程,一旦网关被绕过,模型文件就会暴露。高安全场景务必配合网络策略。
- 不要把租户 ID 放在自定义 Header。很多新手直接读
X-Tenant-Id,攻击者改成别人的 ID 就能越权。租户 ID 应该由网关从签名 Token 中解析。 - 模型版本变更时忘记切路由。更新模型后,要确保网关中的模型路径指向新版本,同时保留旧版本回滚入口。
- 对象存储权限配置遗漏。使用 S3 或阿里云 OSS 时,Bucket 策略必须显式限制每个租户只能访问自己的前缀,否则可能通过签名 URL 越权读取。
怎么验证隔离是否生效
搭建完成后,建议做三轮验证。
- 调用验证:分别用租户 A 和租户 B 的 Token 请求同一路由,确认返回的是各自模型的结果。
- 资源验证:查看 Pod 资源使用情况,确认
ResourceQuota生效,例如运行kubectl describe resourcequota -n tenant-a。 - 越权访问验证:尝试用租户 A 的凭证直接访问租户 B 的模型文件路径,预期返回 403 或拒绝连接。同时检查网关审计日志,确认租户 ID 被正确记录。
如果你正在设计 vaelin.io 类 AI 平台后端架构,建议先用模型路由隔离跑通业务,再逐步升级为独立命名空间和独立 Pod。
多租户模型隔离的核心是“入口鉴权、存储隔离、资源限制”三者缺一不可,遇到问题优先从这三个方向排查。