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