Spring Cloud Alibaba 中间件

🔗 Spring官方介绍 [⚠️Spring官方对Spring Cloud Alibaba的更新不及时]

🔗 Spring Cloud Alibaba官网

📝 代码记录

Nacos(服务注册与发现)

Nacos(Dynamic Naming and Configuration Service, Nacos),一个易于构建 Al Agent 应用的动态服务发现、配置管理和AI智能体管理平台。

Nacos = Eureka + Config + Bus = Spring Cloud Consul

Nacos官网

组件名语言CAP服务健康检查对外暴露接口Spring Cloud集成
EurekaJavaAP可配支持HTTP已集成
ConsulGoCP支持HTTP/DNS已集成
ZookeeperJavaCP支持客户端已集成
NacosJavaAP支持客户端已集成

Nacos 在阿里巴巴内部有超过 10 万的实例运行,已经过了类似双十一等各种大型流量的考验,Nacos默认是AP模式,

但也可以调整切换为CP,一般用默认AP即可。

下载与安装

  • spring-cloud-starter-alibaba-nacos-config: 实现配置的动态更新
  • spring-cloud-starter-alibaba-nacos-discovery: 实现服务的注册与发现

注册中心

主要配合spring-cloud-starter-alibaba-nacos-discovery

服务发现:yml配置nacos相关配置、主启动配置EnableDiscoveryClient注解

调用注册中心中的服务:只需在配置中增加RestTemplate的bean,并增加loadbalancer注解,调用服务的接口时将host写成服务名称即可

配置中心

主要配合spring-cloud-starter-alibaba-nacos-discovery

nacos端配置文件DataId的命名规则:

p r e f i x − {prefix}- prefix{spring.profiles.active}.${file-extension}

Namespace,Group,DataId

目的是解决 多环境、多项目、多配置文件的管理

Nacos 数据模型 Key 由三元组(Namespace,Group,DataId)唯一确定, Namespace默认是空串,公共命名空间(public),分组默认是 DEFAULT_GROUP。

Sentinel(服务熔断和降级)

面向分布式、多语言异构化服务架构的流量治理组件。

从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性

Sentinel官网/Github

Sentinel后台端口8719,前台端口8080,前台用户名密码都是sentinel

SentinelResource注解

SentinelResource是一个流量防卫组件注解,用于指定防护资源,对配置的资源进行流量控制、熔断降级等功能。

SentinelResource注解配置说明

注意fallback与blockHandler的区别

  • blockHandler,主要针对sentinel配置后出现的违规情况处理
  • fallback,程序异常了,JVM抛出的异常服务降级

流控规则

流控规则说明

Sentinel能够对流量进行控制,主要是监控应用的QPS流量或者并发线程数等指标,如果达到指定的阈值时,就会被流量进行控制,以避免服务被瞬时的高并发流量击垮,保证服务的高可靠性。

流控模式

  • 直接:默认的流控模式,当接口达到限流条件时,直接开启限流功能。
  • 关联:当关联的资源达到阈值,就限流自己;当与A关联的资源B达到阈值后,就限流A自己。(A惹事B挂了)
  • 链路: 来自不同链路的请求对同一个目标访问时,实施针对性的不同限流措施,比如C请求来访问就限流,D请求来访问就是OK

流控效果

  • 快速失败:直接失败,抛出异常。Blocked by Sentinel (flow limiting)
  • Warm up:限流,冷启动。当流量增大的时候,希望系统从空闲状态到繁忙状态的切换时间长一些。公式:阈值除以冷却因子coldFactor(默认值为3),经过预热时长后才会达到阈值。默认coldFactor为3,即请求QPS从threshold/3开始,经预热时长逐渐升至设定的QPS阈值
  • 排队等待:主要处理间隔性突发流量,当一秒内发起大量请求,后几秒却是空闲状态。排队等待重排请求,使得服务器匀速处理请求。

熔断规则

Sentinel 熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认行为是抛出 DegradeException)。

熔断规则说明

  • 慢调用比例(SLOW_REQUEST_RATIO) :在统计时长内,实际请求数目 > 设定的最小请求数 且 实际慢调用比例 > 比例阈值,进入熔断状态。
  • 异常比例(ERROR_RATION): 异常比例达到阈值,进入熔断状态
  • 异常数(ERROR_COUNT): 数量达到阈值,进入熔断状态

热点规则

热点即经常访问的数据,很多时候我们希望统计或者限制某个热点数据中访问频次最高的TopN数据,并对其访问进修限流或者其他操作

热点规则说明

简单来说就是对指定入参限流,sentinel还可以有参数例外项,即对特定的参数值不限流,其他的参数值都限流

授权规则

对请求分黑白名单

来源访问控制说明

⚠️注意要实现RequestOriginParser再配合可视化端

Seata(分布式事务)

⚠️面试重灾区,Seata分布式三大模式的原理需要仔细了解

背景:一次业务操作需要跨多个数据源或需要跨多个系统进行远程调用,就会产生分布式事务问题;但是关系型数据库提供的能力是单机事务,一但遇到分布式事务场景,就需要通过更多其他技术手段来解决问题。

Seata(Simple Extensible Autonomous Transaction Architecture), 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。

Seata官网/Github, Alibaba开发,2023.10.29捐赠给Apache

Seata部署

Seata三大模式

  • Seata AT
  • Seata TCC
  • Seata SAGA
  • Seata XA

工作流程

Seata对分布式事务的协调和控制就是1+3

  • 1个XID:XID是全局事务的唯一标识,他可以在服务的调用链路中传递,绑定到服务的事务上下文中。
  • 3(TC->TM->RM)
    • TC(Transaction Coordinator)事务协调者
      • 维护全局和分支事务的状态,驱动全局事务提交或回滚。
    • TM(Transaction Manager)事务管理器
      • 定义全局事务的范围:开始全局事务、提交或回滚全局事务。
    • RM(Resource Manager)资源管理器
      • 管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

三个组件相互协作,TC以Seata服务器形式独立部署,TM和RM则是以Seata Client的形式集成在微服务中运行

流程:

  1. TM向TC申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的XID。
  2. XID在微服务调用链路的上下文中传播。
  3. RM向TC注册分支事务,将其纳入XID对应全局事务的管辖。
  4. TM向TC发起针对XID的全局提交或回滚决议。
  5. TC调度XID下管辖的全部分支事务完成提交或回滚请求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/85275.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/85275.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/85275.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp+vue中 多次触发onLoad/created

控制台log输出为何频频失踪?   wxss代码为何频频失效?   wxml布局为何乱作一团?   究竟是道德的沦丧?还是人性的缺失?   让我们一起来 走 跑进科学 前言 uniapp中开发网页h5,莫名其妙每次请求接口都会执行两次,仔细排查发现是onLoadonShow…

[论文阅读] 人工智能+软件工程 | 软件工程中非代码工作的LLM能力评估

软件工程中非代码工作的LLM能力评估 论文信息 misc{2506.10833v1,title{Evaluating Large Language Models on Non-Code Software Engineering Tasks},author{Fabian C. Pea and Steffen Herbold},year{2025},eprint{2506.10833},archivePrefix{arXiv},primaryClass{cs.SE} }…

Data URI Scheme 详解:将数据嵌入 URL 的技术方案

一、Data URI Scheme 是什么? Data URI 是一种特殊的URL格式,允许将数据(如图像、文本、音频等)直接嵌入到URL中,而无需引用外部资源。它由RFC 2397标准定义,常用于前端开发中减少HTTP请求次数&#xff0c…

基于Redis方案的分布式锁的Java实现

前期, 我们介绍了什么是分布式锁及分布式锁应用场景, 今天我们基于Redis方案来实现分布式锁的应用。 1. 基于Redis分布式锁方案介绍 基于Redis实现的分布式锁是分布式系统中控制资源访问的常用方案,利用Redis的原子操作和高性能特性实现跨进…

Kafka源码P2-生产者缓冲区

欢迎来到啾啾的博客🐱。 记录学习点滴。分享工作思考和实用技巧,偶尔也分享一些杂谈💬。 有很多很多不足的地方,欢迎评论交流,感谢您的阅读和评论😄。 目录 1 引言2 缓冲区2.1 消息在Partition内有序2.2 批…

力扣网C语言编程题:三数之和

一. 简介 本文记录力扣网上的逻辑编程题,涉及数组方面的,这里记录一下 C语言实现和Python实现。 二. 力扣网C语言编程题:三数之和 题目:三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nu…

2.2 Windows MSYS2编译FFmpeg 4.4.1

一、安装编译工具 # 更换pacman源 sed -i "s#mirror.msys2.org/#mirrors.ustc.edu.cn/msys2/#g" /etc/pacman.d/mirrorlist* pacman -Sy# 安装依赖 pacman -S --needed base-devel mingw-w64-x86_64-toolchain pacman -S mingw-w64-x86_64-nasm mingw-w64-x86_64-ya…

驱动开发,队列,环形缓冲区:以GD32 CAN 消息处理为例

对环形缓冲区进行进一步的优化和功能扩展,以应对更复杂的实际应用场景,特别是针对 CAN 总线消息处理的场景。 一、优化点 1:动态配置环形缓冲区大小在原始实现中,我们固定了缓冲区大小为 RINGBUFF_LEN 64。这种方式虽然简单&am…

SQL基础知识,MySQL学习(长期更新)

1、基本操作,增删查改 INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2, ...); DELETE FROM 表名 WHERE 条件 SELECT * FROM 表名 WHERE 条件 UPDATE 表名 SET 字段1 值, 字段2 值, ... WHERE 条件; SELECT * INTO 新表 FROM 旧表 WHERE… INSERT INTO 语…

Git(一):初识Git

文章目录 Git(一):初识GitGit简介核心功能分布式特性结构与操作优势与适用场景 创建本地仓库git init配置name与email--global 工作区、暂存区与版本库git addgit commitcommit后.git的变化 Git(一):初识Git Git简介 Git 是一个分布式版本控制系统&…

第19天:初级数据库学习笔记3

分组函数(多行处理函数) 即多个输入对应一个输出。前面讲的数据处理函数是单行处理函数。(在公司中常说单,多行处理函数) 分组函数包括五个: max:最大值min:最小值avg&#xff1a…

Windows11下搭建Raspberry Pi Pico编译环境

1. 系统与工具要求 PC平台: Windows 11 专业版 Windows GCC: gcc-15.1.0-64.exe GNU Make: 4.3 Git: 2.49.0 cmake: 4.0.2 python:3.12.11 Arm GNU Toolchain Downloads – Arm Developer 2. 工具安装与验证 2.1 工具安装 winget安装依赖工具(Windows …

【C语言极简自学笔记】重讲运算符

一、算术操作符 算术操作符描述把两个操作数相加-第一个操作数减去第二个操作数*把两个操作数相乘/分子除以分母%取模运算符,整除后的余数 注意:1.除号的两端都是整数的时候执行的是整数的除法,两端只要有一个浮点数,就执行浮点…

持续集成 CI/CD-Jenkins持续集成GitLab项目打包docker镜像推送k8s集群并部署至rancher

Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 之前是通过jar包在shell服务器上进行手动部署,麻烦且耗时。现通过Jenkins进行持续集成实现CI/CD。以test分支为例 提交即部署。 由于是根据自己实际使用过程 具体使用到了 gitlabjenkinsdockerharborra…

Apache Iceberg与Hive集成:非分区表篇

引言 在大数据处理领域,Apache Iceberg凭借其先进的表格式设计,为大规模数据分析带来了新的可能。当Iceberg与Hive集成时,这种强强联合为数据管理与分析流程提供了更高的灵活性和效率。本文将聚焦于Iceberg与Hive集成中的非分区表场景&#…

webpack 如何区分开发环境和生产环境

第一种方法: 方法出处:命令行接口(CLI) | webpack 中文文档 1.利用webpack.config.js 返回的是个函数,利用函数的参数,来区分环境 具体步骤 1) package.json文件:在npm scripts 命令后面追加 …

React组件通信——context(提供者/消费者)

Context 是 React 提供的一种组件间通信方式,主要用于解决跨层级组件 props 传递的问题。它允许数据在组件树中"跨级"传递,无需显式地通过每一层 props 向下传递。 一、Context 核心概念 1. 基本组成 React.createContext:创建 C…

“微信短剧小程序开发指南:从架构设计到上线“

1. 引言:短剧市场的机遇与挑战 近年来,短视频和微短剧市场呈现爆发式增长,用户碎片化娱乐需求激增。短剧小程序凭借轻量化、社交传播快、变现能力强等特点,成为内容创业的新风口。然而,开发一个稳定、流畅且具备商业价…

RPC与RESTful对比:两种API设计风格的核心差异与实践选择

# RPC与RESTful对比:两种API设计风格的核心差异与实践选择 ## 一、架构哲学与设计目标差异 1. **RPC(Remote Procedure Call)** - **核心思想**:将远程服务调用伪装成本地方法调用(方法导向) - 典型行为…

【pytest进阶】pytest之钩子函数

什么是 hook (钩子)函数 经常会听到钩子函数(hook function)这个概念,最近在看目标检测开源框架mmdetection,里面也出现大量Hook的编程方式,那到底什么是hook?hook的作用是什么? what is hook ?钩子hook,顾名思义,可以理解是一个挂钩,作用是有需要的时候挂一个东西…