架构
单体架构

ALL IN ONE 单体架构意味着:
- 单一部署单元:所有功能模块(商品、订单、用户、支付、物流等)都打包在一个Java项目里。
- 共享环境:这些模块运行在同一个JVM进程、同一台服务器上,并通常连接同一个数据库。
优点
| 优点 | 具体说明 |
|---|
| 开发简单 | 单一项目,IDE管理方便,调试容易,无需考虑服务间调用。 |
| 测试容易 | 只需启动一个应用即可进行端到端测试。 |
| 部署单一 | 只需部署一个JAR/WAR包,运维成本低。 |
| 事务管理简单 | 所有模块共享一个数据库,利用本地事务(@Transactional)即可保证ACID。 |
缺点
| 缺点 | 具体表现 |
|---|
| 并发能力受限 | 整个应用只能整体横向扩展(增加多个相同副本),无法针对高并发的商品模块单独扩容。 |
| 可靠性差 | 一个模块(如支付)的内存泄漏或死锁,会导致整个应用崩溃。 |
| 维护成本递增 | 代码量巨大(数百万行),不同模块代码耦合,修改一处可能影响全局,IDE编译变慢。 |
| 技术选型锁死 | 所有模块共用技术栈(如Java版本、框架版本),无法为不同场景选择合适工具。 |
集群架构
把同一个应用部署在多台服务器上,通过负载均衡将用户请求分发到不同的服务器。
| 单体架构的问题 | 集群架构的解决方案 |
|---|
| 单点故障 → 应用崩溃则服务全挂 | 一台服务器宕机,负载均衡将流量切到其他节点 |
| 无法应对高并发 → 单一JVM处理能力有限 | 水平扩展:增加服务器节点即可提升吞吐量 |
| 数据库压力大 → 所有请求读写同一库 | 读写分离:主库写、从库读,分摊压力 |
| 问题 | 说明 |
|---|
| 代码依然耦合 | 所有模块(商品、订单、支付)仍在同一个项目里,修改一个模块需要重新部署整个集群 |
| 数据库仍是瓶颈 | 虽然做了读写分离,但单张表数据量过大时,主库写入压力依然集中 |
| session共享问题 | 用户登录后请求落到不同服务器,需要引入Redis等中间件共享session |
| 分布式事务 | 涉及多个模块的写操作(如下单扣库存),单体本地事务不再适用,需要分布式事务方案 |
分布式微服务架构
分布式
我们按照业务拆分,每个模块又叫微服务,可以独立的开发,测试,部署,升级,扩展。
数据库同样可以根据业务拆分,每个数据库只存储一部分数据。

部署架构
每一个服务器不在部署一个应用,而是部署多个微服务模块。对于访问量大的模块,可以部署多个实例。

核心组件说明
| 组件 | 作用 | 你的笔记对应 |
|---|
| Nacos | 服务注册发现 + 配置中心 | ✅ 注册配置中心 |
| Spring Cloud Gateway | 统一入口、路由、认证、限流 | ✅ 网关 |
| OpenFeign | 服务间声明式HTTP调用 | ✅ 远程调用 |
| Sentinel | 服务熔断、降级、限流 | ✅ 服务熔断 |
| Seata | 分布式事务(AT/TCC/SAGA模式) | ✅ 分布式事务 |
微服务配置和注册中心 Nacos
juejin.cn/spost/76400…
远程调用 OpenFeign
juejin.cn/spost/76400…