单体 vs 微服务
单体:简单部署,模块内调用。微服务:独立进程、独立 DB(理想)、技术栈可选。代价:网络调用、分布式 tracing、部署复杂度。
核心组件
Client → API Gateway → Service A ↔ Service B
↓
Registry (etcd/consul)
↓
Config / Trace / Log
- 注册发现:实例上下线自动更新
- 配置中心:动态开关
- 链路追踪:OpenTelemetry trace id 贯穿
通信
- 同步 REST/gRPC:简单、耦合高
- 异步 MQ:解耦、最终一致(Week 6)
resilience 模式
- 超时 必设
- 重试 仅幂等接口 + 退避
- 熔断 错误率超阈打开,冷却后 half-open
- 舱壁 线程池隔离
- 限流 令牌桶保护自身
数据一致性
每服务私有 DB;跨服务 Saga 编排或编排器补偿,避免 2PC 锁资源。
可观测性
Metrics(Prometheus)、Logs(ELK)、Traces(Jaeger)。SLI/SLO 驱动告警。
与 Go 栈
Go 微服务常见:gin/echo + grpc + k8s + istio sidecar mTLS。
面试
画你项目服务拆分;一次线上故障如何用熔断与降级止血。下一篇:week07-system-design-framework。
实战巩固与面试表达
本篇属于 8 周冲刺 week07-microservices-design 主题。复习时先闭卷回答 frontmatter 中三张 flashcard,再展开口述两个「为什么」:为什么这种方案能 work、边界失败时如何降级。与相邻章节对照:算法篇强调复杂度与模板,Go 篇强调工程默认写法,中间件篇强调线上故障案例。
动手与自检清单
用 25 分钟限时做 1 道相关练习题或画出一张架构/数据结构示意图;用 5 分钟写 STAR 片段说明你在项目里是否用过类似技术。记录 3 个面试追问及你的标准答法,存入 /zh/notebook/master-plan 笔记。若某点不熟,回到对应 /chapters 交互 Lab 重新走一遍流程,比死记卡片更有效。
易错点提醒
避免只背名词不会画图;避免只说优点不谈 trade-off(性能、一致性、运维成本至少提一项);避免把学习 Demo 说成百万 QPS 生产。回答时使用「场景 → 方案 → 结果 → 反思」四段式,体现工程成熟度。
补充要点
BFF 聚合减少客户端往返;sidecar 模式 service mesh。配置热更新与 feature flag。灰度发布 canary 按流量百分比。
自检
列举 3 个「不应微服务化」的信号(小团队、强事务、低 QPS)。