1. 认识微服务
学习 Spring Cloud 前,先理清这条技术链:
单体架构 → 分布式 → 微服务
就像搭积木,从一块实心木块到分拆重组,每一步都是为了解决更高阶的问题。
1.2. 单体架构
场景还原:
许多同学刚学后端时,会把前端代码(HTML/CSS/JS)直接塞进 Spring Boot 项目的 resources/static
目录。一旦修改前端样式,就得重新打包整个项目,连带着后端代码一起发布。这种「前后端代码同吃同住」的模式,就是典型的单体架构。
特点与痛点:
- 代码臃肿:前后端、业务模块全挤在一个工程里,像一团纠缠的毛线。
- 牵一发动全身:改个按钮颜色?抱歉,得重启整个服务。
- 技术栈锁死:想给前端换 Vue3?得先拆了这栋“老房子”。
1.2 前后端分离架构
为了让网站更美观,你学了 Vue,把前端代码独立出来:
- Vue 项目通过
npm run build
生成静态文件,丢给 Nginx 托管。 - 后端 Spring Boot 专注提供 API,Nginx 反向代理将前端请求转发到后端。
- 前后端通过 API 通信,代码、部署完全独立。
此时架构特点:
- 解耦:前端改版无需惊动后端,后端升级不影响页面展示。
- 技术自由:前端用 React,后端换 Go?随意搭配!
- 独立迭代:双线开发,效率翻倍。
1.3 分布式
阶段一:集群
问题: 用户量暴增,单台服务器撑不住了。
解法: 用 Nginx 搭个负载均衡,背后挂两台服务器,像双胞胎一样干完全相同的活。
- 优点:请求“雨露均沾”,性能翻倍,一台挂了另一台顶上。
- 本质:集群是“人海战术”,靠数量堆出高可用。
阶段二:分布式
新痛点: 订单模块改个逻辑,用户模块也得跟着重新发布?
解法: 让服务器分头行动:
- 服务器 A 专管用户服务,服务器 B 专注订单处理。
- 模块间通过 API 或消息队列协作,独立部署、互不影响。
分布式核心思想:
- 拆分:按业务能力切分系统(如用户、订单、支付)。
- 协作:像奥运会接力赛,各模块传递“业务接力棒”。
集群+分布式统称为分布式。
1.4 微服务
类比: 走进一家高端餐厅:
- 迎宾只负责微笑问候,领位带你入座,侍酒师专注倒水,厨师只管炒菜。
- 每个人技能专精,共同完成一餐体验。
技术定义:
- 微服务 = 分布式架构 + 能力原子化
- 每个服务足够微小(单一职责),独立自治(自有数据库、技术栈),轻量通信(HTTP/RPC)。
与分布式的区别:
维度 | 分布式 | 微服务 |
---|---|---|
目标 | 分散压力,提升性能 | 分散能力,提升系统灵活性 |
拆分粒度 | 按机器或模块切分 | 按业务能力原子化拆分 |
技术约束 | 允许模块间强耦合 | 强调彻底解耦和独立演进 |
- 微服务一定是分布式架构,但分布式未必是微服务(可能只是模块分散)。
- 微服务是分布式的“高阶形态”,像乐高积木——每个零件微小、标准、可自由拼装。
1.4 总的来说
单体架构 → 前后端分离 → 集群 → 分布式 → 微服务
每一步都在解决上一步的痛点:
- 单体架构:简单粗暴,适合试水。
- 前后端分离:解放生产力,技术栈自由。
- 集群:用“人海战术”扛压力。
- 分布式:拆解复杂度,分工协作。
- 微服务:精细化分工,系统像细胞一样可自愈、可进化。