架构模式

目录概述

架构模式不是画图画出来的,是踩坑踩出来的。

很多人能画出漂亮的架构图,但被面试官一问"你们这个架构的缺点是什么?什么场景下不适用?",就答不上来。

这一模块带你从真实的系统演进出发,理解每种架构模式的适用条件核心优势已知局限,让你在面试和工作中都能做出更理性的架构决策。

内容范围

架构风格典型代表适用场景面试频率
分层架构MVC、三层架构传统 Web 应用🔴
面向服务架构SO架构企业级应用集成🟡
微服务架构Spring Cloud、Dubbo互联网高并发系统🔴
事件驱动架构Kafka、MQ异步解耦、数据流转🔴
六边形架构端口与适配器业务逻辑与框架解耦🟡
洋葱架构领域驱动设计复杂业务域🟢

学习路径指引

P5 阶段:能描述、能画架构图

理解常见架构风格的基本结构和核心组件。

核心要求

  • MVC 三层:Model、View、Controller 各自负责什么?
  • Spring MVC 的请求处理流程是什么?
  • 什么是贫血模型?什么是充血模型?

P6 阶段:能设计、能做技术选型

能根据业务场景选择合适的架构风格。

核心要求

  • 什么时候该拆分微服务?拆多细?
  • 服务治理:注册中心、配置中心、熔断器怎么配合?
  • 分布式事务:seata 的 AT 模式 vs TCC 模式

P7 阶段:能演进、能权衡全局

理解架构的演进历史和取舍逻辑,能做全局技术规划。

核心要求

  • 从单体到微服务的演进路径是什么?
  • 微服务解决了什么问题,又带来了什么问题?
  • 什么是架构腐化?怎么预防?

核心能力矩阵

能力项P5P6P7
画出系统架构图
解释各层职责
做单一架构风格的技术选型-
设计服务拆分边界-
评估架构的优缺点-
制定架构演进计划--

面试题分级

🔴 高频必考

微服务架构

  • 为什么要微服务?微服务解决了什么问题?
  • 服务拆分的原则是什么?
  • 注册中心挂了怎么办?eureka 的自我保护机制是什么?
  • 分布式 ID 怎么生成?雪花算法的时钟回拨问题

Spring Cloud 全家桶

  • Nacos 和 Eureka 的区别是什么?
  • Sentinel 和 Hystrix 的区别?
  • Gateway 的工作原理?

分布式事务

  • seata 的 AT 模式原理是什么?
  • TCC 模式的空回滚和悬挂问题怎么解决?
  • 本地消息表和可靠消息最终一致性的区别?

🟡 中频常考

消息队列

  • Kafka 为什么这么快?零拷贝原理
  • RabbitMQ 的消息可靠性怎么保证?
  • 顺序消息怎么实现?

架构演进

  • 从单体到微服务踩过哪些坑?
  • 如何做服务治理?
  • 配置中心怎么选型?

🟢 低频了解

  • 六边形架构的端口和适配器
  • 洋葱架构与 DDD 的关系
  • 事件溯源模式

生产避坑

微服务过度拆分的坑

某公司一开始说"微服务好",拆了 200 个服务。后来发现:

  • 每次发布要协调 20 个团队
  • 服务间调用链路复杂,排查一个问题要翻 10 个日志
  • 机器成本翻了三倍

教训:服务拆分不是越细越好,要考虑团队规模和组织结构。

过度抽象的坑

一个老系统里有个"通用订单服务",支持了 30 种订单类型,每种类型有不同的处理逻辑。这不是架构设计,这是技术债。

教训:抽象要克制,优先满足 80% 的场景,剩下的用扩展点处理。

忽略一致性的坑

很多团队用 MQ 做异步解耦,但消息丢了怎么办?消费重复了怎么办?没想清楚就上线,最后靠人工对账。

教训:异步不等于可靠,消息可靠性需要端到端保障。

工程选型

场景推荐方案取舍考量
小团队快速起步单体 + 模块化未来拆分成本
高并发+大团队微服务服务治理复杂度
多团队并行开发前后端分离 + BFF接口协调成本
强一致性业务TCC 或本地消息表开发成本
最终一致性业务MQ 异步运维成本

【架构权衡】 架构没有银弹。微服务解决了一些问题,但带来了运维复杂度。CQRS 听起来美好,但学习曲线陡峭。做架构决策时,永远要问自己:这个方案的代价是什么?我能承受吗?