好题库要逼你回答三个问题:为什么、何时用、代价是什么
架构题很少有脱离场景的万能方案。熔断能阻止故障扩散,但会牺牲部分请求;缓存能降低延迟,却带来一致性和失效问题;事件溯源保留完整事件历史,也增加查询模型和运维复杂度。解析至少要把适用前提、收益和代价写出来。
判断题库质量时,不妨把正确选项遮住,只看解析能否回答这三个问题。如果解释只剩“因为这是某某模式”,那仍然停留在术语识别,没有进入架构决策。
| 检查维度 | 合格解析 | 薄弱解析 |
|---|---|---|
| 场景约束 | 说明流量、故障、一致性或时延条件 | 只复述题干 |
| 方案机制 | 讲清组件如何协作和状态如何变化 | 只给模式名称 |
| 收益 | 对应具体质量属性 | 笼统说提高性能 |
| 代价 | 说明复杂度、资源、一致性或可运维性影响 | 把方案写成没有缺点 |
| 失败模式 | 指出方案失效时会发生什么 | 完全不谈边界 |
用真实故障场景试题库,而不是用名词题试
可以连续试五类场景:支付超时重试如何避免重复扣款,消费者处理不过来怎样做背压,下游故障时熔断器半开状态怎么探测,跨服务写入怎样用Outbox或Saga控制一致性,以及两个组件组合后的可用性如何计算。
这些题能暴露解析是否真正理解机制。例如幂等键不仅是生成一个请求编号,还要和服务端唯一约束、结果复用配合;Saga不是强一致事务的同义词,而是通过一组本地事务和补偿动作处理长事务。
- 先圈出题目要求改善的质量属性,如可用性、性能或可修改性。
- 写出约束:能否接受最终一致、是否允许降级、失败能否补偿。
- 再选架构策略,并说明它如何改变故障传播或数据流。
- 补一句代价和监控点,避免把方案写成万能答案。
- 换一个约束重新判断,检验自己是懂机制还是背结论。
选择题、案例题和论文素材要互相喂养
高级备考不宜把三部分完全割裂。选择题里的质量属性和模式,是案例判断的工具;案例中的冲突和取舍,又可以沉淀成论文素材。比如“高峰期支付重试导致重复订单”,既能考幂等,也能扩展为可靠性设计、数据一致性和监控治理。
每做完一道有价值的场景题,可以留下四行:背景、约束、方案、结果。不要编造夸张指标,先把逻辑写完整。积累到后期,这些四行材料比背一篇通用论文更容易迁移。
| 训练材料 | 主要产出 | 如何迁移 |
|---|---|---|
| 选择题 | 术语边界和判断条件 | 用于案例中快速识别策略 |
| 场景题 | 约束、方案与代价 | 扩成案例回答和论文片段 |
| 案例题 | 结构化分析与采分表达 | 反查选择题知识缺口 |
| 项目素材 | 真实背景、决策和结果 | 按不同主题重新组织 |
例题复盘要留下决策链,而不是答案字母
架构题的错因通常藏在被忽略的约束里。看到“重复请求”就选重试,却没注意操作非幂等;看到“提高可用性”就选冗余,却没检查是否存在共同故障点。复盘时要把自己漏看的约束写出来。
题库数量当然要够,但更重要的是场景之间存在差异。连续十道题都用“高并发所以加缓存”,对能力提升有限。应让同一个策略分别出现在适用、不适用和需要组合治理的场景中。
支付超时重试的完整判断链
问题不是能不能重试,而是重试会不会重复产生业务效果。
客户端携带稳定幂等键,服务端用唯一约束识别同一次业务。
重复请求应返回原处理结果,而不是再次扣款。
还要监控处理中状态和超时边界,避免把幂等键当成全部方案。
相关题目解析
下面这些题目和本专题的判断方法关联较强,适合读完概念后回到具体题干里校验理解。
- 客户端超时重试支付请求时,幂等键应该怎样使用?Idempotency Key / 支付重试
- 熔断器等待一段时间后放行少量探测请求,处于什么状态?Circuit Breaker / Half-Open
- 两台应用节点并联、再串联数据库,总可用性怎么算?高可用 / 串并联系统
- 数据库写成功但消息发送失败,Outbox 模式怎样处理双写不一致?Transactional Outbox / 双写一致性
- Saga 和 TCC 分布式事务适合什么场景?Saga / TCC
常见问题
系统架构设计师题库应该优先刷什么?
先补质量属性、架构风格和分布式基础,再用故障场景题训练约束、策略与代价的判断,同时尽早把选择题知识迁移到案例短答。
系统架构设计师只刷选择题能通过吗?
不建议。选择题可以建立知识边界,但案例和论文需要独立组织分析与表达。备考早期就应加入短场景回答和项目素材整理。
如何判断系统架构设计师解析有没有深度?
看它是否说明适用前提、实现机制、对应质量属性、引入代价和失败模式。只给模式名称或宣传某方案万能,通常不足以支持变式题。