Skip to content

在2000年代早期,Web应用开始兴起,大家做网站,需求都普遍很简单,把所有功能,比如用户管理、商品管理、订单管理等功能打包在一起是最直接、最快的方式

这就是我们最熟悉的单体架构Monolithic Architecture,单体架构,就是把一个应用所有的功能,都打包部署在一个包里,单体架构,是那个时代背景下最高效、最合理的选择!

它适合初创项目 (MVP): 快速验证商业模式,时间是第一位的。或者其他小项目, 那种业务逻辑简单,团队人数少(例如,企业内部OA系统、个人博客)。

单体架构优势

单体架构有以下这些优点:

  • 开发简单: 都在一个项目中,IDE 易于管理。
  • 测试简单: 启动整个应用,进行端到端测试。
  • 部署简单: 只有一个文件需要部署,比如.war.jar 文件
  • 无网络开销: 模块间调用是本地方法调用(Java 方法调用),性能高。
  • 事务管理和一致性实现简单(同一进程/数据库)

单体架构的缺点

然而,随着网站与应用,用户规模的增长和业务需求的复杂化,单体架构也存在一些挑战和限制。主要包括:

  • 维护复杂: 随着代码膨胀,代码耦合严重,难以维护。
  • 部署困难: 任何微小的修改(比如改个文案),都需要重新编译、测试和部署整个应用。
  • 技术栈单一: 无法为不同模块选择最合适的技术(例如,订单模块用 Java,报表模块用 Python)。
  • 扩展性差:当应用程序需要扩展时,必须同时扩展整个应用程序,而不仅仅是某个功能模块。

分层架构

比如经典的MVC三层架构,它最初是为 GUI 应用设计的分层模式,用于将界面显示与业务逻辑解耦

经典 MVC 是什么?

  1. Model(模型)
  • 表示应用的数据结构和业务状态(domain objects、entities、DTOs)。
  • 封装业务规则、验证(有时),以及与数据库的映射(或由 Repository/DAO 来负责)。
  • 不包含 UI 细节。
  1. View(视图)
  • 负责展示数据和接收用户输入(HTML、模板、原生 GUI 窗口、移动界面等)。
  • 不直接处理业务逻辑,只展示 Model 提供的数据并把用户动作传给 Controller。
  1. Controller(控制器)
  • 接收用户请求(路由到 Controller),调用 Model/Service 获取/修改数据,选择合适的 View 渲染响应。
  • 负责协调(orchestrate)— 把请求转为业务调用,并将结果传给视图层。

工程实践中三层架构

在工程实践中,会把 MVC 映射到 三层架构(Three-tier):表示层→ 业务层→ 数据访问层,常作为Java单体项目的组织方式

两者概念不同但可结合使用:

  1. Presentation Layer(表示层):处理 HTTP、UI、模板渲染 — 对应 MVC 的 View + Controller(在 Web 框架里二者会同时存在)。
  2. Business Layer(业务层 / Service):核心业务逻辑,事务边界,领域服务。
  3. Data Access Layer(数据访问层):与数据库/外部存储交互(ORM、Repository/DAO)。

MVC架构,强调依赖方向(高层依赖低层),利于分离关注点与测试。

它适合多数企业应用,优点是清晰边界。缺点是业务复杂时,层与层之间成为“传送带”,业务逻辑可能遍布多层。另外当Service类承担了过多本不属于它的职责时,service类容易膨胀

微服务架构(Microservices)

微服务架构将一个大型应用拆分成一组小型的、独立的服务。每个服务都围绕一个特定的业务能力构建,运行在自己的进程中,每个服务独立部署、独立存储(或独立数据库),通过轻量通信(HTTP/REST、gRPC、消息队列)协作

微服务优点

  • 独立部署与扩展:可以对每个服务进行独立的部署和扩展,可按需扩缩容,更加高效地利用资源。
  • 技术异构性:不同的服务可以使用不同的编程语言、框架和数据存储技术。
  • 故障隔离:一个服务的故障不会直接影响到其他服务,提高了整个系统的弹性和容错能力。
  • 团队自治:不同团队独立开发、技术栈自由

缺点

  • 分布式系统的复杂性:服务间的通信、数据一致性、服务发现、配置管理等都带来了新的复杂性。
  • 运维成本:需要管理和监控大量的服务实例,对自动化运维(DevOps)提出了更高的要求。
  • 分布式事务:跨多个服务的事务处理变得非常复杂。
  • 测试复杂性:端到端的测试需要协调多个服务的部署和运行。

2014~2019年,随着云原生、容器化、敏捷团队实践兴起,Netflix、Amazon、阿里 等公司推动该模式成为主流实践之一,特别适合大型公司,超大型项目。

多模块单体结构

为什么会有“回归单体/模块化单体”的潮流?

随着微服务大热,国内外各种大大小小公司去实践微服务,但随着时间的推移,发现以下问题:

🔒

解锁完整内容与源码

当前内容为付费资源,请扫描下方二维码获取。 (支持 微信 / 淘宝 扫码)

Payment QR Code

作者:小牛呼噜噜

本文到这里就结束啦,感谢阅读,关注同名公众号:小牛呼噜噜,防失联+获取更多技术干货