第 1 课把驱动因素排好了序——现在用这份排序去"购物":每种架构风格都是一个预先打包好的权衡组合,选型就是拿排序去匹配货架。
分层、微服务、事件驱动……这些架构风格不是时髦程度的排行榜,而是前人验证过的权衡组合:每种风格在某几个质量属性上强、在另几个上弱,且强弱是结构性的,换语言换框架都改不了。所以选风格的唯一正当依据,就是你第 1 课产出的驱动属性排序。
正式挑风格前,先回答两个先决问题(Richards & Ford 称之为架构的顶层决策):
下表基于 Fundamentals of Software Architecture 各风格章节的星级评分整理(定性近似,完整星级表见文末资源):
| 风格 | 简单/成本 | 伸缩/弹性 | 容错 | 可演进 | 典型场景 |
|---|---|---|---|---|---|
| 分层单体 | ⬤⬤⬤(最优) | 低 | 低 | 低 | 小系统、原型、生命周期短 |
| 模块化单体 | ⬤⬤⬤ | 低-中 | 低 | 中-高 | 新系统默认起点;按领域分模块,留拆分余地 |
| 微内核 | ⬤⬤ | 低 | 低 | 高(插件维度) | 产品型软件:核心稳定 + 定制插件(IDE、规则引擎) |
| 服务化 (service-based) | ⬤⬤ | 中 | 高 | 中-高 | 要部分分布式收益又不想付全额微服务税;常保留共享库 |
| 事件驱动 | ⬤ | 高 | 高 | 中 | 高吞吐异步流、广播扇出、削峰;调试与追踪难 |
| 微服务 | ⬤(最贵) | 最高 | 高 | 最高 | 多团队并行、按域独立伸缩演进;强一致跨服务最难 |
注意每行的规律:伸缩/容错越强的风格,简单性/成本分越低——没有全五星的风格,这正是"权衡包"的含义。
沿用第 1 课的题目与你自己的驱动属性排序(一致性 > 可用性 > 伸缩/低延迟)。
你的任务(10 分钟):
先决问题:至少 2 个量子——"出价/裁定"与"围观推送"的伸缩模式和一致性要求完全不同(前者强一致、写密集;后者高扇出、可容忍毫秒级延迟)。数据不必全拆:竞价核心单库保强一致,推送侧只消费事件流。
一种合理方案:服务化(service-based)主体 + 事件驱动推送通道。
4 人团队?方案降级为:模块化单体(竞价+商品+账户为模块)+ 独立推送服务,共 2 个部署单元。驱动属性没变,但团队规模是约束,一票否决细粒度拆分——这就是约束与属性的区别。
你选了别的风格不代表错——检验标准只有一条:三句理由是否都能追溯到你的驱动属性排序,以及是否算过对应的代价。
主推资料源:Fundamentals of Software Architecture 第二部分——每种风格一章,附完整星级评分表;配套的风格星级速查表与驱动特性工作表(Developer to Architect,免费下载)值得打印贴墙。反方视角必读:Fowler 的 MonolithFirst 与 Microservice Premium,两篇都很短。
💬 对某个风格想深入、或想让我点评你的 Kata 选型——回到对话里直接提问。