Spring Cloud Alibaba 学习 —— 简单了解常用技术栈
Spring Cloud Alibaba
官网:https://sca.aliyun.com/
什么是 Spring Cloud Alibaba
Spring Cloud Alibaba 是 Spring Cloud 规范在阿里生态的扩展实现,结合了阿里自研组件与开源生态,提供面向云原生场景的微服务解决方案。其核心功能可概括为:
服务治理 + 流量管控 + 分布式能力增强
主要解决微服务架构中的服务发现、配置管理、限流降级等核心问题。
核心组件与组成
组件名称 | 功能描述 | 技术特点 |
---|---|---|
Nacos | 服务注册与配置中心 | 支持动态配置推送、AP/CP 模式切换1 |
Sentinel | 流量控制与熔断降级 | 基于 QPS/线程数的实时监控与规则动态生效4 |
RocketMQ | 分布式消息队列 | 高吞吐量、顺序消息、事务消息支持 |
Seata | 分布式事务解决方案 | AT/TCC/SAGA 多种模式可选 |
Dubbo | RPC 通信框架(可选) | 高性能二进制协议、服务网格集成 |
Nacos 服务注册于发现
官网:https://nacos.io/
github:https://github.com/alibaba/nacos
什么是 Nacos
Nacos是阿里巴巴开源的动态命名与配置服务,专为云原生微服务架构设计,提供服务发现、配置管理、服务元数据管理等核心功能。其核心目标是通过动态化能力简化微服务架构中的服务治理与配置管理,支持企业快速构建弹性高可用的分布式系统。
核心功能详解
- 服务注册与发现
- 服务注册:微服务启动时向 Nacos 注册自身信息(IP、端口、健康状态等)。
- 服务发现:消费者通过 Nacos 查询依赖服务的实时地址列表,实现流量路由。
- 健康检查:基于心跳机制自动剔除异常节点,保障服务可用性。
- 动态配置管理
- 配置统一存储:支持 YAML、JSON 等格式的配置集中管理。
- 动态推送:配置变更时实时通知所有相关服务,无需重启。
- 多环境隔离:通过命名空间(Namespace)实现开发、测试、生产环境的配置隔离。
- 服务元数据管理
- 支持为服务添加自定义标签(如版本、区域),用于实现灰度发布、流量染色等高级场景。
- 流量管理
- 与 Sentinel 集成实现服务路由权重调整,支持金丝雀发布。
技术架构与实现原理
Nacos 的服务领域模型分为三层:
- 命名空间(Namespace):用于隔离不同租户或环境的配置与服务。
- 集群(Cluster):物理隔离的部署单元,如不同机房。
- 服务(Service):微服务的逻辑分组,如订单服务、支付服务。
其核心架构采用 AP(高可用)与 CP(强一致性)模式可切换 的设计:
- AP 模式:优先保证服务可用性,适用于注册中心场景。
- CP 模式:优先保证数据一致性,适用于配置中心场景。
在微服务中的具体应用
-
服务注册发现流程
-
动态配置示例
# Nacos 配置中心存储的配置 database:url: jdbc:mysql://${DB_HOST:localhost}:3306/appusername: ${DB_USER:root}
服务通过注解
@RefreshScope
实现配置热更新:@RefreshScope @RestController public class ConfigController {@Value("${database.url}")private String dbUrl; }
-
典型场景
- 电商系统:通过动态配置调整商品库存阈值。
- 金融系统:利用命名空间隔离不同区域的交易服务配置。
- 物联网平台:管理百万级设备连接的元数据。
优势对比
对比项 | Nacos | Eureka | Consul |
---|---|---|---|
配置管理 | ✔️ 原生支持 | ❌ 需额外组件 | ✔️ 支持 |
一致性协议 | AP/CP 可切换 | AP | CP |
性能 | 单机支持 104 节点注册 | 单机约 5 ×103 节点 | 约 3×103 节点 |
Sentinel 服务熔断与限流
github:https://github.com/alibaba/Sentinel
官网:https://sentinelguard.io/zh-cn/
什么是 Sentinel
Sentinel 是一款面向分布式系统的流量控制、熔断降级与系统保护组件,专注于保障微服务架构的稳定性。其核心价值在于通过多维度的流量治理手段,防止服务因突发流量、依赖故障或系统过载而崩溃,提升分布式系统的容错能力和弹性。
核心功能
- 流量控制
- QPS/并发数控制:限制单位时间内的请求量或并发线程数,防止突发流量击穿系统。
- 流量整形:支持匀速排队模式,将突发流量转换为平滑请求,避免系统负载剧烈波动。
- 集群流控:通过 Token Server 实现跨节点的全局流量控制,适用于大规模分布式场景。
- 熔断降级
- 熔断策略:基于慢调用比例、异常比例或异常数自动熔断不稳定服务,避免级联故障。
- 降级规则:可配置降级后的默认响应(如返回兜底数据),保障核心业务链路的可用性。
- 系统自适应保护
- Load 保护:根据系统 CPU 使用率、平均 RT 等指标动态调整流量入口阈值。
- 并发线程数控制:防止线程池耗尽导致服务雪崩。
- 实时监控与告警
- 秒级监控:展示接口级别的 QPS、RT、异常比例等关键指标。
- 动态规则推送:支持通过 Nacos、ZooKeeper 等配置中心实时更新规则。
技术架构与实现原理
-
核心模块
- Slot 链机制:通过责任链模式依次执行统计、熔断检查、流控等逻辑。
- 滑动窗口算法:实现高精度 QPS 统计,支持毫秒级流量控制。
-
扩展能力
- 动态数据源:支持与 Nacos、Apollo 等配置中心集成,实现规则持久化。
- 自定义 Slot:开发者可扩展自定义流量控制策略。
典型应用场景
-
电商秒杀场景
// 定义资源并设置流控规则 @SentinelResource(value = "seckill", blockHandler = "handleBlock") public String seckill(String itemId) {// 业务逻辑 }
- 通过集群流控限制每秒订单创建量,防止库存超卖。
-
微服务熔断
# Spring Cloud Alibaba 配置示例 spring:cloud:sentinel:datasource:ds1:nacos:server-addr: localhost:8848dataId: sentinel-rules
- 当支付服务异常比例超过 50% 时自动熔断,降级返回“支付通道维护中”提示。
-
系统过载保护
- 当系统 CPU 使用率超过 80% 时,自动拒绝低优先级请求,保障核心交易链路。
优势对比
对比项 | Sentinel | Hystrix | Resilience4j |
---|---|---|---|
流量控制 | ✔️ 支持 QPS、并发数、集群流控 | ❌ 仅线程隔离 | ✔️ 有限流控 |
熔断策略 | ✔️ 慢调用+异常多维判断 | ✔️ 仅异常比例 | ✔️ 类似 Hystrix |
监控能力 | ✔️ 实时接口级监控 | ❌ 需集成 Turbine | ❌ 需额外配置 |
扩展性 | ✔️ 动态数据源+Slot 扩展 | ❌ 有限 | ✔️ 模块化设计 |
Seata 分布式事务
github:https://github.com/apache/incubator-seata
官网:https://seata.apache.org/zh-cn/docs/overview/what-is-seata
什么是 Seata
Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
核心功能与模式
-
事务模式
-
AT 模式(Auto Transaction)
-
自动补偿机制:通过解析 SQL 生成反向回滚日志(undo_log),实现事务的自动提交与回滚。
-
两阶段提交:
适用于大多数基于关系型数据库的场景,对业务代码侵入性低。
-
-
TCC 模式(Try-Confirm-Cancel)
- 三阶段控制:通过 Try 阶段预留资源,Confirm/Cancel 阶段确认或释放资源,适用于高并发、需自定义补偿逻辑的场景(如积分兑换)。
-
Saga 模式
- 长事务管理:通过状态机编排服务调用,支持异步事务和自定义补偿策略,适用于跨系统、执行时间较长的业务流程(如电商订单履约)。
-
-
核心组件
组件 角色说明 功能示例 TC 事务协调器(Transaction Coordinator) 全局事务的发起、提交与回滚 TM 事务管理器(Transaction Manager) 定义全局事务边界(@GlobalTransactional) RM 资源管理器(Resource Manager) 分支事务注册、状态报告与锁管理
技术原理剖析
-
全局事务生命周期
// TM 开启全局事务 @GlobalTransactional public void purchase() {// 调用服务A(RM1)reduceStock();// 调用服务B(RM2)deductBalance(); }
- 事务启动:TM 向 TC 注册全局事务,生成唯一 XID2。
- 分支注册:RM 执行本地事务前向 TC 注册分支,并记录 undo_log。
- 提交/回滚:TC 根据整体状态触发 Phase2 操作,RM 根据指令提交或回滚。
-
AT 模式实现细节
- SQL 解析:通过 JDBC 代理拦截 SQL,解析表结构、操作类型(INSERT/UPDATE/DELETE)。
- 数据快照:
- 前置镜像:用于回滚时恢复原始数据。
- 后置镜像:用于提交时验证数据一致性(防脏写)。
- 锁机制:通过全局锁(global_lock)避免多个事务同时修改同一行数据。
典型应用场景
-
电商订单支付
-- 订单服务(RM1) UPDATE order SET status = 'paid' WHERE id = 1001; -- 库存服务(RM2) UPDATE stock SET count = count - 1 WHERE item_id = 'SKU123';
- 通过 AT 模式保证订单状态与库存扣减的原子性3。
-
金融账户转账
- 使用 TCC 模式实现跨行转账:
- Try:冻结转出账户资金,记录操作日志。
- Confirm:实际扣减转出金额,增加转入金额。
- Cancel:解冻资金,删除日志。
- 使用 TCC 模式实现跨行转账:
-
物流状态更新
- Saga 模式协调订单系统、仓储系统和物流系统,通过状态机定义补偿逻辑(如超时自动触发退货流程)。
优势对比
对比项 | Seata AT | XA 协议 | 基于消息队列 |
---|---|---|---|
侵入性 | 低(无代码改造) | 高(依赖数据库驱动) | 中(需消息监听) |
性能 | 高(本地事务优先提交) | 低(两阶段锁阻塞) | 中(异步最终一致性) |
一致性 | 强一致 | 强一致 | 最终一致 |
适用场景 | 高并发 OLTP | 传统银行系统 | 异步处理场景 |
扩展与优化
- 高可用部署
- TC 集群化:通过注册中心(如 Nacos)实现 TC 节点发现与负载均衡。
- 数据持久化:支持将事务日志存储至 MySQL、Redis 等数据库,避免单点故障。
- 性能调优
- 异步化提交:Phase2 异步批量处理全局提交请求,降低网络延迟影响。
- 锁优化:设置合理的全局锁超时时间,避免长时间锁竞争。