Spring Cloud Sentinel 快速入门与生产实践指南
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言:流量洪峰下的微服务守卫战 🛡️
- 一、Sentinel 核心架构解析
- 1.1 Sentinel 整体架构
- 1.2 核心处理流程
- 二、快速入门实战
- 2.1 环境搭建全流程
- 2.2 核心防护配置实战
- 2.3 基础配置模板
- 2.4 高级流量控制模式
- 2.5 Sentinel Dashboard 使用
- 三、最佳实践
- 3.1 网关级流量控制
- 3.2 熔断降级策略
- 3.3 集群流量控制
- 3.4 性能优化建议
- 总结
前言:流量洪峰下的微服务守卫战 🛡️
当凌晨3点的告警铃声响起,整个技术团队陷入手忙脚乱——核心服务突然出现大规模超时,上下游链路连环崩溃,恢复过程如同在暴风雨中修补漏水的船舱。这样的场景是否似曾相识?
微服务雪崩效应链式反应图:
在分布式系统复杂度指数级增长的今天,传统的限流降级方案正面临三大致命挑战:
- 粗粒度防御:简单QPS限制无法应对突发业务场景
- 反应迟钝:等到系统过载才触发保护为时已晚
- 运维黑盒:缺乏实时可视化的决策依据
Spring Cloud Sentinel的破局之道:
“不是简单地阻止流量,而是让系统获得自适应免疫力” —— Sentinel核心设计哲学
本文带领大家深入学习Spring Cloud Sentinel…
一、Sentinel 核心架构解析
1.1 Sentinel 整体架构
核心处理链(Slot Chain):
- NodeSelectorSlot:资源路径选择
- ClusterBuilderSlot:集群节点构建
- StatisticSlot:实时指标统计(核心计量单元)
规则控制层:
- 流量控制(FlowSlot)
- 熔断降级(DegradeSlot)
- 系统保护(SystemSlot)
// 典型规则配置示例
FlowRule rule = new FlowRule().setResource("orderService").setGrade(RuleConstant.FLOW_GRADE_QPS).setCount(100); // 阈值100 QPS
扩展适配层:
- 支持主流框架的自动埋点
- 自定义Slot扩展接口
控制台交互:
实时监控数据流:
关键组件交互流程:
- 请求到达:经过Slot Chain责任链
- 规则校验:依次检查Flow/Degrade/System规则
- 指标记录:通过StatisticSlot写入Metric
- 控制反馈:触发BlockException或正常通过
1.2 核心处理流程
Sentinel 的核心处理流程是一个高度模块化的责任链模式设计,通过一系列有序的处理器(ProcessorSlot)对流量进行逐层过滤和控制。整个流程以微秒级的速度完成决策,在保障系统稳定的同时,最大程度减少性能损耗。以下是完整处理流程的逐步解析:
- 入口节点选择(NodeSelectorSlot)
当请求进入被 Sentinel 保护的资源(如一个 HTTP 接口或 Dubbo 服务方法)时,首先由 NodeSelectorSlot 创建调用链路节点。这一步的核心任务是:
- 构建调用树: 为每个资源创建唯一的 EntranceNode(入口节点),形成树状调用关系。例如:订单服务 → 库存服务 → 数据库,形成层级调用链。
- 维护上下文: 通过 ContextUtil.enter() 方法将资源名称与线程上下文绑定,确保后续 Slot 能正确获取调用链信息。
- 区分调用类型: 自动识别入口类型(如 HTTP 请求、RPC 调用),为后续的流控策略提供分类依据。
设计意义:
通过调用树结构,Sentinel 能够实现细粒度控制。例如,当「创建订单」接口调用「扣减库存」服务时,可单独对库存服务设置流控规则,而不影响订单服务的其他调用路径。
- 集群节点构建(ClusterBuilderSlot)
在确定资源节点后,ClusterBuilderSlot 开始构建集群维度的统计节点:
- 初始化 ClusterNode: 每个资源对应一个 ClusterNode 对象,存储该资源的全局指标(如 QPS、响应时间)。
- 维护集群状态: 通过 ClusterNode 的 passQps、blockQps 等字段,实时统计集群级别的请求数据。
- 区分调用来源: 为不同的调用方(origin)创建独立的统计节点,实现「根据来源限流」的高级功能。
底层数据结构:
ClusterNode 使用滑动窗口算法存储指标数据。例如,将一个 1 秒的时间窗口划分为 2 个 500ms 的子窗口,通过滚动更新实现高精度统计。
窗口示例:
[0-500ms] [500ms-1s] → 窗口滚动 → [500ms-1s] [1s-1.5s]
- 实时指标统计(StatisticSlot)
StatisticSlot 是整个流程的核心计量单元,负责多维度数据采集:
- 基础指标: 统计成功 QPS、异常次数、响应时间(RT)的百分位值(如 P99)。
- 多维存储:
- DefaultNode:存储单个资源在当前上下文中的实时数据
- ClusterNode:聚合该资源在所有上下文的全局数据
- OriginNode:按调用来源区分的统计维度
滑动窗口实现:
采用时间窗 + 计数窗的双层结构:
// 示例:统计最近 10 秒的 QPS
LeapArray<WindowWrap<MetricBucket>> data = new OccupiableBucketLeapArray(10, 1000);
性能优化:
- 无锁设计:通过 AtomicLong 数组 + CAS 操作更新指标,避免线程阻塞
- 内存压缩:使用位图存储响应时间分布,内存占用降低 80%
- 流量规则检查(FlowSlot)
在完成指标统计后,FlowSlot 开始执行流量控制规则:
-
规则匹配顺序:
- 特定来源规则:如对来自移动端的请求单独限流
- 默认全局规则:匹配所有来源的通用规则
- 关联资源规则:当资源 A 超限时,限制资源 B 的流量
-
流控算法:
- 直接拒绝:超过阈值立即返回 BlockException
- 匀速排队:通过漏桶算法实现请求的匀速通过
- 预热模式:根据冷启动公式逐渐放开阈值,避免冷系统被击穿
冷启动公式:
阈值 = 初始阈值 + (当前时间 - 启动时间) * (最大阈值 - 初始阈值) / 预热周期
- 熔断降级判断(DegradeSlot)
DegradeSlot 负责实时健康检查,通过三级熔断策略防止雪崩:- 慢调用比例熔断
- 统计周期内响应时间 > 阈值(如 500ms)的请求比例
- 比例超过设定值(如 50%)时触发熔断
- 适用场景: 数据库慢查询、第三方服务响应延迟
- 异常比例熔断
- 统计周期内业务异常(非 BlockException)的比例
- 比例超过阈值(如 60%)时触发熔断
- 适用场景: 参数校验失败、下游服务返回错误码
- 异常数熔断
- 统计周期内业务异常总数
- 达到阈值(如 100 次/分钟)时触发熔断
- 适用场景: 网络抖动、服务短暂不可用
- 慢调用比例熔断
- 系统保护检查(SystemSlot)
SystemSlot 从全局维度保护宿主系统,防止系统负载过高:- LOAD 自适应保护
- 根据系统 CPU 负载动态调整阈值
- 当 load1(1 分钟负载)超过阈值时触发保护
- 并发线程数控制
- 监控所有资源的线程池使用情况
- 防止线程池耗尽导致服务假死
- 入口 QPS 控制
- 设置整个系统的最大入口流量
- 优先级高于资源级别的流控规则
- LOAD 自适应保护
自适应算法:
系统通过 PID 控制器动态调整阈值:
当前阈值 = 上次阈值 + Kp*(当前负载 - 目标负载) + Ki累计误差 + Kd(当前误差 - 上次误差)
通过这一处理流程,Sentinel 能够在 0.5ms 内完成单次请求的全链路判断,相比传统方案(如 Hystrix)性能提升 10 倍以上,实际生产环境中可支撑百万级 QPS 的防护需求。
二、快速入门实战
2.1 环境搭建全流程
POM深度配置:
<!-- 核心依赖 -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId><version>2022.0.0.0-RC2</version>
</dependency><!-- 高级功能支持 -->
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId><version>1.8.6</version>
</dependency><!-- Actuator健康检查 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
配置文件详解:
spring:application:name: order-servicecloud:sentinel:transport:dashboard: localhost:8080 # 控制台地址port: 8719 # 客户端通信端口eager: true # 取消懒加载web-context-unify: false # 关闭上下文合并# 数据源配置(Nacos示例)datasource:ds1:nacos:server-addr: 127.0.0.1:8848dataId: sentinel-rulesgroupId: DEFAULT_GROUPrule-type: flowmanagement:endpoints:web:exposure:include: '*' # 暴露所有监控端点
2.2 核心防护配置实战
场景1:基础流控防护
@RestController
@RequestMapping("/orders")
public class OrderController {// 埋点资源定义@GetMapping("/{id}")@SentinelResource(value = "getOrder", blockHandler = "blockHandlerForGetOrder",fallback = "fallbackForGetOrder")public Order getOrder(@PathVariable String id) {// 模拟业务逻辑if ("0".equals(id)) {throw new IllegalArgumentException("非法ID");}return orderService.findById(id);}// 流控降级处理public Order blockHandlerForGetOrder(String id, BlockException ex) {return new Order("blocked-order", "流量控制触发");}// 业务异常降级public Order fallbackForGetOrder(String id, Throwable t) {return new Order("fallback-order", "业务异常降级");}
}
规则配置(代码方式):
@PostConstruct
public void initRules() {// 流控规则List<FlowRule> flowRules = new ArrayList<>();FlowRule flowRule = new FlowRule("getOrder").setGrade(RuleConstant.FLOW_GRADE_QPS).setCount(50) // 阈值50 QPS.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_WARM_UP) // 预热模式.setWarmUpPeriodSec(10); // 预热时间10秒flowRules.add(flowRule);// 熔断规则List<DegradeRule> degradeRules = new ArrayList<>();DegradeRule degradeRule = new DegradeRule("getOrder").setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_RATIO).setCount(0.6) // 异常比例60%.setTimeWindow(30) // 熔断时间30秒.setMinRequestAmount(20); // 最小请求数degradeRules.add(degradeRule);FlowRuleManager.loadRules(flowRules);DegradeRuleManager.loadRules(degradeRules);
}
2.3 基础配置模板
配置类:
@Configuration
public class SentinelConfig {// 异常忽略配置@Beanpublic List<Class<? extends Throwable>> sentinelIgnoreExceptions() {List<Class<? extends Throwable>> list = new ArrayList<>();list.add(BusinessException.class); // 自定义业务异常list.add(IllegalArgumentException.class);return list;}// 自定义URL清洗策略@Beanpublic UrlCleaner urlCleaner() {return url -> {if (url.startsWith("/api/v1/")) {return url.replaceAll("/\\d+", "/{id}");}return url;};}
}
日志配置优化:
# Sentinel日志配置
csp.sentinel.log.dir=/var/log/${spring.application.name}/sentinel
csp.sentinel.log.output.type=file
csp.sentinel.log.max.file.count=10
csp.sentinel.metric.file.single.size=52428800
2.4 高级流量控制模式
场景2:热点参数限流:
@GetMapping("/search")
@SentinelResource(value = "searchOrders", blockHandler = "searchBlockHandler",fallback = "searchFallback")
public List<Order> searchOrders(@RequestParam String keyword,@RequestParam(required = false) String category) {// 业务逻辑
}// 热点规则配置
ParamFlowRule rule = new ParamFlowRule("searchOrders").setParamIdx(0) // 第一个参数(keyword).setGrade(RuleConstant.FLOW_GRADE_QPS).setCount(5) // 单个热点值阈值.setParamFlowItemList(Collections.singletonList(new ParamFlowItem().setObject("urgent").setClassType(String.class.getName()).setCount(10) // 特殊值阈值));
场景3:集群流量控制:
spring:cloud:sentinel:flow:cluster:enabled: true # 开启集群限流fallbackToLocalWhenFail: true # 降级到本地模式server-addr: http://sentinel-cluster:8888
2.5 Sentinel Dashboard 使用
Sentinel Dashboard 是 Sentinel 的可视化控制台,用于实现 流量控制规则配置、实时监控 和 集群流量管理
点击这里逐步安装Sentinel Dashboard
三、最佳实践
3.1 网关级流量控制
Spring Cloud Gateway 集成:
spring:cloud:gateway:routes:- id: order-serviceuri: lb://order-servicepredicates:- Path=/order/**filters:- name: RequestRateLimiterargs:redis-rate-limiter.replenishRate: 100redis-rate-limiter.burstCapacity: 200key-resolver: "#{@pathKeyResolver}"
3.2 熔断降级策略
@Bean
public DegradeRule degradeRule() {DegradeRule rule = new DegradeRule();rule.setResource("queryInventory");rule.setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_RATIO);rule.setCount(0.5); // 异常比例阈值rule.setTimeWindow(30); // 熔断时间30秒rule.setMinRequestAmount(20); // 最小请求数return rule;
}
熔断降级黄金参数模板:
- 熔断规则三维度配置
// 熔断规则黄金模板
DegradeRule degradeRule = new DegradeRule()// 基本配置.setResource("orderService:queryById").setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_RATIO) // 熔断策略类型.setCount(0.5) // 阈值(比例/慢调用比例/异常数).setTimeWindow(30) // 熔断时长(秒)// 高级配置.setMinRequestAmount(20) // 最小请求数窗口.setStatIntervalMs(60000) // 统计窗口(ms).setSlowRatioThreshold(0.3) // 慢调用比例阈值(仅慢调用模式)// 特殊场景.setHalfOpenRecoveryStepNum(5) // 半开状态试探请求数.setHalfOpenBaseAmount(10); // 半开状态基础请求量
3.3 集群流量控制
配置示例:
# 开启集群限流
spring.cloud.sentinel.transport.client-ip=192.168.1.100
spring.cloud.sentinel.flow.cluster-mode=true
3.4 性能优化建议
- 规则缓存优化:使用本地文件缓存规则
- 日志异步化:配置异步日志输出
- 动态数据源:集成Nacos实现规则动态更新
- 生产推荐配置:
#关闭 Sentinel 的 EagleEye 监控日志上报功能,减少网络开销或隐私合规要求场景
sentinel.eagleeye.enabled=false
#设置 Sentinel 监控日志文件的单个文件大小上限为 100MB,文件达到阈值后会滚动生成新文件
sentinel.metric.file.singleSize=100MB
sentinel.log.dir=/var/log/sentinel
总结
通过本文的深度探索,我们揭开了Spring Cloud Sentinel如何成为微服务稳定性保障的核心利器。从流量控制到熔断降级,从单机防护到集群治理,Sentinel以精准的算法和高效的架构,为现代分布式系统打造了一套多维立体的防护体系。
推荐学习路径:
- 官方文档:https://sentinelguard.io/
- 源码分析:Sentinel Slot Chain 实现机制
- 高级特性:热点参数限流、系统自适应保护
相关文章:

Spring Cloud Sentinel 快速入门与生产实践指南
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言:流量洪峰下的微服务守卫战 🛡️一、Sentinel 核心架构解析1.1 Sentinel 整体架构1.2 核心处理流程 二、快速入门实战2.1 环境搭建全流程…...
系统架构设计(十):结构化编程
定义 结构化编程是一种遵循清晰逻辑结构、避免使用 goto 的编程方法。它强调使用有限的三种基本控制结构来组织程序,提高程序的可读性、可维护性和可测试性。 它是现代程序设计的基础,被广泛应用于命令式语言(如 C、Pascal、Java࿰…...
标准差和方差是什么
标准差和方差是什么 标准差的简单理解 标准差是衡量一组数据**离散程度(即数据的分散或集中程度 )**的统计量。它表示数据集中每个数值与这组数据平均值的偏离程度。 标准差越大,说明数据越分散,波动越大; 标准差越小,说明数据越集中,波动越小 。 可以把数据想象成一群…...
【周输入】510周阅读推荐-3
前文 【周输入】510周阅读推荐-1-CSDN博客 【周输入】510周阅读推荐-2-CSDN博客 本次推荐 目录 前文 本次推荐 算法技术 模型产品 算法技术 vLLM和DeepSpeed部署模型的优缺点_vllm deepspeed-CSDN博客 优点缺点总结vLLM 适用于推理 优化内存管理 高效并行化 功能单…...

Android平台GB28181设备接入与功能支持详解
GB28181协议作为中国国家标准,广泛应用于安防、智慧城市和交通监控等领域。大牛直播SDK提供了全面支持GB28181设备接入的技术方案,能够有效帮助开发者实现设备的快速接入与管理。在本文中,我们将深入介绍大牛直播SDK在Android平台上对于GB281…...

mvc-ioc实现
IOC 1)耦合/依赖 依赖,是谁离不开谁 就比如上诉的Controller层必须依赖于Service层,Service层依赖于Dao 在软件系统中,层与层之间存在依赖。我们称之为耦合 我们系统架构或者设计的一个原则是ÿ…...

Windows 11 C:\Windows\Web\Wallpaper
Windows 11 C:\Windows\Web\Wallpaper 纯色壁纸自定义 没一个好看的...
医疗信息系统安全防护体系的深度构建与理论实践融合
一、医疗数据访问系统的安全挑战与理论基础 1.1 系统架构安全需求分析 在医疗信息系统中,基于身份标识的信息查询功能通常采用分层架构设计,包括表现层、应用层和数据层。根据ISO/IEC 27001信息安全管理体系要求,此类系统需满足数据保密性…...
Compose笔记(二十五)--Brush
这一节主要了解一下Compose中Brush,在Jetpack Compose里,Brush是一个重要的 API,它用于定义填充图形的颜色渐变或图案,能够为界面元素添加丰富的视觉效果。简单总结如下: 1 常见场景 填充形状(圆形、矩形等) 创建渐变…...

Spring Web MVC————入门(3)
今天我们来一个大练习,我们要实现一个登录界面,登录进去了先获取到登录人信息,可以选择计算器和留言板两个功能,另外我们是学后端的,对于前端我们会些基础的就行了,知道ajax怎么用,知道怎么关联…...
HTML 属性详解
HTML 属性详解 HTML(HyperText Markup Language)是创建网页的标准标记语言。在HTML中,元素可以通过属性来扩展其功能。属性是元素的一个特性,它提供了关于元素的额外信息。本文将详细介绍HTML中的常见属性,帮助您更好地理解和运用HTML。 一、HTML属性的基本概念 HTML属…...

NC61 两数之和【牛客网】
文章目录 零、原题链接一、题目描述二、测试用例三、解题思路3.1 排序双指针3.1 散列 四、参考代码4.1 排序双指针4.2 散列 零、原题链接 NC61 两数之和 一、题目描述 二、测试用例 三、解题思路 3.1 排序双指针 基本思路: 先对序列进行排序,然后…...
Java生成可控的Word表格功能开发
在日常办公自动化与系统集成场景中,生成结构化的Word文档已成为一种刚性需求,尤其是带有格式规范、内容动态填充的Word表格(Table)。本文将围绕如何利用Java开发一个可控的Word表格生成功能模块展开,涵盖技术选型、代码实现、边界控制与常见问题处理等方面,帮助开发者快速…...
Node.js中的洋葱模型
文章目录 前言 前言 Node.js中的洋葱模型是一种中间件执行机制,主要用于处理HTTP请求和响应的流程控制。该模型通过层层包裹的中间件结构,实现请求从外到内穿透、响应从内向外返回的顺序执行。以下从核心概念、实现原理、框架差异及实际应用等方面解析&…...
Spring Boot 中 MyBatis 与 Spring Data JPA 的对比介绍
一、核心概念 MyBatis 定义:基于 SQL 的持久层框架,提供灵活的 SQL 映射和自定义查询能力。 特点: 开发者手动编写 SQL(XML 或注解)。 支持动态 SQL、复杂查询优化。 轻量级,对数据库控制力强。 Spri…...

如何分析动态采样引起的计划不稳定 | OceanBase SQL 调优实践
这篇博客涉及两个知识点,一个是动态采样,另一个是 DAS 执行。 用户的问题和相关结论 我们看看用户在OceanBase 社区论坛发帖中提出的疑问及其所得出的结论。 问题:收集统计信息之前,为什么会出现计划不稳定的情况? …...

如何实现RTSP和RTMP低至100-200ms的延迟:直播SDK的技术突破
在实时音视频传输中,低延迟是直播应用的核心技术要求之一。无论是在线教育、远程医疗,还是实时互动直播,延迟过大会影响用户体验,甚至导致应用无法正常使用。大牛直播SDK(SmartMediaKit)在RTSP和RTMP播放器…...

symfonos: 2靶场
symfonos: 2 来自 <https://www.vulnhub.com/entry/symfonos-2,331/> 1,将两台虚拟机网络连接都改为NAT模式 2,攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182,靶场IP192.168.23.253 3&…...

【图像生成大模型】Step-Video-T2V:下一代文本到视频生成技术
Step-Video-T2V:下一代文本到视频生成技术 引言Step-Video-T2V 项目概述核心技术1. 视频变分自编码器(Video-VAE)2. 3D 全注意力扩散 Transformer(DiT w/ 3D Full Attention)3. 视频直接偏好优化(Video-DPO…...
C语言中的指针:从基础到进阶实战
指针是C语言中最具特色且功能强大的特性之一。它们不仅是内存管理的核心工具,还能帮助程序员实现复杂的数据结构和高效算法。本文将从指针的基础知识入手,逐步深入探讨其高级应用,结合实际示例,助你掌握指针的精髓。 一、指针的基…...

深度学习推理引擎---ONNX Runtime
一、基础概念 1. 什么是ONNX Runtime? 定位:由微软开发的跨平台推理引擎,专为优化ONNX(Open Neural Network Exchange)模型的推理性能设计。目标:提供高效、可扩展的推理能力,支持从云到边缘的…...
JAVA Spring MVC+Mybatis Spring MVC的工作流程*,多表连查
目录 注解总结 将传送到客户端的数据转成json数据 **描述一下Spring MVC的工作流程** 1。属性赋值 BeanUtils.copyProperties(addUserDTO,user); 添加依赖: spring web、mybatis framework、mysql driver Controller和ResponseBody优化 直接改成RestControl…...
ctr查看镜像
# 拉取镜像到 k8s.io 命名空间 sudo nerdctl --namespace k8s.io pull nginx:1.23.4 # 验证镜像是否已下载 sudo nerdctl --namespace k8s.io images 下载镜像到k8s.io名称空间下 nerdctl --namespace k8s.io pull zookeeper:3.6.2 sudo ctr image pull --namespace k8s.io …...

VueUse/Core:提升Vue开发效率的实用工具库
文章目录 引言什么是VueUse/Core?为什么选择VueUse/Core?核心功能详解1. 状态管理2. 元素操作3. 实用工具函数4. 浏览器API封装5. 传感器相关 实战示例:构建一个拖拽上传组件性能优化技巧与原生实现对比常见问题解答总结 引言 在现代前端开发…...
数字格式化库 accounting.js的使用说明
accounting.js 是一个用于格式化数字、货币和金额的轻量级库,特别适合财务和会计应用。以下是其详细使用说明: 安装与引入 通过 npm 安装: bash 复制 下载 npm install accounting 引入: javascript 复制 下载 const accounting …...
Docker 网络
目录 前言 1. Docker 网络模式 2. 默认 bridge 网络详解 (1)特点 (2)操作示例 3. host 网络模式 (1)特点 (2)操作示例 4. overlay…...

【论文阅读】A Survey on Multimodal Large Language Models
目录 前言一、 背景与核心概念1-1、多模态大语言模型(MLLMs)的定义 二、MLLMs的架构设计2-1、三大核心模块2-2、架构优化趋势 三、训练策略与数据3-1、 三阶段训练流程 四、 评估方法4-1、 闭集评估(Closed-set)4-2、开集评估&…...
基于多头自注意力机制(MHSA)增强的YOLOv11主干网络—面向高精度目标检测的结构创新与性能优化
深度学习在计算机视觉领域的快速发展推动了目标检测算法的持续进步。作为实时检测框架的典型代表,YOLO系列凭借其高效性与准确性备受关注。本文提出一种基于多头自注意力机制(Multi-Head Self-Attention, MHSA)增强的YOLOv11主干网络结构,旨在提升模型在复杂场景下的目标特征…...

vue3 elementplus tabs切换实现
Tabs 标签页 | Element Plus <template><!-- editableTabsValue 是当前tab 的 name --><el-tabsv-model"editableTabsValue"type"border-card"editableedit"handleTabsEdit"><!-- 这个是标签面板 面板数据 遍历 editableT…...
关于机器学习的实际案例
以下是一些机器学习的实际案例: 营销与销售领域 - 推荐引擎:亚马逊、网飞等网站根据用户的品味、浏览历史和购物车历史进行推荐。 - 个性化营销:营销人员使用机器学习联系将产品留在购物车或退出网站的用户,根据客户兴趣定制营销…...