系统架构必备知识列表,收藏这篇就够了 - 编号81841

@@@@@ 2025-12-05 31

大多数系统崩溃不是因为硬件故障,而是因为架构设计时忽略了数据一致性、流量突发或依赖链路的脆弱性——据 AWS 统计,约 40% 的生产事故源于服务间的超时与级联失败。

1. 并发控制与数据一致性:从扣库存场景理解 CAP 取舍

想象一个秒杀系统:用户 A 和 B 同时购买最后一件商品,若架构只用简单查询库存再扣减,两个请求可能都读到“库存为 1”然后各自扣减,导致超卖。实际项目中,依赖数据库行锁(如 MySQL SELECT ... FOR UPDATE)或 Redis 原子操作(DECR)才能保证一致性。但锁会降低吞吐,因此高并发场景需接受最终一致性:比如先扣 Redis 库存、异步落库,若失败则回滚或补偿。典型反例是某电商在 2023 年双十一因库存服务用乐观锁重试未限制次数,导致数据库连接池被打满。

2. 容量规划与弹性扩缩:预算有限的团队如何避免“流量尖刺”

某初创公司上线社交裂变活动,预期 QPS 3000,结果瞬间冲到 15000,服务直接雪崩。核心问题是只按均值规划资源,没考虑突发系数。正确做法是预先做压测(使用 Locust 或 JMeter 模拟 2-5 倍峰值),同时设定自动扩缩阈值(如 CPU 超 70% 时扩容 2 个 Pod)。更关键的是设计降级方案:比如用户头像加载失败时用默认占位图,而非让整个页面 500。对比 Netflix 的 Chaos Engineering,他们主动注入故障来验证系统韧性,而多数团队只在事故后被动修复。

3. 依赖治理与故障隔离:为什么“熔断降级”比“无脑重试”更重要

一个典型场景:订单服务依赖支付网关,支付网关故障时,订单服务不断重试,导致线程池被占满,继而影响所有订单查询接口。这就是级联雪崩。实际解决方案是引入熔断器(如 Hystrix 或 Sentinel):当错误率超过 50% 时,直接拒绝后续请求并返回降级响应(如“支付繁忙,稍后重试”),同时定期探测下游是否恢复。另一个易忽略的点是超时设置——很多团队把 RPC 超时设为 10 秒,但若下游平均响应 200ms,10 秒只是徒增资源占用,应设为“95 分位响应时间 + 200ms 缓冲”。

三个常犯误区与具体建议:

  • 误区一:认为“拆分微服务就能解决问题”。 建议:先评估业务复杂度,小团队用模块化单体,等出现明确拆分痛点(如独立部署需求、不同资源消耗)再拆分,否则服务间 RPC 延迟和运维成本会抵消收益。
  • 误区二:只做功能测试,不压测且不设限流。 建议:上线前必须用流量录制或模拟工具做全链路压测,并在网关层配置 QPS 限流(如 Nginx 限流模块或 Sentinel)和并发线程数限制。
  • 误区三:忽略观察性(Observability)。 建议:至少集成日志(结构化 JSON 便于查询)、指标(Prometheus 采集 CPU/内存/错误率)、链路追踪(Jaeger 或 Zipkin),否则故障排查如大海捞针。