
在2000年代早期,Web应用开始兴起,大家做网站,需求都普遍很简单,把所有功能,比如用户管理、商品管理、订单管理等功能打包在一起是最直接、最快的方式
这就是我们最熟悉的单体架构Monolithic Architecture,单体架构,就是把一个应用所有的功能,都打包部署在一个包里,单体架构,是那个时代背景下最高效、最合理的选择!
它适合初创项目 (MVP): 快速验证商业模式,时间是第一位的。或者其他小项目, 那种业务逻辑简单,团队人数少(例如,企业内部OA系统、个人博客)。
单体架构优势
单体架构有以下这些优点:
- 开发简单: 都在一个项目中,IDE 易于管理。
- 测试简单: 启动整个应用,进行端到端测试。
- 部署简单: 只有一个文件需要部署,比如
.war或.jar文件 - 无网络开销: 模块间调用是本地方法调用(Java 方法调用),性能高。
- 事务管理和一致性实现简单(同一进程/数据库)
单体架构的缺点
然而,随着网站与应用,用户规模的增长和业务需求的复杂化,单体架构也存在一些挑战和限制。主要包括:
- 维护复杂: 随着代码膨胀,代码耦合严重,难以维护。
- 部署困难: 任何微小的修改(比如改个文案),都需要重新编译、测试和部署整个应用。
- 技术栈单一: 无法为不同模块选择最合适的技术(例如,订单模块用 Java,报表模块用 Python)。
- 扩展性差:当应用程序需要扩展时,必须同时扩展整个应用程序,而不仅仅是某个功能模块。
分层架构
比如经典的MVC三层架构,它最初是为 GUI 应用设计的分层模式,用于将界面显示与业务逻辑解耦
经典 MVC 是什么?
- Model(模型)
- 表示应用的数据结构和业务状态(domain objects、entities、DTOs)。
- 封装业务规则、验证(有时),以及与数据库的映射(或由 Repository/DAO 来负责)。
- 不包含 UI 细节。
- View(视图)
- 负责展示数据和接收用户输入(HTML、模板、原生 GUI 窗口、移动界面等)。
- 不直接处理业务逻辑,只展示 Model 提供的数据并把用户动作传给 Controller。
- Controller(控制器)
- 接收用户请求(路由到 Controller),调用 Model/Service 获取/修改数据,选择合适的 View 渲染响应。
- 负责协调(orchestrate)— 把请求转为业务调用,并将结果传给视图层。
工程实践中三层架构
在工程实践中,会把 MVC 映射到 三层架构(Three-tier):表示层→ 业务层→ 数据访问层,常作为Java单体项目的组织方式
两者概念不同但可结合使用:
- Presentation Layer(表示层):处理 HTTP、UI、模板渲染 — 对应 MVC 的 View + Controller(在 Web 框架里二者会同时存在)。
- Business Layer(业务层 / Service):核心业务逻辑,事务边界,领域服务。
- Data Access Layer(数据访问层):与数据库/外部存储交互(ORM、Repository/DAO)。
MVC架构,强调依赖方向(高层依赖低层),利于分离关注点与测试。
它适合多数企业应用,优点是清晰边界。缺点是业务复杂时,层与层之间成为“传送带”,业务逻辑可能遍布多层。另外当Service类承担了过多本不属于它的职责时,service类容易膨胀
微服务架构(Microservices)
微服务架构将一个大型应用拆分成一组小型的、独立的服务。每个服务都围绕一个特定的业务能力构建,运行在自己的进程中,每个服务独立部署、独立存储(或独立数据库),通过轻量通信(HTTP/REST、gRPC、消息队列)协作
微服务优点:
- 独立部署与扩展:可以对每个服务进行独立的部署和扩展,可按需扩缩容,更加高效地利用资源。
- 技术异构性:不同的服务可以使用不同的编程语言、框架和数据存储技术。
- 故障隔离:一个服务的故障不会直接影响到其他服务,提高了整个系统的弹性和容错能力。
- 团队自治:不同团队独立开发、技术栈自由
缺点:
- 分布式系统的复杂性:服务间的通信、数据一致性、服务发现、配置管理等都带来了新的复杂性。
- 运维成本:需要管理和监控大量的服务实例,对自动化运维(DevOps)提出了更高的要求。
- 分布式事务:跨多个服务的事务处理变得非常复杂。
- 测试复杂性:端到端的测试需要协调多个服务的部署和运行。
2014~2019年,随着云原生、容器化、敏捷团队实践兴起,Netflix、Amazon、阿里 等公司推动该模式成为主流实践之一,特别适合大型公司,超大型项目。
多模块单体结构
为什么会有“回归单体/模块化单体”的潮流?
随着微服务大热,国内外各种大大小小公司去实践微服务,但随着时间的推移,发现以下问题:
解锁完整内容与源码
当前内容为付费资源,请扫描下方二维码获取。 (支持 微信 / 淘宝 扫码)

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