1. 课程导入与全景认知

在单体应用时代,一个电商系统往往被打包成一个巨大的 WAR 或 JAR,部署在一台或几台 EC2 上。订单、库存、支付、用户、通知全部耦合在同一个进程里,一次发布要全量上线,一个模块的内存泄漏会拖垮整个系统。当业务增长到数百人协作、每天上百次发布时,这种架构的代价变得不可承受。微服务正是对这一困境的回应:把系统按业务能力拆成一组小而自治的服务,每个服务独立开发、独立部署、独立扩缩容,通过轻量级协议通信。

AWS 上的微服务演进大致经历了三个阶段。第一阶段是"EC2 + 自建注册中心":服务跑在 EC2 或 Auto Scaling 组里,用 Eureka、Consul 做服务发现,用 Nginx 或 ALB 做入口。这一阶段控制力强,但运维负担重,扩缩容、健康检查、证书轮换都要自己写。第二阶段是"容器化 + 编排":ECS 或 EKS 承载服务,任务定义和 Deployment 描述副本数,服务发现交给 AWS Cloud Map,配置交给 Parameter Store 或 AppConfig。第三阶段是"Serverless 与托管集成":Lambda、Fargate、API Gateway、EventBridge、Step Functions 让团队把精力从"管服务器"转向"管业务边界",通信从同步调用扩展到事件驱动。

架构演进并没有消灭复杂性,只是把复杂性从"机器"转移到了"服务之间"。这正是微服务治理要解决的问题。治理挑战可以归纳为四类。其一是服务发现与流量入口:服务实例的 IP 是动态的,调用方不能硬编码地址,需要注册、发现、健康检查和负载均衡。其二是弹性与容错:一个下游服务变慢,如果调用方无限等待,线程池会被耗尽,故障沿调用链向上蔓延,这就是级联失败。其三是可观测性:一次用户请求可能穿过五六个服务,没有统一的 Trace ID、结构化日志和指标,排障就像在黑箱里摸索。其四是安全与配置:服务间调用需要身份认证和授权,密钥不能写进代码,配置变更要能灰度生效。

服务通信是治理的核心战场,它要回答几个具体问题。第一,用什么协议:同步的 REST/HTTP、gRPC,还是异步的消息与事件?同步调用简单直观,但会形成强耦合和阻塞;异步解耦更好,但引入了最终一致性和消息重复的复杂度。第二,怎么找到对方:是客户端发现(调用方查注册表再直连),还是服务端发现(调用方只访问负载均衡器)?第三,失败了怎么办:超时设多少、重试几次、是否要熔断、降级返回什么?第四,数据怎么传:请求响应式的一问一答,还是事件流式的发布订阅?

下面这张图把本课程的知识地图与通信决策路径放在一起,帮助你在后续章节中定位每个知识点所处的位置。

AWS 微服务治理与通信 · 学习地图 从架构演进到通信决策,再到治理能力落地 架构演进三阶段 ① EC2 + 自建注册中心 Eureka / Consul / Nginx / ALB ② 容器化 + 编排 ECS / EKS / Cloud Map / AppConfig ③ Serverless + 托管集成 Lambda / Fargate / EventBridge 服务通信决策路径 调用方发起请求 同步 or 异步? REST/gRPC vs 消息/事件 异步:SQS / SNS / EventBridge 解耦、削峰、最终一致 同步:怎么找到对方? 客户端发现 / 服务端发现 Cloud Map / ALB / API Gateway 注册、发现、负载均衡 四大治理能力 服务发现与流量入口 注册 / 发现 / 健康检查 / LB 弹性与容错 超时 / 重试 / 熔断 / 降级 可观测性 Trace ID / 日志 / 指标 安全与配置 IAM / 密钥 / 灰度配置 贯穿主线:一次请求的完整生命周期 入口 → 发现 → 调用 → 容错 → 追踪 → 配置生效 课程模块分布(共 30 章) 基础与演进 架构认知 · 通信模型 服务发现与通信 Cloud Map · ALB · gRPC 弹性与容错 超时 · 重试 · 熔断 · 降级 可观测与安全 X-Ray · 日志 · IAM · 配置

把这张图读成一条主线:架构演进决定了通信形态,通信形态决定了治理重点,治理重点决定了你要在 AWS 上选哪些托管服务。例如,当你选择事件驱动架构时,治理重点就从"熔断降级"转向"消息幂等、死信队列和顺序保证";当你选择 gRPC 时,服务发现和负载均衡的实现方式又与 REST 不同。

为了让你在动手前有明确的判断依据,下面给出一份通信方式选型参考表。表中的延迟、吞吐为典型量级的合理估计,实际值取决于实例规格、网络路径和负载特征,需以压测结果为准。

通信方式 典型延迟量级 耦合程度 适用场景 AWS 常用组件
REST / HTTP+JSON 毫秒级 中(接口契约) 对外 API、简单查询、团队技术栈统一 API Gateway、ALB、ECS/EKS
gRPC / HTTP2+Protobuf 亚毫秒至毫秒级 中高(强契约) 内部高频调用、流式传输、多语言 ECS/EKS、Cloud Map、ALB(gRPC)
消息队列 毫秒至秒级 低(时间解耦) 削峰填谷、异步任务、可靠投递 SQS、Amazon MQ
事件总线 毫秒至秒级 极低(空间解耦) 多消费者广播、领域事件、跨服务编排 EventBridge、SNS
选型时先问三个问题:调用方是否需要立即拿到结果?下游故障是否允许阻塞上游?同一事件是否需要多个消费者?三个问题分别指向同步/异步、容错边界和广播需求,答案基本能锁定通信方式。

本课程后续章节会沿着这条主线展开:先讲清楚服务发现与流量入口如何在 AWS 上落地,再进入同步通信的容错设计,然后扩展到异步消息与事件驱动,最后补齐可观测性、安全与配置治理。每一章都会给出可运行的配置片段、参数取值依据和结果判读方法,而不是停留在概念层面。

在开始之前,建议你先建立两个习惯。第一,为每个服务定义清晰的边界和契约:输入是什么、输出是什么、失败时返回什么,契约稳定了,通信方式才有讨论的基础。第二,把可观测性当作一等公民:从第一个服务开始就注入 Trace ID、输出结构化日志、暴露关键指标,否则等到系统复杂后再补,成本会高得多。

微服务不是银弹。拆分带来的分布式事务、网络延迟、运维复杂度是真实成本。如果团队规模小、业务边界不清晰,单体加模块化往往是更务实的选择。本课程讨论的是"当你决定走微服务路线时,如何把治理和通信做对"。

接下来,我们将从最基础的服务发现开始,看看一个请求是如何从入口找到目标服务实例的。