spring cloud

44 阅读3分钟

架构

单体架构

deepseek_mermaid_20260412_9d8367.png

ALL IN ONE 单体架构意味着:
  • 单一部署单元:所有功能模块(商品、订单、用户、支付、物流等)都打包在一个Java项目里。
  • 共享环境:这些模块运行在同一个JVM进程、同一台服务器上,并通常连接同一个数据库。
优点
优点具体说明
开发简单单一项目,IDE管理方便,调试容易,无需考虑服务间调用。
测试容易只需启动一个应用即可进行端到端测试。
部署单一只需部署一个JAR/WAR包,运维成本低。
事务管理简单所有模块共享一个数据库,利用本地事务(@Transactional)即可保证ACID。
缺点
缺点具体表现
并发能力受限整个应用只能整体横向扩展(增加多个相同副本),无法针对高并发的商品模块单独扩容。
可靠性差一个模块(如支付)的内存泄漏或死锁,会导致整个应用崩溃。
维护成本递增代码量巨大(数百万行),不同模块代码耦合,修改一处可能影响全局,IDE编译变慢。
技术选型锁死所有模块共用技术栈(如Java版本、框架版本),无法为不同场景选择合适工具。
集群架构

deepseek_mermaid_20260412_034915.png 把同一个应用部署在多台服务器上,通过负载均衡将用户请求分发到不同的服务器

  • ✅ 集群架构解决了什么
单体架构的问题集群架构的解决方案
单点故障 → 应用崩溃则服务全挂一台服务器宕机,负载均衡将流量切到其他节点
无法应对高并发 → 单一JVM处理能力有限水平扩展:增加服务器节点即可提升吞吐量
数据库压力大 → 所有请求读写同一库读写分离:主库写、从库读,分摊压力

  • ❌ 集群架构仍存在的问题
问题说明
代码依然耦合所有模块(商品、订单、支付)仍在同一个项目里,修改一个模块需要重新部署整个集群
数据库仍是瓶颈虽然做了读写分离,但单张表数据量过大时,主库写入压力依然集中
session共享问题用户登录后请求落到不同服务器,需要引入Redis等中间件共享session
分布式事务涉及多个模块的写操作(如下单扣库存),单体本地事务不再适用,需要分布式事务方案
分布式微服务架构
分布式

我们按照业务拆分,每个模块又叫微服务,可以独立的开发,测试,部署,升级,扩展。
数据库同样可以根据业务拆分,每个数据库只存储一部分数据。

image.png

部署架构

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

image.png

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

微服务配置和注册中心 Nacos

juejin.cn/spost/76400…

远程调用 OpenFeign

juejin.cn/spost/76400…