2. AWS微服务技术选型
在 AWS 上落地微服务,技术选型往往不是“哪个最好”,而是“哪个最匹配当前团队与业务约束”。EKS、ECS、Fargate、Lambda 解决的是计算承载问题,App Mesh 解决的是服务间通信治理问题,Cloud Map 解决的是服务发现问题。它们并非互斥,而是可以按层次组合。理解每一层的职责边界,是做出合理选型的前提。
一、先分清两层:计算承载与服务通信
很多选型混乱源于把不同层次的东西放在一起比较。可以这样划分:
- 计算承载层:EKS、ECS、Fargate、Lambda。决定代码以什么形态运行、如何扩缩容、如何计费。
- 通信治理层:App Mesh、Cloud Map。决定服务之间如何找到彼此、流量如何路由、故障如何隔离。
其中 Fargate 比较特殊:它既是 ECS 的一种启动类型,也是 EKS 的一种启动类型,本质是“无服务器容器运行时”,而不是与 ECS/EKS 并列的调度器。Lambda 则是函数级无服务器计算,不涉及容器编排。
二、计算承载选型的判断维度
选择计算方案时,建议按以下顺序自问:
- 是否需要长期驻留进程? 需要长连接、常驻消费者、本地缓存、复杂初始化,倾向容器;纯事件驱动、短时任务,倾向 Lambda。
- 团队是否已有 Kubernetes 能力? 有则 EKS 的生态与可移植性价值高;没有则 ECS 的学习曲线更平缓。
- 是否愿意管理节点? 不愿管理节点、希望按需付费,选 Fargate;需要 GPU、特定内核参数、极致成本优化,选 EC2 自管节点。
- 调用模式是否突发且稀疏? 稀疏突发用 Lambda 更省;稳定高吞吐用容器更可控。
| 方案 | 典型适用场景 | 主要代价 |
|---|---|---|
| EKS | 多团队共享平台、需要 K8s 生态、混合云可移植 | 控制面与运维复杂度较高 |
| ECS | 纯 AWS 环境、中小团队、快速交付 | 与 AWS 绑定较深 |
| Fargate | 不想管节点、按需计费、任务型容器 | 单价高于自管节点,冷启动略慢 |
| Lambda | 事件驱动、API 后端、定时任务、胶水逻辑 | 运行时长与并发受限,冷启动 |
三、通信治理:App Mesh 与 Cloud Map 的分工
Cloud Map 是服务发现层。它维护“服务名 → 实例地址/端口”的映射,支持 DNS 与 API 两种发现方式。ECS 服务可直接注册到 Cloud Map;EKS 通常用 K8s Service,但跨集群或混合场景可用 Cloud Map 统一命名空间。
App Mesh 是服务网格层。它通过 Envoy 边车代理接管服务间流量,提供流量路由、重试、超时、熔断、mTLS 和可观测性。App Mesh 依赖服务发现来定位目标,因此常与 Cloud Map 或 EKS 的 K8s 服务发现配合使用。
四、组合策略:三种典型形态
形态 A:ECS + Fargate + Cloud Map + App Mesh。 适合中小团队快速构建微服务。ECS 负责调度,Fargate 免去节点管理,Cloud Map 做服务注册发现,App Mesh 提供统一的重试与熔断策略。缺点是 App Mesh 边车会增加资源开销与延迟。
形态 B:EKS + Fargate/EC2 + App Mesh。 适合已有 K8s 能力的团队。EKS 提供成熟的编排与生态,App Mesh 与 K8s 集成后可复用 VirtualService 等概念。若追求成本可控,核心服务用 EC2 节点,突发任务用 Fargate。
形态 C:Lambda + API Gateway + Cloud Map(可选)。 适合事件驱动型服务。Lambda 之间通过事件总线或直接调用通信,通常不需要 App Mesh;若 Lambda 需要调用 ECS/EKS 服务,可通过 Cloud Map 或内部 ALB 定位目标。
五、一个可参考的选型决策路径
下面这张图把上述判断逻辑整理为一条决策路径,帮助你在具体项目中快速定位候选方案。
六、组合时的关键注意事项
1. 不要为了网格而网格。 如果服务数量少、调用关系简单,App Mesh 带来的边车资源开销和运维复杂度可能得不偿失。通常服务数量超过 10 个、或需要统一 mTLS 与细粒度流量控制时,网格价值才明显。
2. 服务发现方式要统一。 同一命名空间内混用 K8s Service、Cloud Map DNS 和硬编码地址,会导致故障排查困难。建议明确一种主发现机制,跨集群场景再用 Cloud Map 桥接。
3. 冷启动与超时要匹配。 Lambda 冷启动可能达到数百毫秒到数秒,若被 App Mesh 的默认超时(通常 15 秒)覆盖尚可,但若上游设置了 1 秒超时,就会频繁失败。选型时必须把超时、重试、并发限制一起考虑。
4. 成本模型要算清。 Fargate 按 vCPU/内存秒计费,适合波动负载;EC2 节点适合稳定高负载。Lambda 按调用次数与执行时长计费,稀疏调用极省,但高频调用可能比容器更贵。建议用实际请求曲线做一次粗算,而不是凭感觉选择。
七、小结与选型建议
如果团队刚起步、服务数量少,建议从 ECS + Fargate + Cloud Map 开始,先跑通服务注册与发现,暂不引入网格。当服务间调用复杂度上升、需要统一重试与熔断策略时,再叠加 App Mesh。如果团队已有 K8s 能力且追求生态与可移植性,直接选 EKS,按负载类型混合使用 EC2 与 Fargate 节点。对于事件驱动、短时任务和胶水逻辑,用 Lambda 承接,避免为低频调用维护常驻容器。
选型的本质是匹配约束:团队能力、负载形态、成本预算、运维投入。没有唯一正确答案,只有当前阶段最合适的组合。建议把上述决策路径作为起点,结合真实流量与成本数据做一次验证,再逐步调整。