四大软件架构通常指单体架构、分布式架构、微服务架构以及 Serverless 架构。领略技术之美在于理解每种架构背后的设计哲学与权衡,而非盲目追求新技术。探索未来之路需要结合业务场景,从单体起步,随业务增长演进至分布式或微服务,最终利用 Serverless 实现极致弹性。关键在于保持架构的灵活性与可维护性,避免过度设计,同时关注数据一致性与系统可靠性,通过持续集成与重构化解技术债务,让技术真正服务于业务价值。
四大软件架构:掌握单体、分布式、微服务、Serverless 的精髓
单体架构 单体架构比较初级,典型的三级架构,前端 (Web/手机端)+ 中间业务逻辑层 + 数据库层。这是一种典型的 Java Spring mvc 或者 Python Drango 框架的应用。其架构图如下所示:单体架构的应用比较容易部署、测试,在项目的初期,单体应用可以很好地运行。然而,随着需求的不断增加,越来越多的人加入开发团队,代码库也在飞速地膨胀。慢慢地,单体应用变得越来越臃肿,可维护性、灵活性逐渐降低,维护成本越来越高。下面是单体架构应用的一些缺点:复杂性高:以一个百万行级别的单体应用为例,整个项目包含的模块非常多、模块的边界模糊、依赖关系不清晰、代码质量参差不齐、混乱地堆砌在一起。可想而知整个项目非常复杂。每次修改代码都心惊胆战,甚至添加一个简单的功能,或者修改一个 Bug 都会带来隐含的缺陷。技术债务:随着时间推移、需求变更和人员更迭,会逐渐形成应用程序的技术债务,并且越积 越多。“不坏不修”, 这在软件开发中非常常见,在单体应用中这种思想更甚。已使用的系统设计或代码难以被修改,因为应用程序中的其他模块可能会以意料之外的方式使用它。部署频率低:随着代码的增多,构建和部署的时间也会增加。而在单体应用中,每次功能的变更或缺陷的修复都会导致需要重新部署整个应用。全量部署的方式耗时长、影响范围大、风险高,这使得单体应用项目上线部署的频率较低。而部署频率低又导致两次发布之间会有大量的功能变更和缺陷修复,出错率比较高。可靠性差:某个应用 Bug,例如死循环、内存溢出等,可能会导致整个应用的崩溃。扩展能力受限:单体应用只能作为一个整体进行扩展,无法根据业务模块的需要进行伸缩。例如,应用中有的模块是计算密集型的,它需要强劲的 CPU;有的模块则是 IO 密集型的,需要更大的内存。由于这些模块部署在一起,不得不在硬件的选择上做出妥协。阻碍技术创新:单体应用往往使用统一的技术平台或方案解决所有的问题,团队中的每个成员 都必须使用相同的开发语言和框架,要想引入新框架或新技术平台会非常困难。分布式架构 中级架构,分布式应用,中间层分布式 + 数据库分布式,是单体架构的并发扩展,将一个大的系统划分为多个业务模块,业务模块分别部署在不同的服务器上,各个业务模块之间通过接口进行数据交互。(该信息的时间戳是 2024 年 1 月 16 日)
四种软件架构:单体架构、分布式架构、微服务架构、Serverless 架构
一、单体架构 单体架构比较初级,典型的三级架构,前端 (Web/手机端)+ 中间业务逻辑层 + 数据库层。这是一种典型的 Java Spring mvc 或者 Python Django 框架的应用。其架构图如下所示:单体架构的应用比较容易部署、测试,在项目的初期,单体应用可以很好地运行。然而,随着需求的不断增加,越来越多的人加入开发团队,代码库也在飞速地膨胀。慢慢地,单体应用变得越来越臃肿,可维护性、灵活性逐渐降低,维护成本越来越高。下面是单体架构应用的一些缺点:复杂性高:以一个百万行级别的单体应用为例,整个项目包含的模块非常多、模块的边界模糊、依赖关系不清晰、代码质量参差不齐、混乱地堆砌在一起。可想而知整个项目非常复杂。每次修改代码都心惊胆战,甚至添加一个简单的功能,或者修改一个 Bug 都会带来隐含的缺陷。技术债务:随着时间推移、需求变更和人员更迭,会逐渐形成应用程序的技术债务,并且越积 越多。“不坏不修”, 这在软件开发中非常常见,在单体应用中这种思想更甚。已使用的系统设计或代码难以被修改,因为应用程序中的其他模块可能会以意料之外的方式使用它。部署频率低:随着代码的增多,构建和部署的时间也会增加。而在单体应用中,每次功能的变更或缺陷的修复都会导致需要重新部署整个应用。全量部署的方式耗时长、影响范围大、风险高,这使得单体应用项目上线部署的频率较低。而部署频率低又导致两次发布之间会有大量的功能变更和缺陷修复,出错率比较高。可靠性差:某个应用 Bug,例如死循环、内存溢出等,可能会导致整个应用的崩溃。扩展能力受限:单体应用只能作为一个整体进行扩展,无法根据业务模块的需要进行伸缩。例如,应用中有的模块是计算密集型的,它需要强劲的 CPU; 有的模块则是 IO 密集型的,需要更大的内存。由于这些模块部署在一起,不得不在硬件的选择上做出妥协。阻碍技术创新:单体应用往往使用统一的技术平台或方案解决所有的问题,团队中的每个成员 都必须使用相同的开发语言和框架,要想引入新框架或新技术平台会非常困难。二、分布式应用 中级架构,分布式应用,中间层分布式 + 数据库分布式,是单体架构的并发扩展,将一个大的系统划分为多个业务模块,业务模块分别部署在不同的服务器上,各个业务模块之间通过接口进行数据交互。数据库也大量采用分布式数据库,如 redis、ES、solor 等。(2024 年 3 月 28 日)
深度解析:四大软件架构模式与选型指南
第一章:分层架构 1.1 定义 分层架构 (LayeredArchitecture) 是将软件按照职责切分成若干层次,每一层都为上层提供服务,并调用下层的接口。最经典的莫过于三层架构:表现层、业务逻辑层、数据访问层。有时候会演变成四层:增加一个领域层 (Domain Layer) 或服务接口层。1.2 核心组成 表现层:用户界面 (Web/App/API 网关),负责展示数据和接收输入。业务层:核心业务逻辑、事务控制、权限校验。持久层:与数据库交互,CRUD 操作。数据库层:存储数据 (非代码层,但属于基础设施)。1.3 优点 简单直观:开发人员上手快,分工明确。前端写界面,后端写逻辑,DBA 管数据库。职责单一:每一层只关注自己的事情。易维护:只要接口不变,某一层的改动不会影响其他层。1.4 缺点 伸缩性差:只能垂直伸缩 (提升单机性能),很难水平伸缩。部署耦合:通常打包成一个 WAR 或 EXE,哪怕只改一行代码,也要重启整个应用。概念坍塌:随着业务复杂,容易出现“大泥球”,业务逻辑被写在 SQL 里,或者逻辑互相渗透。1.5 适用场景 初创公司的 MVP(最小可行产品)。内部管理系统 (如 ERP、CRM 的低并发版本)。简单的电商网站。第二章:事件驱动架构 2.1 定义 事件驱动架构 (Event-Driven Architecture,EDA) 是一种基于事件的产生、检测、消费和响应的架构模式。系统组件之间没有直接的调用关系,而是通过事件来进行通信。2.2 核心组件 事件生产者:产生事件 (如“用户下单”)。事件通道/消息队列:传输事件的管道 (如 Kafka, RabbitMQ)。事件消费者:监听事件并做出反应 (如“发送邮件”、“扣减库存”)。2.3 两种主要拓扑 中介拓扑:通过一个中央的事件中介 (如消息队列) 来协调多个事件处理器。适用于复杂的业务流程编排。代理拓扑:没有中央协调器,事件处理器通过轻量级的消息代理 (如 Kafka Topic) 直接链接,形成事件流。适用于高吞吐量的简单处理。2.4 优点 高并发、高吞吐:异步处理,削峰填谷,系统不易被瞬间流量冲垮。解耦极致:生产者和消费者完全不知道对方存在,只关心事件格式。扩展性强:可以随时增加消费者来处理更多的业务 (如增加一个审计日志消费者)。2.5 缺点 事务一致性难:分布式环境下,传统的 ACID 事务几乎不可能,需要采用最终一致性 (BASE 理论) 和补偿机制 (Saga 模式)。(资料日期为 2026 年 2 月 21 日)
FAQ
四大软件架构具体指哪四种?
通常指单体架构、分布式架构、微服务架构和 Serverless 架构,也有分类包含分层架构与事件驱动架构。
单体架构的主要缺点是什么?
复杂性高、技术债务多、部署频率低、可靠性差、扩展能力受限且阻碍技术创新。
如何选择合适的软件架构?
应结合业务场景,从单体起步,随业务增长演进,关注数据一致性与系统可靠性,避免过度设计。