微服务保护——Sentinel
什么是微服务保护?
微服务保护是一系列用于保障微服务架构稳定、可靠运行的策略与技术手段,在复杂的分布式微服务系统里,它能避免局部故障引发连锁反应,从而维持整个系统的可用性,主要涵盖以下几个关键部分:
- 请求限流
- 原理:限制进入微服务系统或某个具体微服务实例的流量速率。例如,设定每秒最多处理 1000 个请求,当请求量即将超过该阈值时,会直接拒绝多余请求。
- 作用:防止突发大流量冲垮服务,确保系统资源能合理分配,从容应对正常流量负载,像电商促销场景,大量用户集中访问下单服务,限流可避免服务瘫痪。
- 服务熔断
- 原理:实时监测微服务间的调用链路,当某个被调用的下游服务频繁出现错误(如超时、异常返回等),达到一定失败比例,调用方会 “熔断” 与它的连接,暂时不再发起调用,直接返回预设的兜底数据 。
- 作用:避免故障服务持续拖累调用方,把故障隔离在局部,举例来说,若商品推荐服务依赖的库存查询服务崩溃,熔断机制下,推荐服务能快速切断调用链路,继续为用户展示部分可用内容。
- 服务降级
- 原理:在系统面临高压力,资源紧张时,有计划地舍弃部分非核心功能或降低服务质量。比如,关闭某些耗费资源的个性化推荐模块,只提供通用推荐列表。
- 作用:保障核心业务流程的流畅,牺牲次要功能来维持系统基本运转,确保多数用户的关键诉求能得到满足。
- 负载均衡
- 原理:把外部请求均匀分发给多个微服务实例。常见的算法包括轮询、加权轮询、随机等,像轮询就是按顺序依次将请求分配到各个实例。
- 作用:避免单个实例因接收过多请求而过载,充分利用集群里的所有实例资源,提升整体吞吐能力 。
- 容错处理
- 原理:微服务调用出现错误时,通过重试、补偿事务等机制,努力让流程继续推进。例如,一次数据库写入失败,在一定次数内重试写入。
- 作用:增强系统应对各类异常状况的韧性,减少因临时性错误导致的业务中断,提升用户体验。
微服务保护避免了哪些问题?
- 雪崩效应
- 问题描述:在微服务体系里,服务间调用关系错综复杂,一旦某个基础服务出现故障,比如频繁超时或持续返回错误,调用它的上游服务会因等待响应而占用大量资源。随着越来越多上游服务受牵连,资源耗尽会让更多服务不可用,最终整个系统如同雪崩般瘫痪。
- 避免方式:熔断机制在检测到下游服务错误率过高时,迅速切断调用链路,让上游服务直接返回兜底数据,避免无意义等待,将故障隔离在局部,防止故障传播引发雪崩。例如,支付服务依赖的风控服务出现大量超时,支付服务熔断对风控服务的调用,不影响支付流程继续处理常规订单。
- 服务过载
- 问题描述:面对突发的流量高峰,例如电商平台限时抢购、热门事件引发的流量井喷,微服务可能接收远超处理能力的请求数量,导致响应时间急剧拉长,资源(CPU、内存等)被过度消耗,后续正常流量也无法妥善处理。
- 避免方式:限流策略限定进入微服务的流量速率,只处理预设范围内的请求,拒绝多余的流量,确保服务资源合理分配,维持基本的响应性能。像某社交平台突发热点话题,帖子详情查看服务设置每秒 1 万次请求的限流,避免被海量请求拖垮。
- 级联故障
- 问题描述:微服务 A 调用微服务 B,B 又调用微服务 C,若 C 出现问题,B 可能因无法获取正确数据而产生错误输出,进一步导致 A 出现异常,一连串的异常在服务链路里不断传递,扩大故障影响范围。
- 避免方式:熔断、降级以及容错处理协同发挥作用。熔断及时断开故障链路;降级舍弃部分非核心功能,保证核心链路畅通;容错处理利用重试、补偿事务等手段修复可能的异常环节,中断级联故障的发展。例如,内容展示服务依赖图片处理服务,图片服务出问题时,内容服务降级只展示文字内容,避免自身崩溃。
- 资源耗尽
- 问题描述:不合理的服务调用关系或者无限循环的业务逻辑,可能使得微服务不断申请新的资源,例如持续开启新线程处理任务,最终耗尽系统的内存、CPU 等关键资源,让整个系统陷入停滞。
- 避免方式:负载均衡将请求均匀分散到多个微服务实例,避免单个实例因过度请求而无节制消耗资源;同时,线程池隔离等技术确保每个服务调用占用合理的资源份额,防止资源耗尽。如电商下单服务有多个实例,负载均衡器合理分配请求,各个实例有序处理,不会某一个实例因过多订单请求把资源耗尽。
- 服务质量下降
- 问题描述:系统长期处于高负载或局部故障频发状态,即使勉强维持运行,也会造成响应延迟、数据准确性降低等情况,严重影响用户体验。
- 避免方式:降级策略主动舍弃部分对体验影响较小的功能,集中精力保障核心功能的响应速度与准确性,容错机制也修复小的异常,维持稳定的服务质量。比如,视频平台在网络拥堵时,降低视频分辨率这一非核心功能的优先级,优先保障视频流畅播放。
具体实现——Sentinel
Sentinel安装与使用
Sentinel 是阿里巴巴开源的一款面向分布式服务架构的轻量级流量控制与熔断降级框架,在保障微服务系统稳定、可靠运行方面表现出色。
Sentinel 的使用可以分为两个部分:
- 核心库(Java 客户端):不依赖任何框架/库,能够运行于 Java 8 及以上的版本的运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。
- 控制台(Dashboard):Dashboard 主要负责管理推送规则、监控、管理机器信息等。
1.搭建控制台
1.1.下载jar包
下载地址:Sentinel控制台下载地址https://github.com/alibaba/Sentinel/releases
1.2.运行
把下载下来的jar包放在一个没有中文的目录下打开CMD用以下命令运行:
java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
其它启动时可配置参数可参考官方文档:
Sentinel启动配置项https://github.com/alibaba/Sentinel/wiki/%E5%90%AF%E5%8A%A8%E9%85%8D%E7%BD%AE%E9%A1%B9
1.3.访问
访问http://localhost:8090页面,就可以看到sentinel的控制台了
账号和密码默认都是sentinel,登录之后就可以看到sentinel的控制台了,默认sentinel健康的就是自己。
2.微服务整合Sentinel
我们在需要进行微服务保护的微服务模块中整合sentinel,连接Sentinel-dashboard控制台
2.1.导入依赖
<!--sentinel-->
<dependency><groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
注意:这里没有加版本号是因为我们在父模块中添加了对cloud的管理
...省略其他配置<properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><org.projectlombok.version>1.18.20</org.projectlombok.version><spring-cloud.version>2021.0.3</spring-cloud.version><spring-cloud-alibaba.version>2021.0.4.0</spring-cloud-alibaba.version><mybatis-plus.version>3.5.5</mybatis-plus.version><hutool.version>5.8.11</hutool.version><mysql.version>8.0.23</mysql.version></properties><!-- 对依赖包进行管理 --><dependencyManagement><dependencies><!--spring cloud--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><!--spring cloud alibaba--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency><!-- 数据库驱动包管理 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!-- mybatis plus 管理 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus.version}</version></dependency><!--hutool工具包--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>${hutool.version}</version></dependency></dependencies></dependencyManagement><dependencies><!-- lombok 管理 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${org.projectlombok.version}</version></dependency><!--单元测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>...省略其他配置
2.2.配置控制台
在application.yaml中添加以下内容:
spring:cloud: sentinel:transport:dashboard: localhost:8090
2.3.访问测试
重启该微服务模块,并访问该微服务的任意端点,比如:我访问的是购物车模块:
在刷新Sentinel控制台之后,可以看到多出来了一个购物车模块。
点击簇点链路菜单查看:
所谓簇点链路,就是单机调用链路,是一次请求进入服务后经过的每一个被Sentinel监控的资源。默认情况下,Sentinel会监控Spring MVC的每一个接口。
因此,我们看到/cars这个接口路径就是其中一个簇点,我们可以对其进行限流、熔断、隔离等保护措施。
注意:我们的SpringMVC接口是按照Restful风格设计,默认情况下Sentinel会把路径作为簇点资源的名称,无法区分路径相同但请求方式不同的接口,查询、删除、修改等都被识别为一个簇点资源,这显然是不合适的。
所以我们可以选择打开Sentinel的请求方式前缀,把请求方式+请求路径作为簇点资源名:
首先,在购物车模块的application.yaml中添加下面的配置:
spring:cloud:sentinel:transport:dashboard: localhost:8090http-method-specify: true # 开启请求方式前缀
然后,重启服务,通过页面访问购物车的相关接口,可以看到sentinel控制台的簇点链路发生了变化:
1.请求限流
在簇点链路后面点击流控按钮,即可对其做限流配置,比如我们对购物车的查询接口进行操作:
在弹出的菜单中填写如图内容:
这样就把查询购物车列表这个簇点资源的流量限制在了每秒10个,也就是最大QPS为10。
由于我们一秒钟不能刷新10次,所以我们通过Jemeter工具进行测试:
添加配置:
启动测试:
查看结果树:
可以看到我们的请求有些是能够访问的,有些是访问失败的
查看Sentinel控制台:
在这里我们可以很清楚的看到通过和拒绝的请求, 并且还有请求的响应时间,这就更加利于我们对微服务的监控和保护。
2.线程隔离
虽然限流可以降低服务器压力,尽量减少因并发流量引起的服务故障的概率,但并不能完全避免服务故障。一旦某个服务出现故障,我们必须隔离对这个服务的调用,避免发生雪崩。
比如,查询购物车的时候需要查询商品,为了避免因商品服务出现故障导致购物车服务级联失败,我们可以把购物车业务中查询商品的部分隔离起来,限制可用的线程资源:
这样,即便商品服务出现故障,最多导致查询购物车业务故障,并且可用的线程资源也被限定在一定范围,不会导致整个购物车服务崩溃。
所以,我们要对查询商品做线程隔离。
1.OpenFeign整合Sentinel
feign:sentinel:enabled: true # 开启feign对sentinel的支持
注意:我们因为需要测试Tomcat的请求被打满的场景,但是默认情况下SpringBoot项目的tomcat最大线程数是200,允许的最大连接是8492,单机测试很难打满,所以我们需要配置一下cart-service模块的application.yml文件,修改tomcat连接:
server:port: 8082tomcat:threads:max: 50 # 允许的最大线程数accept-count: 50 # 最大排队等待数量max-connections: 100 # 允许的最大连接
为查询商品添加500毫秒的延迟,模拟网络延迟
重启服务查看Sentinel控制台可以看到,查询购物车下的查询商品变成了一个簇点资源,我们也可以对查询商品进行对应的配置:
2.配置线程隔离
2.1.限制查询商品的并发线程数
这里设置的并发线程数为5表示的是如果一秒钟能处理2次请求,那5个线程一秒钟的处理请求数就是10左右,超出的请求就会直接拒绝。
3.测试
利用Jemeter测试,每秒发送100个请求:
最终的结果是:
在这50秒内,我们去访问购物车的其他接口,比如添加商品,修改商品数量,可以看到并不会受到查询购物车接口的影响:
在服务隔离中我们对查询购物车业务进行隔离,保护了购物车服务的其它接口,我们通过给查询商品加了500毫秒的延迟,模拟网络延迟,达到了我们想要测试的效果:QPS为10左右,但是这样就会有几个问题:
1.超出的QPS上限的请求就只能抛出异常,从而导致购物车的查询失败,直接显示失败,这样对客户的体验不是很好,所以就算我们没有查询商品成功,也要显示购物车给客户查看,提高客户体验,解决方案:给查询失败设置一个降级处理逻辑。
2.由于查询商品的延迟较高,从而导致查询购物车的响应时间也变的很长,这样不仅拖慢了购物车服务,消耗了购物车服务的更多资源,而且客户体验也很差,对于商品服务这种不太健康的接口,我们应该直接停止调用,直接走降级逻辑,避免影响到当前服务,解决方案:将商品查询接口熔断。
3.服务降级
3.1.编写降级逻辑
在我们的请求触发限流或者是降级逻辑的时候,不一定要直接报错,我们也可以返回一些默认数据或者友好提示,这样用户体验会更好。
降级逻辑主要有两种方式:
1.FallbackClass,无法对远程调用的异常做处理。
2.FallbackFactory,可以对远程调用的异常做处理,我们一般选择这种方式。
这里演示第二种方式,因为,查询购物车接口,涉及到查询商品,商品是一个单独的微服务模块,他们两个是通过OpenFeign进行网络通信的。
3.1.1.为ItemClient接口,编写降级处理类
这里我把网络通信相关的部分提取到了一个微服务模块中,所以在这个模块下添加:
3.1.2.将ItemClientFallbackFactory注册为bean
3.1.3.在ItemClient接口中使用ItemClientFallbackFactory
3.2.重启服务设置Sentinel规则,进行测试
可以看到,当我们设置了服务降级逻辑之后,被限流的请求并没返回失败,而是返回了旧数据,正确的请求,则是返回的是查询到的数据,但是,还是有一个问题,就是我们上面所提到的购物车服务延迟过高。
4.服务熔断
因为购物车服务的查询商品的响应时间较高(这里通过设置500ms的延迟来模拟),所以这样就会导致购物车服务的响应时间也变高了,这样就拖垮了购物车服务,造成浪费购物车服务的更多资源,而且客户的体验也很差,所以我们就要通过服务熔断,对于这种响应时间很慢的服务进行熔断,直接让他走服务降级逻辑避免影响到当前服务,当商品服务接口恢复正常后,再允许调用。
Sentinel中的断路器不仅可以统计某个接口的慢请求比例,还可以统计异常请求比例。当这些比例超出阈值时,就会熔断该接口,即拦截访问该接口的一切请求,降级处理;当该接口恢复正常时,再放行对于该接口的请求。
断路器的工作状态:
-
closed:关闭状态,断路器放行所有请求,并开始统计异常比例、慢请求比例。超过阈值则切换到open状态
-
open:打开状态,服务调用被熔断,访问被熔断服务的请求会被拒绝,快速失败,直接走降级逻辑。Open状态持续一段时间后会进入half-open状态
-
half-open:半开状态,放行一次请求,根据执行结果来判断接下来的操作。
-
请求成功:则切换到closed状态
-
请求失败:则切换到open状态
-
4.1.配置熔断规则
配置解释:
-
RT超过200毫秒的请求调用就是慢调用
-
统计最近1000ms内的最少5次请求,如果慢调用比例不低于0.5,则触发熔断
-
熔断持续时长5s
4.2.使用Jemeter测试
可以通过上图看到,配置了服务熔断之后的RT时长大大缩减了,因为我们为购物车的查询商品设置了500ms的延迟大于我们配置的熔断规则,所以购物车服务就被断路器统计慢请求比例,直接走服务降级快速返回默认值,大大的提升了服务的性能。
相关文章:
微服务保护——Sentinel
什么是微服务保护? 微服务保护是一系列用于保障微服务架构稳定、可靠运行的策略与技术手段,在复杂的分布式微服务系统里,它能避免局部故障引发连锁反应,从而维持整个系统的可用性,主要涵盖以下几个关键部分:…...
php 多进程那点事,用 swoole 如何解决呢 ?
在 PHP 中,多进程的处理通常会遇到一些挑战,比如资源共享、进程间通信、性能优化等。Swoole 是一个高性能的协程和多进程框架,旨在为 PHP 提供异步、并发、协程等功能,解决了传统 PHP 环境中的多进程管理问题。通过使用 Swoole&am…...
STM32+ADC+DMA快速循环转换
测试平台:STM32F405RGT6 uint32_t AD_Buf[100]{0}; HAL_ADC_Start_DMA(&hadc2,(uint32_t *)AD_Buf,100); while(1) {printf("AD_Buf:%d\n",AD_Buf[0]); }...
移动电商的崛起与革新:以开源AI智能名片2+1链动模式S2B2C商城小程序为例的深度剖析
摘要:本文旨在探讨移动电商的崛起背景、特点及其对传统电商模式的革新影响,并以开源AI智能名片21链动模式S2B2C商城小程序为具体案例,深入分析其在移动电商领域的创新实践。随着移动互联网技术的飞速发展,移动电商已成为电商行业的…...
QT实现 端口扫描暂停和继续功能 3
上篇QT给端口扫描工程增加线程2-CSDN博客 为按钮pushButton_Stop添加clicked事件,功能为暂停扫描,并在暂停后显示继续按钮,点击继续按钮之后继续扫描 1.更新UI 添加继续按钮 点击转到槽则会自动声明 2. 更新 MainWindow.h 需要新增的部分…...
C_字符数组存储汉字字符串及其索引
字符串就是字符数组,可以定义一个char类型的数组来存储字符串。 如果要存储多个字符串则可以定义一个char类型的二维数组。 存储多个汉字字符串的话,可以考虑用char类型的二维数组。 不过要注意,一个汉字在内存中占用的字节数确实大于一个…...
Linux标准IOday1
1:思维导图 2:将 student.c这个练习题,改成链表后实现 头文件link.h #ifndef __STRUCT_H__ #define __STRUCT_H__ #include <stdio.h> #include <stdlib.h> typedef struct Student{char name[20];double math;double chinese;double english;double…...
SEO内容优化:如何通过用户需求赢得搜索引擎青睐?
在谷歌SEO优化中,内容一直是最重要的因素之一。但要想让内容真正发挥作用,关键在于满足用户需求,而不是简单地堆砌关键词。谷歌的算法越来越智能化,更注重用户体验和内容的实用性。 了解目标用户的需求。通过工具如Google Trends…...
API调用淘宝京东商品详情接口示例参考,json格式数据示例
以下是API调用淘宝和京东商品详情接口的JSON格式数据示例: 淘宝商品详情接口JSON数据示例 淘宝商品详情接口(通常称为item_get或类似的名称)是淘宝开放平台提供的一个API接口,允许开发者根据商品的ID(Item ID&#x…...
css实现垂直文本
效果 知识 writing-mode: <value>; 可选值 horizontal-tb: 默认值。文本从左到右(或从右到左)排列,然后从上到下。vertical-rl: 文本从上到下排列,然后从右到左。适用于垂直书写的方向,如日语和中文。vertica…...
【AI日记】25.01.07
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 AI 参加:kaggle 比赛 Forecasting Sticker Sales 读书 书名:国家为什么会失败阅读原因:2024 年诺贝尔经济学奖得主的力作,之前我已经读过他另一…...
logback日志
一、使用两个以上spring环境变量做三目操作 <springProperty name"application_name" scope"context" source"spring.application.name"/><springProperty name"trace_app_name" scope"context" source"sprin…...
Android NDK开发入门3之基本语法
JNI语法基础 函数生成语法: extern “ C” 作⽤:避免编绎器按照C的⽅式去编绎C函数 1、C不⽀持函数的重载,编译之后函数名不变; 2、C⽀持函数的重载(这点与Java⼀致),编译之后函数名会改变…...
unity学习9:unity的Asset 导入和导出
目录 1 Assets 资产/资源 1.1 编辑器里Assets 和explorer文件夹 里一一对应 1.2 在编辑器里操作,和文件夹内操作,多数相同还是有些不同 2 往Assets里导入零散文件 2.1 往Assets里导入零散文件 2.2 把fbx文件导入到hierarcy /scene 里,…...
Unity学习笔记(七)使用状态机重构角色攻击
前言 本文为Udemy课程The Ultimate Guide to Creating an RPG Game in Unity学习笔记 攻击状态重构 首先我们重构攻击状态的动画 之前的动画,我们是使用状态(isAttacking)攻击次数(comboCounter)完成动画的过渡,这样虽然能完成功能,但是如…...
【整理集合大全】MySQL(4) 数据库增删改查SQL语句
查看数据库 show databases; 使用数据库 use 数据库名;创建数据库 CREATE DATABASE 数据库名;删除数据库 DROP DATABASE 数据库名;创建表 create table 表名(列名1 类型(长度) [约束],列名2 类型(长度) [约束],…… );长度区别 int类型带长度:不影响存取值&…...
Flutter 鸿蒙化 flutter和鸿蒙next混和渲染
前言导读 这一个节课我们讲一下PlatformView的是使用 我们在实战中有可能出现了在鸿蒙next只加载一部分Flutter的情况 我们今天就讲一下这种情况具体实现要使用到我们的PlatformView 效果图 具体实现: 一、Native侧 使用 DevEco Studio工具打开 platform_view_example\oho…...
Flask返回浏览器无乱码方法
# -*- coding: utf-8 -*- from flask import Flask, request, jsonify, Response import os import json import re from datetime import datetime import logging import sys import crawling_web_knowledgeapp Flask(__name__)app.json.ensure_ascii False # 解决中文乱码…...
Tauri教程-基础篇-第二节 Tauri的核心概念下篇
“如果结果不如你所愿,就在尘埃落定前奋力一搏。”——《夏目友人帐》 “有些事不是看到了希望才去坚持,而是因为坚持才会看到希望。”——《十宗罪》 “维持现状意味着空耗你的努力和生命。”——纪伯伦 Tauri 技术教程 * 第四章 Tauri的基础教程 第二节…...
直播预告|StarRocks 3.4,打造 AI 时代的智能数据基座,应用场景全面扩展
随着新年的到来,StarRocks 3.4 即将上线,为 AI Workload 和更多应用场景提供强大支持!此次升级聚焦于提升 AI 场景支持,并扩展更多应用场景,全方位提升数据分析体验。 更强的 AI 场景支持: 引入 Vector In…...
Maven的基本使用
Maven apache 旗下的开源项目,是一款用于管理构建Java的项目的工具 一 作用 1依赖管理:管理jar包,避免依赖冲突 2统一项目结构 : 3项目构建: 二 安装 下面是全球唯一的中央仓库 https://repo1.maven.org/maven2…...
【深度学习入门_基础篇】线性代数本质
开坑本部分主要为基础知识复习,新开坑中,学习记录自用。 学习目标: 熟悉向量、线性组合、线性变换、基变换、矩阵运算、逆函数、秩、列空间、零空间、范式、特征指、特征向量等含义与应用。 强烈推荐此视频: 【官方双语/合集】…...
数据库模型全解析:从文档存储到搜索引擎
目录 前言1. 文档存储(Document Store)1.1 概念与特点1.2 典型应用1.3 代表性数据库 2. 图数据库(Graph DBMS)2.1 概念与特点2.2 典型应用2.3 代表性数据库 3. 原生 XML 数据库(Native XML DBMS)3.1 概念与…...
LED背光驱动芯片RT9293应用电路
一)简介: RT9293 是一款高频、异步的 Boost 升压型 LED 定电流驱动控制器,其工作原理如下: 1)基本电路结构及原理 RT9293的主要功能为上图的Q1. Boost 电路核心原理:基于电感和电容的特性实现升压功能。当…...
Ubuntu挂载云盘操作步骤
1. 查看磁盘分区情况 使用 fdisk -l 命令查看当前系统中所有磁盘的分区情况,找到需要挂载的云盘设备,例如/dev/vdc。 2. 创建新分区 使用 fdisk /dev/vdc 命令对云盘进行分区操作: 输入n创建新分区。 输入p选择创建主分区。 输入1指定分区…...
【中间件】docker+kafka单节点部署---zookeeper模式
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言消息中间件介绍1. KRaft模式2. zookeeper模式2.1. 单节点部署安装验证 前言 最近生产环境上准备部署ELFK日志监控,先在测试环境部署单节点kafka验证…...
Arduino IDE刷微控制器并下载对应固件的原由
在使用Arduino IDE刷写某个微控制器时,下载对应的固件通常是为了确保微控制器能够正确识别和执行Arduino IDE中编写的代码。以下是对这一过程的详细解释: 一、固件的作用 固件是微控制器或嵌入式设备上运行的软件,它负责控制硬件设备的操作…...
深兰科技董事长陈海波应邀为华东师大心理学专业师生做AI专题讲座
12月28日,应上海华东师范大学的邀请,上海市科协常委、上海交通大学博士生导师、深兰科技创始人兼董事长陈海波专程到校,为该校心理学专业的全体师生做了一场关于人工智能推动个人数字化未来的专题讲座。 他在演讲中,首先详细讲述了…...
iOS - 引用计数(ARC)
1. 基本数据结构 // 对象结构 struct objc_object {isa_t isa; // isa 指针,包含引用计数信息 };// isa 的位域结构 union isa_t {uintptr_t bits;struct {uintptr_t nonpointer : 1; // 是否启用优化的 isa 指针uintptr_t has_assoc : 1; // 是…...
【物联网原理与运用】知识点总结(上)
目录 名词解释汇总 第一章 物联网概述 1.1物联网的基本概念及演进 1.2 物联网的内涵 1.3 物联网的特性——泛在性 1.4 物联网的基本特征与属性(五大功能域) 1.5 物联网的体系结构 1.6 物联网的关键技术 1.7 物联网的应用领域 第二章 感知与识别技术 2.1 …...
Flux“炼丹炉”——fluxgym安装教程
一、介绍 这个炼丹炉目前可以训练除了flux-dev之外的其它模型,只需更改一个配置文件内容即可。重要的是训练时不需要提前进行图片裁剪、打标等前置工作,只需下图的三个步骤即可开始训练。它就是——fluxgym。 fluxgym:用于训练具有低 VRAM &…...
【Jsoncpp】manipulating JSON data in C++
源代码 #include <iostream> // 引入输入输出流库,用于标准输入输出操作 #include <fstream> // 引入文件流库,用于文件读写操作 #include <json/json.h> // 引入JSON库,用于解析和操作JSON数据using namespace std; …...
Ardupilot开源无人机之Geek SDK进展2024
Ardupilot开源无人机之Geek SDK进展202501 1. 源由2. 状态3. TODO3.1 跟踪目标框3.2 onnxruntime版本3.3 CUDA 11.8版本3.4 pytorch v2.5.1版本3.5 Inference性能3.6 特定目标集Training 4. 参考资料 1. 源由 前期搭建《Ardupilot开源无人机之Geek SDK》,主要目的是…...
肝了半年,我整理出了这篇云计算学习路线(新手必备,从入门到精通)
大家好!我是凯哥,今天给大家分享一下云计算学习路线图。这是我按照自己最开始学习云计算的时候的学习路线,并且结合自己从业多年所涉及的知识精心总结的云计算的思维导图。这是凯哥精心总结的,花费了不少精力哦,希望对…...
配置数据的抗辐照加固方法
SRAM 型FPGA 的配置存储器可以看成是由0 和1 组成的二维阵列,帧的高度为矩阵阵列的高度,相同结构的配置帧组成配置列,如CLB 列、IOB 列、输入输出互联(Input Output Interconnect,IOI)列、全局时钟(Global Clock, GCLK)列、BRAM 列和BRAM 互联…...
【linux系统之redis6】处理可视化工具无法连接服务器端的redis
redis跑在虚拟机上的linux系统是可以正常的,但是用宿主机的可视化工具链接就连不上 可视化工具无法连接 问题排查 确保配置文件开启了bind 0.0.0.0,允许外部任何终端的链接密码确保正确要关闭linux系统的防火墙(我的属于这种) systemctl stop firewalld.servic…...
云计算操作系统的核心-OpenStack框架全解析
文章目录 一、OpenStack简介二、OpenStack架构1.认证服务Keystone2.镜像服务Glance3.计算服务Nova4.块存储服务Clinder5.对象存储服务Swift6.网络服务Neutron7.计量服务Ceilometer 三、服务简介3.1 OpenStack界面管理3.2 Keystone 认证3.3 Glance3.3 Nova3.4 存储服务3.5 Neutr…...
【设计模式-2】23 种设计模式的分类和功能
在软件工程领域,设计模式是解决常见设计问题的经典方案。1994 年,Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides(四人帮,GoF)在《设计模式:可复用面向对象软件的基础》一书中系统性地总结了…...
记录一下Coding一直不能clone
配置 下载git客户端,进行配置 git config --list user.name姓名全称 user.emailIAM_xxxxxx.com ,这个就是你的邮箱地址 user.signingkey 注册coding平台的密码 一般不需要配置公钥私钥 下载TortoiseGit,配置这几个参数 配置凭据管理器 注意 这里用户名是…...
Backend - C# EF Core 执行迁移 Migrate
目录 一、创建Postgre数据库 二、安装包 (一)查看是否存在该安装包 (二)安装所需包 三、执行迁移命令 1. 作用 2. 操作位置 3. 执行(针对visual studio) 查看迁移功能的常用命令: 查看…...
检索增强生成 和思维链 结合: 如何创建检索增强思维链 (RAT)?
论文地址:https://arxiv.org/pdf/2403.05313 Github地址:https://github.com/CraftJarvis/RAT 想象一下,一个人工智能助手可以像莎士比亚一样写作,像专家一样推理。这听起来很了不起,对吧?但是࿰…...
第四届电子信息与通信工程国际学术会议(EICE 2025)
第四届电子信息与通信工程国际学术会议(EICE 2025)定于2025年1月10日至12日在中国广州举行。大会交流全球相关领域科技学术最新发展趋势,链接重点领域国内外顶尖、活跃、最新学术资源,通过经验分享和智慧碰撞,推动科研…...
Hbuilder ios 离线打包sdk版本4.36,HbuilderX 4.36生成打包资源 问题记录
1、打包文档地址https://nativesupport.dcloud.net.cn/AppDocs/usesdk/ios.html#%E9%85%8D%E7%BD%AE%E5%BA%94%E7%94%A8%E7%89%88%E6%9C%AC%E5%8F%B7 2、配置应用图标 如果没有appicon文件,此时找到 Assets.xcassets 或者 Images.xcassets(看你sdk引入的启动文件中…...
HarmonyOS开发:传参方式
一、父子组件传参 1、父传子(Prop方式) 父组件代码 Entry Component struct ParentComponent {State parentMessage: string Hello from Parent;build() {Column() {ChildComponent({ message: this.parentMessage });}} } 子组件代码 Component s…...
Tomcat(116) 如何在Tomcat中解决缓存问题?
在Tomcat中解决缓存问题涉及多个方面的优化和处理,包括优化缓存配置、监控缓存状态、处理缓存失效和一致性问题等。以下是详细的步骤和代码示例,帮助你在Tomcat中解决缓存问题。 1. 优化缓存配置 Tomcat内置了一些静态资源的缓存机制,可以通…...
2.STM32F407ZGT6-外部中断
参考: 1.正点原子。 前言: MCU最重要的一个领域–中断。总结下嵌套向量和外部中断的概念。达到: 1.NVIC是什么,了解中断的整体管理理念。 2.中断里面最简单的外部中断,怎么配置处理。 3.使用STM32CubeMX配置外部中断的…...
C# 之某度协议登录,JS逆向,手机号绑定,获取CK
.NET兼职社区 .NET兼职社区 .NET兼职社区 .NET兼职社区 有需要指导,请私信我留言V或者去社区找客服。...
0基础学前端-----CSS DAY12
视频参考:B站Pink老师 今天是CSS学习的第十二天,今天开始的笔记对应Pink老师课程中的CSS第七天的内容。 本节重点:CSS高级技巧 本章目录 本节目标1. 精灵图1.1 为什么需要精灵图1.2 精灵图使用案例:拼出自己的名字 2. 字体图标2.…...
STM32——系统滴答定时器(SysTick寄存器详解)
文章目录 1.SysTick简介2.工作原理3.SysTick寄存器4.代码延时逻辑5.附上整体代码6.一些重要解释 1.SysTick简介 Cortex-M处理器内集成了一个小型的名为SysTick(系统节拍)的定时器,它属于NVIC的一部分,且可以产生 SysTick异常(异常类型#15)。SysTick为简单的向下计数的24位计数…...
HTML5 弹跳动画(Bounce Animation)详解
HTML5 弹跳动画(Bounce Animation)详解 弹跳动画是一种动态效果,使元素在出现或消失时看起来像是在跳动。这种效果可以通过 CSS 动画或 JavaScript 来实现,增强用户体验。 1. 使用 CSS 实现弹跳动画 可以使用 CSS 的 keyframes…...