一、架构本质区别
- 单体架构
所有业务代码写在同一个 SpringBoot 项目、一个 Jar 包:用户、商品、订单、支付、文件上传全部耦合在一起,共享一个数据库。
• 部署:只打一个 jar,启动一个进程
• 调用:模块之间本地方法调用,直接 new 对象 / 注入 Bean
• 数据库:单库多表,所有业务共用一套库
- 微服务架构
按业务领域拆分成多个独立 SpringBoot 子项目(用户服务、订单服务、商品服务、网关等),每个服务独立工程、独立数据库、独立部署。
• 部署:每个服务单独打包独立运行,可单独扩容
• 调用:跨服务通过 HTTP/Feign 远程调用,走网络
• 数据库:分库隔离,订单库、用户库、商品库互不干扰
二、工程代码结构差异(重点) 单体项目结构 单模块工程,内部分包分层:controller/service/mapper/entity/common全部代码在一个模块,公共工具、业务、配置都在当前项目内部。
优点:结构简单,上手快;缺点:代码臃肿,百万行后维护灾难。
微服务聚合工程结构(Maven 多模块)
-
父工程(mall-parent):统一版本管理,不写业务
-
公共模块 mall-common:全局工具、统一返回、异常、MP 配置,所有服务依赖
-
API 模块 mall-api:存放 Feign 远程调用接口、公共实体 DTO/VO,解决跨服务传参
-
网关服务 gateway:统一流量入口
-
多个独立业务微服务(user/order/product/pay)每个业务服务内部才是标准 SpringBoot 分层,互相隔离
三、优缺点总结
单体架构优点
-
开发简单,无复杂中间件
-
本地调用无网络损耗,性能好
-
部署简单,一个 jar 启动
-
排查问题简单,无分布式链路
-
入门学习成本低
单体架构缺点
-
代码耦合严重,后期维护成本爆炸
-
扩容浪费资源,只能整体扩容
-
发布风险高,小改动全量重启
-
数据库压力集中,多表竞争锁
-
大型团队协作冲突频繁
微服务架构优点
-
服务解耦,单一职责,易维护
-
故障隔离,单个服务宕机不影响整体
-
按需弹性扩容,节省服务器成本
-
独立迭代、单独发布,风险小
-
团队分模块并行开发,效率高
-
支持高并发、大数据量业务
微服务架构缺点
-
架构复杂,大量中间件学习成本高
-
存在分布式难题:分布式事务、分布式锁、接口幂等、超时重试
-
远程调用带来网络延迟,需要熔断限流保障稳定性
-
运维成本高:多服务、多数据库、多中间件部署维护
-
排查困难,需要链路追踪、分布式日志
-
开发工作量变大,需要封装公共模块、Feign 接口