【Spring Cloud Alibaba】限流--Sentinel
文章目录
- 概述
- 一、Sentinel 是啥?
- 二、Sentinel 的生态环境
- 三、Sentinel 核心概念
- 3.1、资源
- 3.2、规则
- 四、Sentinel 限流
- 4.1、单机限流
- 4.1.1、引入依赖
- 4.1.2、定义限流规则
- 4.1.3、定义限流资源
- 4.1.4、运行结果
- 4.2、控制台限流
- 4.2.1、客户端接入控制台
- 4.2.2、引入依赖
- 4.2.3、定义资源
- 4.2.4、运行结果
- 4.2.5、限流配置
- 4.3、集群限流
- 4.3.1、阿里云AHAS
- 4.3.2、开启阿里云AHAS 服务
- 4.3.3、集群流控规则配置
- 4.3.4、Server 角色转换
- 五、Sentinel 熔断
- 5.1、熔断降级
- 5.2、熔断策略
- 总结
概述
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。 Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
Sentinel具有如下特性:
- 丰富的应用场景:承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀,可以实时熔断下游不可用应用;
- 完备的实时监控:同时提供实时的监控功能。可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况;
- 广泛的开源生态:提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合;
- 完善的 SPI 扩展点:提供简单易用、完善的 SPI 扩展点。您可以通过实现扩展点,快速的定制逻辑。
你来说说什么是限流? 限流的整体概述中,描述了限流是什么,限流方式和限流的实现。给大伙细细讲解一下 Sentinel
一、Sentinel 是啥?
分布式系统的流量防卫兵如图

二、Sentinel 的生态环境
随着 Alibaba 的 Java 生态建设,包括 Spring Cloud Alibaba,Rocket,Nacos等多项开源技术的贡献,目前Sentinel 对分布式的各种应用场景都有了良好的支持和适配,这也是为什么我们选择 Sentinel 学习的原因之一(学习成本低,应用场景多)

三、Sentinel 核心概念
3.1、资源
资源 是 Sentinel 中的核心概念之一。最常用的资源是我们代码中的 Java 方法,一段代码,或者一个接口。
Java方法:
@SentinelResource("HelloWorld")
public void helloWorld() {// 资源中的逻辑System.out.println("hello world");
}
一段代码:
// 1.5.0 版本开始可以直接利用 try-with-resources 特性,自动 exit entry
try (Entry entry = SphU.entry("HelloWorld")) {// 被保护的逻辑System.out.println("hello world");} catch (BlockException ex) {// 处理被流控的逻辑System.out.println("blocked!");}
一个接口:
@RestController
public class TestController {@GetMapping("/test")public String test(){return "test";}
}
配合控制台使用:

3.2、规则
Sentinel 中的规则 提供给用户,针对不同的场景而制定不同的保护动作,规则的类型包括:
- 流量控制规则
- 熔断降级规则
- 系统保护规则
- 来源访问控制规则
- 热点参数规则
本文主要会讲解 流量,熔断 和系统保护这三个规则。
定义规则:
private static void initFlowRules(){List<FlowRule> rules = new ArrayList<>();FlowRule rule = new FlowRule();//绑定资源rule.setResource("HelloWorld");//限流阈值类型rule.setGrade(RuleConstant.FLOW_GRADE_QPS);//数量级别rule.setCount(20);//添加到本地内存rules.add(rule);FlowRuleManager.loadRules(rules);}
限流规则重要属性说明:

四、Sentinel 限流
4.1、单机限流
4.1.1、引入依赖
在上一篇文章中,有提到过 RateLimiter 实现的单机限流, 这里介绍一下,使用 Sentinel 实现的单机限流
//项目中引入 sentinel-core 依赖
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-core</artifactId><version>1.8.1</version>
</dependency>
4.1.2、定义限流规则
定义保护规则:
private static void initFlowRules(){List<FlowRule> rules = new ArrayList<>();FlowRule rule = new FlowRule();//绑定资源rule.setResource("HelloWorld");//限流阈值类型rule.setGrade(RuleConstant.FLOW_GRADE_QPS);//数量级别rule.setCount(20);//添加到本地内存rules.add(rule);FlowRuleManager.loadRules(rules);}
4.1.3、定义限流资源
根据上面描述的 资源划分, 我们这里主要将 代码块 定义为资源。
public static void main(String[] args) {// 配置规则.initFlowRules();while (true) {// 1.5.0 版本开始可以直接利用 try-with-resources 特性,自动 exit entrytry (Entry entry = SphU.entry("HelloWorld")) {// 被保护的逻辑System.out.println("hello world");} catch (BlockException ex) {// 处理被流控的逻辑System.out.println("blocked!");}}
}
4.1.4、运行结果
Demo 运行之后,我们可以在日志 ~/logs/csp/${appName}-metrics.log.xxx 里看到下面的输出:

➜ csp cat com-jaycekon-sentinel-demo-FlowRuleDemo-metrics.log.2021-07-03|--timestamp-|------date time----|-resource-|p |block|s |e|rt
1625294582000|2021-07-03 14:43:02|HelloWorld|20|1720|20|0|2|0|0|0
1625294583000|2021-07-03 14:43:03|HelloWorld|20|5072|20|0|0|0|0|0
1625294584000|2021-07-03 14:43:04|HelloWorld|20|6925|20|0|0|0|0|0
- p 代表通过的请求
- block 代表被阻止的请求
- s 代表成功执行完成的请求个数
- e 代表用户自定义的异常
- rt 代表平均响应时长
Sentinel 的单机限流 ,和 RateLimiter 有什么区别呢?

4.2、控制台限流
4.2.1、客户端接入控制台
Sentinel 提供一个轻量级的开源控制台,它提供机器发现以及健康情况管理、监控(单机和集群),规则管理和推送的功能。
下载Jar 包(21M),或者下载源码(4M) 后自行进行编译(不建议,编译花的时间比直接下载jar包还要久)
https://github.com/alibaba/Sentinel/releases
编译后,启动命令
java -Dserver.port=8000 -Dcsp.sentinel.dashboard.server=localhost:8000 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.1.jar
进入控制台

4.2.2、引入依赖
客户端需要引入 Transport 模块来与 Sentinel 控制台进行通信。您可以通过 pom.xml 引入 JAR 包
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-transport-simple-http</artifactId><version>1.8.1</version>
</dependency>//重要的依赖,还是提前先写上吧,避免小伙伴找不到了
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-web-servlet</artifactId><version>1.8.1</version>
</dependency>
对应的适配依赖有
- 云原生微服务体系
- Web 适配
- RPC 适配
- HTTP client 适配
- Reactive 适配
- Reactive 适配
- Apache RocketMQ
好家伙,基本上所有业务场景都覆盖到了! 由于我的Demo 项目是基于 SpringBoot ,然后想看看 云原生微服务体系下的视频,好家伙,要用 SpringCloud , 想要了解的,可以参考: 《Spring-Cloud-Sentinel》
4.2.3、定义资源
@SpringBootApplication
@Configuration
@RestController
public class SpringBootSentinelApplication {public static void main(String[] args) {SpringApplication.run(SpringBootSentinelApplication.class, args);}@Beanpublic FilterRegistrationBean sentinelFilterRegistration() {FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>();registration.setFilter(new CommonFilter());registration.addUrlPatterns("/*");registration.setName("sentinelFilter");registration.setOrder(1);return registration;}@RequestMapping("/index")public String index(){return "hello index";}}
在概述中,我们有提到过,需要被保护的资源,可以是 一个代码块,一个方法或者一个接口。这里通过 Filter 的 方式,将所有请求都定义为资源 (/*), 那么我们在请求的过程就会变成这样子:

4.2.4、运行结果
添加启动参数
-Dserver.port=8088 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=jaycekon-sentinel
参数说明:
- server.port : 服务启动端口
- csp.sentinel.dashboard.server : 状态上报机器ip:端口
- project.name : 监控项目名称

运行结果:

4.2.5、限流配置

流控效果
- 快速失败:直接失败
- Warm Up:预热模式,根据codeFactory的值(默认3),从阈值/codeFactory,经过预热时长,才达到设置的QPS阈值。比如设置QPS为90,设置预热为10秒,则最初的阈值为90/3=30,经过10秒后才达到90。
- 排队等待:比如设置阈值为10,超时时间为500毫秒,当第11个请求到的时候,不会直接报错,而是等待500毫秒,如果之后阈值还是超过10,则才会被限流。
运行结果:


4.3、集群限流
讲了那么多,终于要到核心的 集群限流方案了, 在秒杀系统设计中,我们谈到很多场景都是以单机作为具体案例进行分析,如果我们的系统要扩容,那么如何做好限流方案。假设集群中有 10 台机器,我们给每台机器设置单机限流阈值为10 QPS,理想情况下整个集群的限流阈值就为100 QPS。不过实际情况下流量到每台机器可能会不均匀,会导致总量没有到的情况下某些机器就开始限流。因此仅靠单机维度去限制的话会无法精确地限制总体流量。而集群流控可以精确地控制整个集群的调用总量,结合单机限流兜底,可以更好地发挥流量控制的效果。
介绍一下集群限流的核心角色:
- Token Client:集群流控客户端,用于向所属 Token Server 通信请求 token。集群限流服务端会返回给客户端结果,决定是否限流。
- Token Server:即集群流控服务端,处理来自 Token Client 的请求,根据配置的集群规则判断是否应该发放 token(是否允许通过)。
在嵌入模式下的结构图:

在独立模式下的结构图:

内嵌模式,即 发Token 的操作,有其中某一个实例完成,其他 Client 通过向 Server 请求,获取访问许可。
独立模式,即作为独立的 token server 进程启动,独立部署,隔离性好,但是需要额外的部署操作。
4.3.1、阿里云AHAS
在上述示例代码中,使用了本地模式的 Demo, 在集群限流的场景,这里用一下 阿里云提供的 AHAS 服务。
控制台地址: https://ahas.console.aliyun.com/index?ns=default®ion=public
引入依赖:
//sentinel ahas 依赖,包括了sentinel的使用依赖
<dependency><groupId>com.alibaba.csp</groupId><artifactId>ahas-sentinel-client</artifactId><version>1.8.8</version>
</dependency>
这里有个要注意的点, AHAS 的依赖,包含了 Sentinel ,所需要使用到的依赖,包括 sentinel-core,sentinel-web-servlet和sentinel-transport-simple-http。
否则会出现 Spi 异常 , 如果对 Spi 不太了解,建议加群提问,嘿嘿~
com.alibaba.csp.sentinel.spi.SpiLoaderException


4.3.2、开启阿里云AHAS 服务
这里有官方的开通文档,我就不赘述了,文档地址
在应用防护这里找到 Lincense ,然后添加启动参数:
-Dserver.port=8092 -Dproject.name=jaycekon-sentinel -Dahas.license=d1e21b0c8f2e4d87b5ac460b118dc58d -Dcsp.sentinel.log.use.pid=true

由于我们要本地启动多实例, 因此需要修改服务的多个端口:
java -Dserver.port=8090 -Dproject.name=jaycekon-sentinel -Dahas.license=d1e21b0c8f2e4d87b5ac460b118dc58d -Dcsp.sentinel.log.use.pid=true -jar sentinel-ahas-0.0.1-SNAPSHOT.jarjava -Dserver.port=8091 -Dproject.name=jaycekon-sentinel -Dahas.license=d1e21b0c8f2e4d87b5ac460b118dc58d -Dcsp.sentinel.log.use.pid=true -jar sentinel-ahas-0.0.1-SNAPSHOT.jarjava -Dserver.port=8092 -Dproject.name=jaycekon-sentinel -Dahas.license=d1e21b0c8f2e4d87b5ac460b118dc58d -Dcsp.sentinel.log.use.pid=true -jar sentinel-ahas-0.0.1-SNAPSHOT.jar
产生访问流量后,可以在大盘看到机器的链接状态:
http://localhost:8092/index

4.3.3、集群流控规则配置

这里有个两个概念:
- 集群阀值:指的是,我们集群总体能通过的访问量,可能存在分配不均的情况(能避免单机误限)。
- 退化单机:当 Token Server 访问超时,即无法从远端获取令牌时,回退到单机限流
测试限流, 只访问 http://localhost:8092/index
通过手刷(手速过硬~),触碰到限流的临界值,然后整体限流跟我们预期一致。

退化单机
在集群流控这里,有个 Token 请求超时时间,Client 请求 Server ,然后返回数据结果。整个流程会有网络请求的耗时,在上面的测试流程中,我将超时时间调大了,每次请求都能拿到Token, 通过修改请求超时时间,触发退化 单机限流 。

运行结果:

4.3.4、Server 角色转换
在内嵌模式下,通过 HTTP API的方式,将角色转换为 Server 或 client
http://<ip>:<port>/setClusterMode?mode=<xxx>
其中 mode 为 0 代表 client,1 代表 server,-1 代表关闭。注意应用端需要引入集群限流客户端或服务端的相应依赖。
在独立模式下,我们可以直接创建对应的 ClusterTokenServer 实例并在 main 函数中通过 start 方法启动 Token Server。
五、Sentinel 熔断
在秒杀系统 的案例中,一个完整的链路可能包含了 下订单,支付 和物流对接等多个服务(实际上不止那么少)。在一个完整的链路中,各个系统通过 rpc/http的形式进行交互,在下面的链路图中,如果用户选择的 支付方式,存在延时过高,服务不稳定,或服务异常等情况,会导致整个链路没办法完成。最终的结果就是,用户明明抢到了,但是没办法支付,导致订单丢失。

现代微服务架构都是分布式的,由非常多的服务组成。不同服务之间相互调用,组成复杂的调用链路。以上的问题在链路调用中会产生放大的效果。复杂链路上的某一环不稳定,就可能会层层级联,最终导致整个链路都不可用。因此我们需要对不稳定的弱依赖服务调用进行熔断降级,暂时切断不稳定调用,避免局部不稳定因素导致整体的雪崩。熔断降级作为保护自身的手段,通常在客户端(调用端)进行配置。
5.1、熔断降级
添加测试代码
@RequestMapping("/myError")public String error(){if (true){throw new RuntimeException("sentinel run error");}return "error";}
在 Sentinel-Dashboard中配置降级规则


降级保护效果:
用户通过访问接口 /myError , 出现一次异常后,在接下来的10秒 ,都会走降级策略,直接返回。能够很好的保护服务端避免异常过多,占用机器资源。同时快速响应用户请求。

5.2、熔断策略
Sentinel 提供以下几种熔断策略:
- 慢调用比例 (SLOW_REQUEST_RATIO):选择以慢调用比例作为阈值,需要设置允许的慢调用 RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断,若大于设置的慢调用 RT 则会再次被熔断。
- 异常比例 (ERROR_RATIO):当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。
- 异常数 (ERROR_COUNT):当单位统计时长内的异常数目超过阈值之后会自动进行熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。
总结
本文主要详细讲解了一下 如何通过 Sentinel 去实际接触 限流和熔断,对于限流的底层实现,后续会有专门的源码分析篇。
相关文章:
【Spring Cloud Alibaba】限流--Sentinel
文章目录 概述一、Sentinel 是啥?二、Sentinel 的生态环境三、Sentinel 核心概念3.1、资源3.2、规则 四、Sentinel 限流4.1、单机限流4.1.1、引入依赖4.1.2、定义限流规则4.1.3、定义限流资源4.1.4、运行结果 4.2、控制台限流4.2.1、客户端接入控制台4.2.2、引入依赖…...
ARM将常数加载到寄存器方法之LDR伪指令
一、是什么? LDR Rd,const伪指令可在单个指令中构造任何32位数字常数,使用伪指令可以生成超过MOV和MVN指令 允许范围的常数. 实现原理: (1)如果可以用MOV或MVN指令构造该常数,则汇编程序会生成适当的指令 (2)如果不能用MOV或MVN指令构造该常数,则汇编程序会执行下列…...
深入理解Gradle构建系统的工作原理
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
STM32F030C8T6输出3路PWM
1,常规套餐 上电初始化 SystemInit(); TIM1_Init(); 2,TIMI1初始化 TIM_TimeBaseInitTypeDef TIM1_TimeBaseStructure; TIM_OCInitTypeDef TIM1_OCInitStructure; NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; //记得打开时钟 RCC_AHBPeriphClo…...
如何理解原型及原型链?js的继承方式
原型与原型链 原型 在js中,每个对象都有一个原型(prototype)。原型是一个对象,其他对象可以通过原型来共享属性和方法。当我们创建一个对象时,它会自动关联到一个原型对象。 例如:function Person(name, a…...
C# 按表格中的某列排序/查询
using System; using System.Data; using System.Linq;class Program {static void Main(){// 创建一个示例的 DataTable 对象DataTable table new DataTable();table.Columns.Add("ID", typeof(int));table.Columns.Add("Name", typeof(string));table.R…...
【Vue】】img使用 :src 动态绑定图片地址,但是加载图片不成功
问题复现: img标签直接动态绑定图片的相对路径的时候,图片不能正常显示。代码如下所示 <view style"margin: 20rpx" v-for"(item, index) in showSampleImage" :key"index"><u-image :src"item.src"…...
list模拟
之前模拟了string,vector,再到现在的list,list的迭代器封装最让我影响深刻。本次模拟的list是双向带头节点的循环链表,该结构虽然看起来比较复杂,但是却非常有利于我们做删除节点的操作,结构图如下。 由于其节点结构特…...
python字典:怎么取出key对应的值
目录 python中的字典是什么 怎么判断key是否在字典中 怎么取出key对应的值 总结 python中的字典是什么 在Python中,字典(Dictionary)是一种无序且可变的数据类型,用于存储键-值(Key-Value)对。字典通过…...
okvis
论文 Keyframe-Based Visual-Inertial SLAM Using Nonlinear Optimization 摘要 由于两种感知模式的互补性,视觉和惯性线索的融合在机器人中变得很流行。虽然迄今为止大多数融合策略都依赖于过滤方案,但视觉机器人界最近转向了非线性优化方法&#x…...
fabric js双击弹出菜单, 双击弹出输入框 修改文字 群组对象
<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>测试1</title><style type"text/css">body {background-color: #ccc;float: left;}#main {background-color: #fff;border: 1px…...
路由器工作原理
路由器原理 路由概述 路由:跨越从源主机到目标主机的一个互联网络来转发数据包的过程。(为数据包选择路径的过程) 作用:路由器是连接不同网段的。 转发依据: 路由表:路径选择全看路由表,根…...
在centos 7系统docker上构建mysql 5.7
一、VM上已经安装centos 7.9,且已完成docker的构建 二、安装mysql5.7 安装镜像:[rootlocalhost lll]# docker pull mysql:5.7 查看镜像[rootlocalhost lll]# docker images 根据镜像id构建mysql容器,且分配端口号[rootlocalhost lll]# dock…...
数据库的介绍和分类
目录 一、数据库的介绍和分类 二、命令行客户端 三、数据操作 四、查询的基本操作 五、条件查询 六、分组和聚合 资料获取方法 一、数据库的介绍和分类 数据库:长期存储在计算机内、有组织的数据集合 数据库的分类: 关系型数据库 以表格的形式…...
职责链模式——请求的链式处理
1、简介 1.1、概述 很多情况下,在一个软件系统中可以处理某个请求的对象不止一个。例如SCM系统中的采购单审批,主任、副董事长、董事长和董事会都可以处理采购单,他们可以构成一条处理采购单的链式结构。采购单沿着这条链进行传递ÿ…...
docker中涉及的挂载点总结
文章目录 1.场景描述2. 容器信息在主机上位置3. 通过docker run 命令4、通过Dockerfile创建挂载点5、容器共享卷(挂载点)6、最佳实践:数据容器 1.场景描述 在介绍VOLUME指令之前,我们来看下如下场景需求: 1ÿ…...
elasticsearch 官方优化建议
.一般建议 a.不要返回过大的结果集。这个建议对一般数据库都是适用的,如果要获取大量结果,可以使用search_after api,或者scroll (新版本中已经不推荐)。 b.避免大的文档。 2. 如何提高索引速度 a.使用批量请求。为了…...
Kubernetes(K8s)从入门到精通系列之五:K8s的基本概念和术语之应用类
Kubernetes K8s从入门到精通系列之五:K8s的基本概念和术语之应用类 一、Service与Pod二、Label与标签选择器三、Pod与Deployment四、Service的ClusterIP地址五、Service的外网访问问题六、有状态的应用集群七、批处理应用八、应用配置问题九、应用的运维一、Service与Pod Ser…...
DevOps(四)
CD(二) 1. CDStep 1 - 上传代码Step 2 - 下载代码Step 3 - 检查代码Step 4 - 编译代码Step 5 - 上传仓库Step 6 - 下载软件Step 7 - 制作镜像Step 8 - 上传镜像Step 9 - 部署服务2. 整体预览2.1 预览1. 修改代码2. 查看sonarqube检查结果3. 查看nexus仓库4. 查看harbor仓库5.…...
Element-plus侧边栏踩坑
问题描述 el-menu直接嵌套el-menu-item菜单,折叠时不会出现文字显示和小箭头无法隐藏的问题,但是实际开发需求中难免需要把el-menu-item封装为组件 解决 vue3项目中嵌套两层template <template><template v-for"item in list" :k…...
Midjourney盐印相风格实战手册(附12组可复用Prompt模板+SDXL交叉验证数据)
更多请点击: https://kaifayun.com 第一章:Midjourney盐印相风格的视觉溯源与美学内核 盐印相(Salted Paper Print)是19世纪早期摄影术诞生之初的核心工艺,由亨利福克斯塔尔博特于1839年系统完善。其本质是将纸基浸入…...
IDM激活脚本:破解30天限制背后的注册表权限技术内幕
IDM激活脚本:破解30天限制背后的注册表权限技术内幕 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script 你是否曾经因为IDM的30天试用期到期而烦恼&#…...
Servlet 容器与过滤器 超详细讲解
目录 一、Servlet 容器(Servlet Container) 1. 是什么? 2. 核心作用(必须掌握) 3. Servlet 生命周期(容器全权控制) 4. 工作流程(HTTP 请求完整链路) 5. 总结一句话 二、过滤器(Filter) 1. 是什么? 2. 核心特点 3. 过滤器能做什么?(高频场景) 4. 过滤…...
全学科适用AI写作辅助软件排名(2026 精选)
基于功能完整性、学术适配性、用户满意度和操作便捷性,以下是当前主流AI论文写作工具的权威测评结果,按综合使用价值从高到低排序,并详细说明各工具的核心优势与适用领域。🏆 第一梯队:全流程学术解决方案(…...
具身智能(Embodied AI):当 Agent 拥有了物理世界的身体
具身智能(Embodied AI):当Agent拥有了物理世界的身体,下一个十年的科技革命? 一、引言 (Introduction) 钩子 (The Hook) 你有没有过这样的幻想:下班回家推开门,AI机器人已经做好了你爱吃的糖醋排骨,把换下来的脏衣服扔进了洗衣机,甚至还帮你把刚到的快递拆好了?过去…...
PX4固件编译避坑指南:自定义机型后如何正确生成airframe_metadata并更新QGC
PX4固件编译避坑指南:自定义机型后如何正确生成airframe_metadata并更新QGC 当你花费数小时精心设计了一个全新的无人机机型,修改完所有参数并准备在QGroundControl(QGC)中测试时,却发现地面站无法识别你的自定义机型—…...
渝中区宜居、 韧性、智慧城市建设“十五五”规划(征求意见稿) 2026
这份《渝中区宜居、韧性、智慧城市建设 “十五五” 规划(征求意见稿)》,立足渝中区 “重庆母城、都市极核、品质半岛、首善之区” 定位,总结 “十四五” 成效、分析机遇挑战,明确 2026—2030 年总体目标、核心任务与保…...
Wand-Enhancer终极指南:一键解锁WeMod完整功能
Wand-Enhancer终极指南:一键解锁WeMod完整功能 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 还在为WeMod免费版的诸多限制而烦恼吗&#x…...
不止于配置:用Qt给周立功CAN卡写个简易数据收发测试工具(附源码)
从零构建Qt版CAN数据收发测试工具:周立功硬件实战指南 在嵌入式开发领域,CAN总线调试是工程师日常工作中的高频需求。当我们需要验证硬件连接是否正常、测试通信质量或快速检查数据流时,一个轻量级的图形化测试工具能极大提升工作效率。本文将…...
华为设备上MQC实战:用流策略搞定网络流量路径规划(含ACL+OSPF联动)
华为设备MQC高级应用:动态路由环境下的智能流量路径规划 在复杂的企业网络环境中,流量路径规划往往成为网络工程师面临的核心挑战之一。当网络中存在多条等价路径时,传统的路由协议(如OSPF)会基于简单的哈希算法进行负…...
