架构模式
目录概述
架构模式不是画图画出来的,是踩坑踩出来的。
很多人能画出漂亮的架构图,但被面试官一问"你们这个架构的缺点是什么?什么场景下不适用?",就答不上来。
这一模块带你从真实的系统演进出发,理解每种架构模式的适用条件、核心优势、已知局限,让你在面试和工作中都能做出更理性的架构决策。
内容范围
学习路径指引
P5 阶段:能描述、能画架构图
理解常见架构风格的基本结构和核心组件。
核心要求:
- MVC 三层:Model、View、Controller 各自负责什么?
- Spring MVC 的请求处理流程是什么?
- 什么是贫血模型?什么是充血模型?
P6 阶段:能设计、能做技术选型
能根据业务场景选择合适的架构风格。
核心要求:
- 什么时候该拆分微服务?拆多细?
- 服务治理:注册中心、配置中心、熔断器怎么配合?
- 分布式事务:seata 的 AT 模式 vs TCC 模式
P7 阶段:能演进、能权衡全局
理解架构的演进历史和取舍逻辑,能做全局技术规划。
核心要求:
- 从单体到微服务的演进路径是什么?
- 微服务解决了什么问题,又带来了什么问题?
- 什么是架构腐化?怎么预防?
核心能力矩阵
面试题分级
🔴 高频必考
微服务架构
- 为什么要微服务?微服务解决了什么问题?
- 服务拆分的原则是什么?
- 注册中心挂了怎么办?eureka 的自我保护机制是什么?
- 分布式 ID 怎么生成?雪花算法的时钟回拨问题
Spring Cloud 全家桶
- Nacos 和 Eureka 的区别是什么?
- Sentinel 和 Hystrix 的区别?
- Gateway 的工作原理?
分布式事务
- seata 的 AT 模式原理是什么?
- TCC 模式的空回滚和悬挂问题怎么解决?
- 本地消息表和可靠消息最终一致性的区别?
🟡 中频常考
消息队列
- Kafka 为什么这么快?零拷贝原理
- RabbitMQ 的消息可靠性怎么保证?
- 顺序消息怎么实现?
架构演进
- 从单体到微服务踩过哪些坑?
- 如何做服务治理?
- 配置中心怎么选型?
🟢 低频了解
- 六边形架构的端口和适配器
- 洋葱架构与 DDD 的关系
- 事件溯源模式
生产避坑
微服务过度拆分的坑
某公司一开始说"微服务好",拆了 200 个服务。后来发现:
- 每次发布要协调 20 个团队
- 服务间调用链路复杂,排查一个问题要翻 10 个日志
- 机器成本翻了三倍
教训:服务拆分不是越细越好,要考虑团队规模和组织结构。
过度抽象的坑
一个老系统里有个"通用订单服务",支持了 30 种订单类型,每种类型有不同的处理逻辑。这不是架构设计,这是技术债。
教训:抽象要克制,优先满足 80% 的场景,剩下的用扩展点处理。
忽略一致性的坑
很多团队用 MQ 做异步解耦,但消息丢了怎么办?消费重复了怎么办?没想清楚就上线,最后靠人工对账。
教训:异步不等于可靠,消息可靠性需要端到端保障。
工程选型
【架构权衡】 架构没有银弹。微服务解决了一些问题,但带来了运维复杂度。CQRS 听起来美好,但学习曲线陡峭。做架构决策时,永远要问自己:这个方案的代价是什么?我能承受吗?