OrderServ如何借助多租户ECS实现高达64%的成本节省

OrderServ如何借助多租户ECS实现高达64%的成本节省

💡 原文英文,约2900词,阅读约需11分钟。
📝

内容提要

Cognizant的OrderServ食品订购平台原为每个品牌单独运行ECS集群,成本随品牌数线性增长,扩容需5–7分钟。AWS与其合作改为多租户架构:共享ECS集群加租户隔离库,EC2热池实现30–60秒扩容,崩溃可观测管道保留日志与转储,并用Passkeys替代短信验证码。结果计算成本降47–64%,认证成本降80%,新品牌上线从数天缩至分钟级。

🔎

延伸解读

隔离边界从基础设施移到代码:收益与风险并存

OrderServ 把租户隔离的主要执行点放在共享的 .NET Core 租户库中,IAM 和资源策略只作为兜底。好处是同一套服务二进制既能跑共享集群也能跑专用集群,隔离模型变成部署选择而非架构约束。但文章也承认代码可能有缺陷,且 ECS 任务角色按任务而非按请求授予,共享集群中的任务天然持有多个品牌的权限。为此它用 sts:AssumeRole 按租户获取临时凭证,并让 Valkey 用 RBAC 在缓存层再拦一道。读者应关注:这种模式对代码质量和运行时凭证管理的依赖明显更高。

扩容提速的关键不只是换掉 Fargate

文章把 5–7 分钟的扩容延迟主要归因于 Fargate 需要下载并解压大容器镜像。迁移到 EC2 Auto Scaling 组加 Bottlerocket 热池后,停止状态的实例已预缓存镜像并注册 ECS 代理,启动只需 30–60 秒,代价是每个停止实例约每月 3 美元的 EBS 存储。更值得注意的是五层扩容策略:预测性伸缩、定时伸缩、目标跟踪、80% 容量余量和按租户限流,分别对应不同流量形态。这说明单靠热池并不够,还需要余量和限流来兜住突发峰值。

成本数字有前提:区域、承诺期与预留容量

47–64% 的计算成本降幅对应的是亚太(孟买)区域运行 21 个服务的月度估算:Fargate 按需约 1,568 美元,EC2 加一年期 Compute Savings Plan 约 832 美元,三年期约 568 美元。也就是说,降幅高低取决于承诺期限,而 Savings Plan 本身带有承诺。文章还区分了按需容量预留与 Savings Plan 的不同作用:前者保证可用区容量、无期限承诺,后者提供折扣。读者在套用这些数字前,需要结合自身区域定价、服务数量和承诺意愿重新测算。

可观测性与认证的改造同样值得单独借鉴

崩溃可观测管道用 FireLens 边车在容器运行时层面接管 stdout,即使应用容器被 OOM 杀死日志仍能送达;EventBridge 保留任务停止元数据 90 天,EFS 持久化 .NET 迷你转储,整条管道约每服务每月 10 美元,并称可观测成本降低 62%。认证方面,Passkeys 把每次登录约 0.03 美元的短信 OTP 换成约 2 秒的生物识别,短信成本降 80% 以上,且每个品牌使用独立 Cognito 用户池和 Relying Party ID 实现密码学隔离。这两项改造与多租户共享计算相对

❓

Q&A

OrderServ 原来的架构为什么成本会随品牌数线性增长?

原架构为每个品牌单独运行一个 ECS 集群,每个集群包含 21 个微服务。品牌数增加时,需要为每个品牌复制整套服务、边车容器和基础设施,导致成本随品牌数线性增长,且非高峰时段存在大量闲置容量。

OrderServ 如何实现多租户隔离而不为每个品牌单独建集群?

OrderServ 采用共享 ECS 集群,并通过一个 .NET Core 租户隔离库在应用层实现隔离。该库从请求头解析租户 ID,路由所有数据访问(DynamoDB 表名、Valkey 键前缀、Aurora schema、S3 路径),并拒绝构造不带租户前缀的资源 ID。同时,每个租户使用独立的数据存储(DynamoDB、Aurora、Valkey),并利用 KMS 加密和 TLS 保护数据。对于高流量品牌,仍可选择使用专用集群。

OrderServ 如何将扩容时间从 5-7 分钟缩短到 30-60 秒?

OrderServ 从 AWS Fargate 迁移到 Amazon EC2 Auto Scaling 组,并使用 Bottlerocket 操作系统和热池。热池中的实例已预初始化并停止,仅支付 EBS 存储费用(约 $3/月/实例)。当需要容量时,启动已停止的实例只需 30-60 秒,因为镜像已预缓存且 ECS 代理已注册。此外,还实施了五层扩缩容策略(预测性扩缩容、计划扩缩容、目标跟踪、容量余量、下游节流)来应对不同流量模式。

OrderServ 的崩溃可观测性管道如何确保崩溃时的日志和诊断信息不丢失?

OrderServ 使用 FireLens(Fluent Bit)边车容器在容器运行时层面收集日志,即使应用容器崩溃,边车仍能将结构化 JSON 日志(含 X-Ray 跟踪 ID)发送到 CloudWatch Logs 和 S3。对于硬崩溃,.NET Core 运行时自动将迷你转储写入挂载在 EFS 上的 /tmp/dumps 目录,EFS 的持久性确保转储在容器终止后仍可访问。EventBridge 捕获任务停止事件并保留 90 天。整个管道成本约 $10/月/服务。

OrderServ 为什么用 Passkeys 替代短信验证码?效果如何?

短信验证码每次登录成本约 $0.03,且登录延迟 15-30 秒,影响用户体验。OrderServ 采用基于 WebAuthn 的 Passkeys,利用 Amazon Cognito 原生支持,首次注册通过手机号+OTP 验证,后续登录使用 Face ID 或指纹,约 2 秒完成,无短信成本。每个品牌使用独立的 Cognito 用户池和 Relying Party ID,实现密码学隔离。结果认证成本降低 80% 以上,登录延迟降至约 2 秒,并具备抗钓鱼能力。

OrderServ 迁移到多租户架构后,整体成本节省了多少?

计算成本降低 47-64%(取决于 Savings Plan 期限),认证成本降低 80% 以上,可观测性成本降低 62%。扩容时间从 5-7 分钟缩短到 30-60 秒。新品牌上线从数天缩短到分钟级。对于服务超过 5 个品牌的场景,年度总节省超过之前基础设施成本的 60%。

🏷️

标签

➡️

继续阅读