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 异步批量处理全局提交请求,降低网络延迟影响。
- 锁优化:设置合理的全局锁超时时间,避免长时间锁竞争。
相关文章:
Spring Cloud Alibaba 学习 —— 简单了解常用技术栈
Spring Cloud Alibaba 官网:https://sca.aliyun.com/ 什么是 Spring Cloud Alibaba Spring Cloud Alibaba 是 Spring Cloud 规范在阿里生态的扩展实现,结合了阿里自研组件与开源生态,提供面向云原生场景的微服务解决方案。其核心功能可概括…...

智慧工厂整体解决方案
该方案围绕智能工厂建设,阐述其基于工业 4.0 和数字化转型需求,通过物联网、大数据、人工智能等技术实现生产自动化、数据化管理及联网协同的特点。建设步骤包括评估现状、设定目标、制定方案、测试调整、实施计划及持续改进,需整合 MES、ERP 等软件系统与传感器、机器人等硬…...

秋招Day12 - 计算机网络 - TCP
详细说一下TCP的三次握手机制 TCP的三次握手机制是为了在两个主机之间建立可靠的连接,这个机制确保两端的通信是同步的,并且在开始传输数据前,双方都做好了要通信的准备。 说说SYN的概念? SYN 是 TCP 协议中用来建立连接的一个标…...
KubeMQ 深度实践:构建可扩展的 LLM 中台架构
文章简介 在 AI 应用开发中,集成 OpenAI、Anthropic Claude 等多大型语言模型(LLM)常面临 API 碎片化、请求路由复杂等挑战。本文将介绍如何通过 ** 消息代理(Message Broker)** 实现高效的 LLM 管理,以开…...

vueflow
自定义节点,自定义线,具体细节还未完善,实现效果: 1.安装vueflow 2.目录如下 3. index.vue <script setup> import { ref } from vue import { VueFlow, useVueFlow } from vue-flow/core import { Background } from vue-…...

LearnOpenGL-笔记-其十一
Normal Mapping 又到了介绍法线贴图的地方,我感觉我已经写了很多遍了... 法线贴图用最简单的话来介绍的话,就是通过修改贴图对应物体表面的法线来修改光照效果,从而在不修改物体实际几何形状的前提下实现不同于物体几何形状的视觉效果。 因…...
@Docker Compose 部署 Prometheus
文章目录 Docker Compose 部署 Prometheus1. 环境准备2. 配置文件准备3. 编写 Docker Compose 文件4. 启动服务5. 验证部署6. 常用操作7. 生产环境增强建议8. 扩展监控对象 Docker Compose 部署 Prometheus 1. 环境准备 安装 Docker(版本 ≥ 20.10)和 …...

openppp2 -- 1.0.0.25225 优化多线接入运营商路由调配
本文涉及到的内容,涉及到上个发行版本相关内容,人们在阅读本文之前,建议应当详细阅读上个版本之中的VBGP技术相关的介绍。 openppp2 -- 1.0.0.25196 版本新增的VBGP技术-CSDN博客 我们知道在现代大型的 Internet 网络服务商,很多…...
二次封装 Vuex for Uniapp 微信小程序开发
作为高级前端开发工程师,我将为你提供一个针对 Uniapp Vue2 Vuex 的 Store 二次封装方案,使团队成员能够更便捷地使用和管理状态。 封装目标 模块化管理状态 简化调用方式 提供类型提示(在 Vue2 中尽可能实现) 便于维护和查…...

详细到用手撕transformer下半部分
之前我们讨论了如何实现 Transformer 的核心多头注意力机制,那么这期我们来完整地实现整个 Transformer 的编码器和解码器。 Transformer 架构最初由 Vaswani 等人在 2017 年的论文《Attention Is All You Need》中提出,专为序列到序列(seq2s…...
Spring Boot 整合 Spring Data JPA、strategy 的策略区别、什么是 Spring Data JPA
DAY29.2 Java核心基础 Spring Boot 整合 Spring Data JPA Spring Data JPA根据具体的数据库分为不同的子模块,无论是关系型数据库和非关系型数据库,Spring Data都提供了支持 Mysql:Spring Data JPA Redis:Spring Data Redis …...
Vue 3.0 中的路由导航守卫详解
1. 路由导航守卫 1.1. 全局前置守卫 Vue-Router 提供的导航守卫主要用来守卫路由的跳转或取消。它们可以植入到全局、单个路由或组件级别。 全局前置守卫可以使用 router.beforeEach 注册: const router createRouter({... });router.beforeEach((to, from) &g…...

【Sqoop基础】Sqoop生态集成:与HDFS、Hive、HBase等组件的协同关系深度解析
目录 1 Sqoop概述与大数据生态定位 2 Sqoop与HDFS的深度集成 2.1 技术实现原理 2.2 详细工作流程 2.3 性能优化实践 3 Sqoop与Hive的高效协同 3.1 集成架构设计 3.2 数据类型映射处理 3.3 案例演示 4 Sqoop与HBase的实时集成 4.1 数据模型转换挑战 4.2 详细集成流程…...

MySQL + CloudCanal + Iceberg + StarRocks 构建全栈数据服务
简述 在业务数据快速膨胀的今天,企业对 低成本存储 与 实时查询分析能力 的需求愈发迫切。 本文将带你实战构建一条 MySQL 到 Iceberg 的数据链路,借助 CloudCanal 快速完成数据迁移与同步,并使用 StarRocks 完成数据查询等操作,…...
MSVC支持但是Clang会报错的C++行为
MSVC的非标 目的友元别名模板类显式特例化的命名空间限制 目的 因为在使用clang进行ast分析msvc项目的时候,出现了爆红现象,了解到msvc会有一些不严格按照c标准但是允许的语法,在这点上clang就很严格,所以本文以clang为基准&…...

截屏精灵:轻松截屏,高效编辑
在移动互联网时代,截图已经成为我们日常使用手机时的一项基本操作。无论是记录重要信息、分享有趣内容,还是进行学习和工作,一款好用的截图工具都能极大地提升我们的效率。截屏精灵就是这样一款功能强大、操作简单的截图工具,它不…...

【JavaWeb】基本概念、web服务器、Tomcat、HTTP协议
目录 1. 基本概念1.1 基本概念1.2 web应用程序1.3 静态web1.4 动态web 2. web服务器3. tomcat详解3.1 安装3.2 启动3.3 配置3.3.1 配置启动的端口号3.3.2 配置主机的名称3.3.3 其他常用配置项日志配置数据源配置安全配置 3.4 发布一个网站 4. Http协议4.1 什么是http4.2 http的…...
黑马程序员C++核心编程笔记--4 类和对象--封装
C面向对象三大特征:封装、继承、多态 C认为万事万物皆对象,对象有其属性和行为,具有相同性质的对象可以抽象称为类 4.1 封装 4.1.1 封装的意义 将属性和行为作为一个整体,表现生活中的事物将属性和行为加以权限控制 在设计类…...
Debian:自由操作系统的精神图腾与技术基石
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 ——解码Linux世界最纯粹的开源哲学 一、Debian的诞生:从个人实验到全球协作 1993年,一位名为Ian Murdock的程序员在开源社区的启…...

云计算Linux Rocky day02(安装Linux系统、设备表示方式、Linux基本操作)
云计算Linux Rocky day02(安装Linux系统、设备表示方式、Linux基本操作) 目录 云计算Linux Rocky day02(安装Linux系统、设备表示方式、Linux基本操作)1、虚拟机VMware安装Rocky2、Linux命令行3、Linux Rocky修改字体大小和背景颜…...

在 ODROID-H3+ 上安装 Win11 系统
在 ODROID-H3 上安装 Windows 11 系统。 以下是完整的步骤,包括 BIOS 设置、U 盘制作、安装和驱动处理,全程不保留之前的系统数据。 ✅ 准备工作 1. 准备一个 ≥8GB 的 USB 启动盘 用另一台电脑制作 Windows 11 安装盘。 👉 推荐工具&…...
Docker常用命令操作指南(一)
Docker常用命令操作指南-1 一、Docker镜像相关命令1.1 搜索镜像(docker search)1.2 拉取镜像(docker pull)1.3 查看本地镜像(docker images)1.4 删除镜像(docker rmi) 二、Docker容器…...
什么是 SQL 注入?如何防范?
什么是 SQL 注入?如何防范? 1. SQL 注入概述 1.1 基本定义 SQL 注入(SQL Injection)是一种通过将恶意SQL 语句插入到应用程序的输入参数中,从而欺骗服务器执行非预期SQL命令的攻击技术。攻击者可以利用此漏洞绕过认证、窃取数据甚至破坏数据库。 关键结论:SQL 注入是O…...

使用el-input数字校验,输入汉字之后校验取消不掉
先说说复现方式 本来input是只能输入数字的,然后你不小心输入了汉字,触发校验了,然后这时候,你发现校验取消不掉了 就这样了 咋办啊,你一看校验没错啊,各种number啥的也写了,发现没问题啊 <el-inputv…...

Docker容器启动失败的常见原因分析
我们在开发部署的时候,用 Docker 打包环境,理论上是“我装好了你就能跑”。但理想很丰满,现实往往一 docker run 下去就翻车了。 今天来盘点一下我实际工作中经常遇到的 Docker 容器启动失败的常见原因,顺便给点 debug 的小技巧&a…...
Java提取markdown中的表格
Java提取markdown中的表格 说明 这篇博文是一个舍近求远的操作,如果只需要要对markdown中的表格数据进行提取,完全可以通过正在表达式或者字符串切分来完成。但是鉴于学习的目的,这次采用了commonmark包中的工具来完成。具体实现过程如下 实…...

立志成为一名优秀测试开发工程师(第七天)——unittest框架的学习
目录 unittest框架的学习 一、测试类的编写 创建相关测试类cal.py、CountTest.py 二、常见断言方法 使用unittest单元测试框架编写测试用例CountTest.py 注意:执行的时候光标一定要放在括号后面,鼠标右键运行 三、对测试环境的初始化和清除模块…...
精益数据分析(85/126):营收阶段的核心指标与盈利模型优化——从数据到商业决策的落地
精益数据分析(85/126):营收阶段的核心指标与盈利模型优化——从数据到商业决策的落地 c。 一、营收健康度的核心指标:投资回报率模型 (一)季度再发性营收增长率(QRR) 该指标衡量…...

论坛系统(4)
用户详情 获取用户信息 实现逻辑 ⽤⼾提交请求,服务器根据是否传⼊Id参数决定返回哪个⽤⼾的详情 1. 不传⽤⼾Id,返回当前登录⽤⼾的详情(从session获取) 2. 传⼊⽤⼾Id,返回指定Id的⽤⼾详情(根据用户id去查) 俩种方式获得用户信息 参…...
本地Markdown开源知识库选型指南
本地Markdown开源知识库选型指南 以下是几款优秀的本地Markdown开源知识库解决方案,适合不同需求场景: 1. Obsidian (非完全开源但免费) 特点:基于Markdown的本地优先知识管理,丰富的插件生态优势:双向链接、图形视…...