当前位置: 首页 > article >正文

Sentinel实战(三)、流控规则之流控效果及流控小结

spring cloud Alibaba-Sentinel实战(三)、流控效果+流控小结

  • 一、流控规则:流控效果
    • 一)、流控效果:预热
      • 1、概念含义
      • 2、案例
        • 流控规则设置
        • 测试结果
    • 二)、流控效果:排队等待
      • 1、概念含义
      • 2、案例
        • 流控规则设置
        • 测试及结果
  • 二、流控规则实际使用总结
    • 一)、阈值类型、流控模式、流控效果组合及适用场景
      • 1、阈值为QPS 、流控模式为直接、快速失败[的流控效果]
        • 1)规则适用的业务特点
        • 2)适用场景
        • 3)配置时要注意的事项
      • 2、阈值为QPS 、流控模式为关联、快速失败[的流控效果]
        • 1)规则适用的业务特点
        • 2)适用场景
        • 3)配置时要注意的事项
      • 3、阈值为QPS 、流控模式为链路、快速失败[的流控效果]
        • 1)规则适用的业务特点
        • 2)适用场景
        • 3)配置时要注意的事项
      • 4、阈值为QPS 、流控模式为直接、Warm Up[的流控效果]
        • 1)规则适用的业务特点
        • 2)适用场景
        • 3)配置时要注意的事项
      • 5、阈值为QPS 、流控模式为直接、排队[的流控效果]
        • 1)规则适用的业务特点
        • 2)适用场景
        • 3)配置时要注意的事项
      • 6、阈值为线程数 、流控模式为直接、快速失败[的流控效果]
        • 1)规则适用的业务特点
        • 2)适用场景
        • 3)配置时要注意的事项
    • 二)、配置注意事项总结
      • 1、阈值评估
      • 2、规则要动态调整
      • 3、监控与报警
      • 4、规则持久化
      • 5、测试及验证
    • 小结:

一、流控规则:流控效果

流控效果有当前支持三种:直接失败、预热(warm up)、排队等待。
直接失败没什么可说的,下面主要围绕预热和排队等待展开。

一)、流控效果:预热

主要针对开启活动之前,系统流量是比较低的,比如秒杀活动即将开始后,系统访问量突增,可能把系统压垮,增加预热流控规则,是个比较好的方案。

1、概念含义

预热就是下图流控效果里,Warm Up ;即 预热/冷启动方式;这种方式用于系统长期处于低流量的情况,当流量突然激增,由于流量的突然激增可能瞬间会把系统压垮。通过这种“冷启动”的方式,让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给系统一个缓冲的时间,通过这种冷启动的方式避免系统被压垮。
预热公式为 单机阈值/coldFactor(预热因子,默认为3),经过预热时间后,才会达到阈值。
在这里插入图片描述
设置参数后的具体含义通过案例阐述。

2、案例

这种预热流控的设置,通常的场景类如 秒杀,主要是为了防止瞬间激增的流量打垮系统。关于设置秒杀的代码及配置如下:

端口9101服务,秒杀接口代码段:

   /*** 秒杀活动,设置预热的流控规则*/@GetMapping("/secKill")public String secKill() throws InterruptedException {log.info("---secKill---流控模式为 预热");Thread.sleep(200);return "ok";}

yaml文件配置内容如下:

server:port: 9101
spring:application:name: nacos-consumercloud:nacos:discovery:server-addr: 192.168.0.101:80sentinel:transport:dashboard: localhost:8080   port: 8720   web-context-unify: falsemanagement:endpoint:web:exposure:include:'*'
service-url:nacos-user-service: http://nacos-provider

主启动类添加服务发现注解:


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;@EnableDiscoveryClient
@SpringBootApplication
public class NacosConsumer9101Application {public static void main(String[] args) {SpringApplication.run(NacosConsumer9101Application.class, args);}}

启动服务访问,初始化sentinel的簇点链路,访问链接:http://localhost:9101/secKill

在资源 /secKill添加流控规则。

流控规则设置

该流控规则设置含义:当单机 QPS达到10,预热时长是5秒。
在这 5s内流量有个流量突增的过程,预热因子默认是3,根据预热公式,当QPS超过单机阈值的三分之一,即超过3时,就开始限流,随着5s的推移,第一秒可能是3,第二秒是4,第5s是10。这个预热的流控效果,其实指的就是系统处理流量突增的过程。

在这里插入图片描述

测试结果

流控规则设置完之后,并发线程数设置为10,持续2min,开始进行压测【工具jmeter】:
在这里插入图片描述
观察资源流量的实时监控情况,可看出QPS超过10 之后,拒绝QPS那列有了数值,说明被限流了。再看下压测接口响应失败jmeter的显示内容,提示被限流了:
在这里插入图片描述

二)、流控效果:排队等待

1、概念含义

匀速排队的方式,可以严格控制请求通过的时间间隔,就是让请求匀速通过,对应算法为漏桶算法。
这种方式主要用来处理间隔性突发流量,类似消息队列,在某一秒大量请求袭来,而后处于空闲状态,可以让空闲时间处理先前这大批量的请求,而不是第一时间拒绝多余的请求。
类似一个匀速器,在固定时间间隔让请求通过:

  • 若当前请求距离上个通过的请求通过的时间间隔大于预设值,则请求通过。
  • 否则,若当前请求的预期时间<规则预设的超时时间,那当前请求就要等待直到大于预设值则请求通过。
  • 若预期的通过时间超过最大排队时长,则直接拒绝这个请求。

Sentinel的匀速排队等待流控效果,是基于漏桶算法结合虚拟队列等待机制实现的。
注意⚠️:匀速排队模式暂时不支持QPS超过1000的场景。

2、案例

比如这个例子:QPS单机阈值超过5,则进行排队等待,在15s内 ,1s处理5个,超过15s 还没处理完的其他请求,则视为超时。

流控规则设置

在这里插入图片描述

测试及结果

压测并发量10,持续2min,访问链接:http://localhost:9101/waiting
观察Sentinel流量监控平台的变化以及指标统计情况:

前半段超时时间设置的15s ,可以看到没有被限流的请求。
后半段蓝色折线图,流控规则排队等待的超时时间调整为1s,观察图表可以看到超过1s的请求视为超时,还没处理的请求都被限流了:
在这里插入图片描述

查看响应失败的接口响应信息展示:
在这里插入图片描述

二、流控规则实际使用总结

关于流控规则,主要围绕 :阈值类型,流控模式,流控效果这三个维度,做的测试以及释义,当然最主要还是实际应用场景,下面是具体阐述这三个维度组合起来,分别适合哪些特点的场景,以及实际对应的业务场景案例, 还有配置时注意事项。

一)、阈值类型、流控模式、流控效果组合及适用场景

其实在上一篇和本文都已陆续说过,但比较零散,还是需要单独梳理一下,算是巩固加强印象了,希望能对读者在工作中有帮助;组合使用大致梳理出6个点。

1、阈值为QPS 、流控模式为直接、快速失败[的流控效果]

1)规则适用的业务特点

直接限制单个资源每秒请求量,超出的请求会被立即拒绝。这种规则可快速响应流量突发状况,能有效保护资源不被过度请求。

2)适用场景
  • 验证码发送,防止恶意刷验证码的行为,可设置QPS阈值,同样超出阈值则直接拒绝。
3)配置时要注意的事项

具体设置的值要参考日常流量以及历史高峰流量倍数作压测指标,进行摸底压测,大促期间可以此摸底性能为阈值上限,进行设置,注意⚠️,绝不能高于摸底上限,否则无法起到保护作用,也不能太低,否则会影响正常业务。

2、阈值为QPS 、流控模式为关联、快速失败[的流控效果]

1)规则适用的业务特点

根据关联资源的QPS阈值,来控制当前资源的访问。当关联资源达到阈值,则对当前资源进行限流,通过关联关系间接保护关联资源不被压垮。

2)适用场景
  • 创单和支付,创单之后,会调用支付接口,可以创建流控规则,关联资源为支付,设置关联资源阈值,当支付达到该阈值,则对创单接口进行限流。
  • 订单系统中,创单和扣减库存也是一样的道理,避免卖超的方案之一,可以将扣减库存设为关联资源,当其QPS过高,超过阈值,依然要对创单接口进行限流。
  • 支付系统中,支付接口和用户的资金账户 同理,可将用户的资金账户设为关联资源,当QPS过高,超过其实际承载流量的阈值,这时支付的性能会受到影响,此时可对支付接口进行流控。
3)配置时要注意的事项

要准确识别到关联资源,确保关联的合理性,另外还要注意的点是,关联资源的阈值设置要考虑两个资源之间的业务逻辑关系。

一般作为关联资源的,可以是公共服务等设置为关联资源 或者 特点是业务链路的后置服务,如果该资源实际性能较差且不在核心链路上,可以设置为关联资源,以此来保护该资源不被压垮。
如果该资源在核心链路上,除了让其成为关联资源,还要进行优化,优化性能指标至少要跟核心链路起始资源性能对齐,如果内部涉及到第三方接口调用,无法提升性能,则要考虑技术方案的调整,比如看哪些业务数据可以前置操作,串行调用调整为并发编程,同步改为异步方式实现。具体还是要结合实际业务作技术方案调整的决策。
而且,被设置为关联的资源,通常是该资源容易遇到性能瓶颈,就是性能不足与当前系统流量高峰或历史高峰时的需求相匹配,所以要设置为关联资源以此来保护其功能保持在正常水平。

3、阈值为QPS 、流控模式为链路、快速失败[的流控效果]

1)规则适用的业务特点

只对指定链路的资源请求进行QPS限制,即当链路入口资源达到阈值,则对其进行限流。能精确控制特定调用链路流量,有效避免因该链路流量过大影响系统性能。

2)适用场景
  • 微服务架构中,某个服务可能涉及多个调用链路,若其中一条调用链路过大,可对该链路进行流控。场景比如 商品详情服务调用 加车服务,再调用结算服务这条调用链路,可以设置链路QPS阈值,超过则拒绝请求。
  • 某个接口有不同的调用来源,可对该特定来源的调用链路进行流控,比如结算创单资源接口,可以是普通商品调用链路的一个节点,也可以是促销如秒杀调用链路的一个节点,为了保护系统资源能正常服务,可以对秒杀等其他大流量的调用链路做链路流控配置。
3)配置时要注意的事项

明确要配置的链路规则,指定受流控的链路。同时,考虑链路阈值的动态变化,做出及时调控。

4、阈值为QPS 、流控模式为直接、Warm Up[的流控效果]

1)规则适用的业务特点

系统启动初期QPS较低,随时间推移,阈值逐渐增加到日常流量最大值,流控效果为预热模式,启动阶段可让系统有个流量适应过程。

2)适用场景

新上线服务,系统初始化阶段性能不稳定,可通过设置预热流控效果,能有效避免大量流量短时间涌入系统造成崩溃;比如服务版本升级重启,防止大量请求在瞬间击垮系统,可设置流控效果为预热模式。

促销活动,在活动开始之前,就会有一个流量持续增加的过程,比如秒杀前,系统流量会在段时间内迅速增加,所以要设置预热,即提前限流,会超过系统负载导致崩溃无法正常工作,对此场景,可设置QPS阈值,超出直接拒绝。

3)配置时要注意的事项

要合理设置预热时间和初始阈值,预热时间过短无法起到预热效果,过长则影响系统响应速度。

5、阈值为QPS 、流控模式为直接、排队[的流控效果]

1)规则适用的业务特点

请求超过QPS阈值,会进入排队等待, 从队列中匀速取出请求进行处理,可保证请求有序处理。此流控效果,适合非核心业务,比如某些营销类(不是全部哈,根据当前阶段业务重要程度,杠精请口下留情哈),对实时性要求不高,甚至可以滞后或降级处理的业务。

2)适用场景
  • 文件上传接口,对该操作的响应时间要求相对较低,可接受一定时间内的等待。当上传请求过多时,超出阈值的请求进入队列进行排队等待,然后按顺序匀速处理(类比mq的削峰填谷)。
  • 处理批量任务的时候,比如批量导入商品数据,可采用排队等待的流控效果,保证数据处理的有序性。
3)配置时要注意的事项

设置合理队列长度和超时时间,队列长度过长占用系统大量资源,超时时间设置过长会导致用户等待时间过长。
其实根源还是在接口本身的性能上要有所提升,如果时间允许,还是需要提升这种批量操作的性能,从而提升用户体验。

6、阈值为线程数 、流控模式为直接、快速失败[的流控效果]

1)规则适用的业务特点

设置当前资源线程数量的阈值,当线程数达到阈值则后续线程会被直接拒绝,防止系统因线程过多导致资源耗尽。

2)适用场景

比如一些计算密集型的服务,像大数据分析任务处理接口,一定程度上要限制线程数来避免cpu出现资源过度占用的情况。
还有就是数据库的连接数,我们通常在配置连库信息时会设置,但是粒度不够细,可以通过限制请求库连接的线程数,来规避过多线程竞争数据库连接的情况,比如查库接口。

3)配置时要注意的事项

根据系统硬件资源和业务需求合理进行设置线程数阈值,避免过低影响系统正常并发处理能力,阈值过高那么流控规则就形同虚设了。

二)、配置注意事项总结

1、阈值评估

结合系统硬件资源(如cpu ,磁盘,内存,网络等)、资源重要度(业务的核心程度级别)以及历史流量峰值【大促期间和日常流量】,准确预估阈值,作为摸底性能测试基础数据,在此基础上,中小厂2到3倍,大厂10-20倍,留足余量,以此标准作压力测试期望指标,以系统实际性能指标,作为阈值依据。

若接口性能不达标:
对于核心流程资源接口,则要进行优化,不能一味去做限流处理。
对于非核心资源接口,则要根据当前项目周期紧急程度,评估是否作限流或降级处理。

2、规则要动态调整

随着时间的推移,业务在不停的迭代,用户体量以及系统的流量也会因此发生变化,以往的规则不足以恒久满足对系统性能的要求,所以要基于当前对系统性能的要求,对规则作动态调整。

3、监控与报警

结合Sentinel控制台或其他监控工具(如阿里云的arms监控),实时监控系统流量以及性能,cpu,磁盘,内存,网络等指标,合理设置报警的阈值,当流量接近或超过阈值时,及时通知相关人员。

4、规则持久化

使用Nacos、Zookeeper等配置中心存储流控规则,确保规则在服务重启后不会丢失,且可实现动态调整。

这个会在本栏目Sentinel文章的最后通过案例形式落地

5、测试及验证

在正式环境使用新的流控规则前,要在测试环境充分测试,验证规则的有效性以及合理性,避免影响正式环境
的业务。

看到这的小伙伴,你真的很棒!但是要坚持奥。

小结:

在保障核心业务稳定性的同时,最大化利用系统资源,满足不同业务场景的需求。实际应用中需结合压测数据、监控指标和业务特性动态调整规则。
在这里插入图片描述

相关文章:

Sentinel实战(三)、流控规则之流控效果及流控小结

spring cloud Alibaba-Sentinel实战&#xff08;三&#xff09;、流控效果流控小结 一、流控规则&#xff1a;流控效果一&#xff09;、流控效果&#xff1a;预热1、概念含义2、案例流控规则设置测试结果 二&#xff09;、流控效果&#xff1a;排队等待1、概念含义2、案例流控规…...

JavaScrip——DOM编程

一、DOM元素创建与属性操作 1. 元素创建与插入 // 创建新元素 const newDiv document.createElement(div); newDiv.textContent "动态创建的内容";// 插入到容器末尾 document.body.appendChild(newDiv);// 在指定元素前插入 existingElement.before(newDiv);// …...

表单的前端数据流向

在CRM项目中&#xff0c;会涉及很多张表单。每张表单的前端代码都会放在一个单独的文件夹中。这个文件夹下包含三个文件&#xff0c;分别是&#xff1a; index.js&#xff08;以下称为 index&#xff09;&#xff1a;负责组件的渲染和交互逻辑。model.js&#xff08;以下称为 …...

PP-ChatOCRv3新升级:多页PDF信息抽取支持自定义提示词工程,拓展大语言模型功能边界

文本图像信息抽取技术在自动化办公、建筑工程、教育科研、金融风控、医疗健康等行业领域具有广泛应用场景。2024年9月&#xff0c;飞桨低代码开发工具PaddleX中新增文本图像智能产线PP-ChatOCRv3&#xff0c;充分结合PaddleOCR的文本图像版面解析能力和文心一言语言理解优势&am…...

《二叉树:二叉树的顺序结构->堆》

二叉树一般可以使用两种结构存储&#xff0c;一种是顺序结构&#xff0c;一种是链式结构。 顺序存储 顺序结构存储是使用数组来存储&#xff0c;一般使用数组只适合表示完全二叉树&#xff0c;因为不是完全二叉树会有空间的浪费。实际上使用中只有堆才会使用数组来存储。二叉…...

OpenLayers:封装Overlay的方法

平时在使用OpenLayers的Overlay时常感觉不便&#xff0c;于是最近我便封装了一些Overlay增删改查的方法&#xff0c;以提高可用性。这边文章中我会介绍我封装的方法&#xff0c;同时记录这个过程中踩的一些坑。 添加Overlay /*** abstract 添加overlay* param {*} map* param…...

软件重构与项目进度的矛盾如何解决

软件重构与项目进度之间的矛盾可以通过明确重构目标与范围、采用渐进式重构策略、优化项目管理流程、提高团队沟通效率、建立重构意识文化等方式解决。其中&#xff0c;采用渐进式重构策略尤为关键。渐进式重构是指在日常开发过程中&#xff0c;以小步骤持续进行重构&#xff0…...

Mysql+Demo 获取当前日期时间的方式

记录一下使用Mysql获取当前日期时间的方式 获取当前完整的日期时间有常见的四种方式&#xff0c;获取得到的默认格式(mysql的格式标准)是 %Y-%m-%d %H:%i:%s其它格式 %Y-%m-%d %H:%i:%s.%f方式一&#xff1a;now()函数 select now();mysql> select now(); -------------…...

数智化时代下开源AI大模型驱动的新型商业生态构建——基于AI智能名片与S2B2C商城小程序的融合创新研究

摘要 数字技术的指数级发展推动物理世界向数智化网状结构加速转型&#xff0c;传统商业逻辑面临系统性重构。本文以"开源AI大模型AI智能名片S2B2C商城小程序"为研究主体&#xff0c;采用案例分析与技术验证相结合的方法&#xff0c;揭示技术融合对商业生态的重塑机制…...

Spring Cloud Alibaba 技术全景与实战指南

简介&#xff1a; Spring Cloud Alibaba 是阿里巴巴开源的微服务解决方案&#xff0c;基于 Spring Cloud 标准构建&#xff0c;提供了一站式分布式系统开发能力。它深度整合阿里云生态组件&#xff0c;为企业级微服务架构提供高可用、高性能的技术支撑。 核心特性 全栈微服务能…...

回归预测 | Matlab实现NRBO-Transformer-BiLSTM多输入单输出回归预测

回归预测 | Matlab实现NRBO-Transformer-BiLSTM多输入单输出回归预测 目录 回归预测 | Matlab实现NRBO-Transformer-BiLSTM多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【JCR一区级】Matlab实现NRBO-Transformer-BiLSTM多变量回归预测&#xf…...

了解 PoE 握手协议在网络配电中的重要性

在现代网络领域&#xff0c;以太网供电(PoE)已成为一项革命性的技术&#xff0c;通过在一根以太网电缆上集成电力和数据传输&#xff0c;简化了网络连接设备的部署和管理。这种无缝操作的核心是 PoE 握手 —— 一个促进支持PoE 的设备之间的通信、确保高效供电和保护网络基础设…...

小智机器人相关函数解析,BackgroundTask::Schedule (***)将一个回调函数添加到后台任务队列中等待执行

以下是对 BackgroundTask::Schedule 函数代码的详细解释&#xff1a; void BackgroundTask::Schedule(std::function<void()> callback) {std::lock_guard<std::mutex> lock(mutex_);if (active_tasks_ > 30) {int free_sram heap_caps_get_free_size(MALLOC_…...

基于Python设计的TEQC数据质量可视化分析软件

标题:基于Python设计的TEQC数据质量可视化分析软件 内容:1.摘要 本文旨在设计一款基于Python的TEQC数据质量可视化分析软件。随着全球导航卫星系统&#xff08;GNSS&#xff09;的广泛应用&#xff0c;数据质量的评估变得至关重要。TEQC&#xff08;TransEditQualityCheck&…...

人月神话:如何有效的避免Bug的产生

bug的来源有很多种&#xff0c;一般的小bug很好修复&#xff0c;最头疼的是哪些致命且难以察觉的Bug。这些bug从哪来的&#xff1f; 在人月神话书中说&#xff1a;假设的不匹配是大多数致命和难以察觉的bug的主要来源。 假设来源于各个组成部分的开发者对概念的理解不一致。 为…...

Git的基础使用方法

本文最终功能&#xff1a; 1.从终端直接传输代码给仓库 2.用终端从仓库克隆文件 基本概念 我们先来理解下 Git 工作区、暂存区和版本库概念&#xff1a; 工作区&#xff1a;就是你在电脑里能看到的目录。 暂存区&#xff1a;英文叫 stage 或 index。一般存放在 .git 目录下的…...

轮胎厂相关笔记

一、术语 图解&#xff1a;https://news.yiche.com/hao/wenzhang/38498703/ 1、胚胎 在轮胎制造行业中&#xff0c;“胎胚”&#xff08;也称“生胎”或“未硫化轮胎”&#xff09;是指轮胎在硫化&#xff08;高温高压固化&#xff09;之前的半成品形态。它是轮胎成型的中间…...

Java常用异步方式总结

使用建议 完整代码见https://gitee.com/pinetree-cpu/parent-demon 提供了postMan调试json文件于security-demo/src/main/resources/test_file/java-async.postman_collection.json 可导入postMan中进行调试 Java异步方式以及使用场景 继承Thread类 新建三个类继承Thread&…...

【Easylive】视频在线人数统计系统实现详解 WebSocket 及其在在线人数统计中的应用

【Easylive】项目常见问题解答&#xff08;自用&持续更新中…&#xff09; 汇总版 视频在线人数统计系统实现详解 1. 系统架构概述 您实现的是一个基于Redis的视频在线人数统计系统&#xff0c;主要包含以下组件&#xff1a; 心跳上报接口&#xff1a;客户端定期调用以…...

tomcat 目录结构组成

文章目录 背景文件结构层级一些常用的路径 背景 现在非常多的 java web 服务部署在 linux 服务器中&#xff0c;我们服务器中的 tomcat 会有各种文件路径&#xff0c;看下它有哪些文件 文件结构层级 ├── bin/ # 核心脚本和启动文件 ├── conf/ # …...

苍穹外卖day12

课程内容 工作台 Apache POI 导出运营数据Excel报表 功能实现&#xff1a;工作台、数据导出 工作台效果图&#xff1a; 数据导出效果图&#xff1a; 在数据统计页面点击数据导出&#xff1a;生成Excel报表 1. 工作台 1.1 需求分析和设计 1.1.1 产品原型 工作台是系统运…...

Unity Final IK:下一代角色动画与物理交互的技术解析

引言&#xff1a;角色动画的范式转移 在传统游戏开发中&#xff0c;角色动画主要依赖于 前向动力学&#xff08;Forward Kinematics, FK&#xff09; 和预烘焙动画。然而&#xff0c;这种方法的局限性在开放世界、物理交互和VR等场景中愈发明显&#xff1a; 环境适应性差&…...

前端开发时的内存泄漏问题

目录 &#x1f50d; 什么是内存泄漏&#xff08;Memory Leak&#xff09;&#xff1f;&#x1f6a8; 常见的内存泄漏场景1️⃣ 未清除的定时器&#xff08;setInterval / setTimeout&#xff09;2️⃣ 全局变量&#xff08;变量未正确释放&#xff09;3️⃣ 事件监听未清除4️⃣…...

【Feign】⭐️使用 openFeign 时传递 MultipartFile 类型的参数参考

&#x1f4a5;&#x1f4a5;✈️✈️欢迎阅读本文章❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;本篇文章阅读大约耗时三分钟。 ⛳️motto&#xff1a;不积跬步、无以千里 &#x1f4cb;&#x1f4cb;&#x1f4cb;本文目录如下&#xff1a;&#x1f381;&#x1f381;&a…...

Linux中动静态库的制作

1.什么是库 库是写好的现有的&#xff0c;成熟的&#xff0c;可以复⽤的代码。现实中每个程序都要依赖很多基础的底层库&#xff0c;不可能每个⼈的代码都从零开始&#xff0c;因此库的存在意义非同寻常。 本质上来说库是⼀种可执⾏代码的⼆进制形式&#xff0c;可以被操作系统…...

Docker部署sprintboot后端项目

创建Docker网络 docker network create icjs 部署Redis docker run -d \--network icjs \--name redis \-p 6379:6379 \redis:latest数据持久化 docker run --restartalways --network icjs -p 6379:6379 --name redis -v /opt/docker/redis/redis.conf:/etc/redis/redis.c…...

forms实现连连看

说明&#xff1a; forms实现连连看 效果图&#xff1a; step1:C:\Users\wangrusheng\RiderProjects\WinFormsApp2\WinFormsApp2\Form1.cs using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Windows.Forms;namespace …...

多视图几何--立体校正--Fusiello方法

1. 坐标系对齐与正交基构造 目标&#xff1a;构建新坐标系基向量 { e 1 , e 2 , e 3 } \{ \mathbf{e}_1, \mathbf{e}_2, \mathbf{e}_3 \} {e1​,e2​,e3​}&#xff0c;使成像平面共面且极线水平对齐。 (1) 基线方向 e 1 \mathbf{e}_1 e1​ 基线向量由左右相机光心平移向量…...

鸿蒙开发踩坑记录 - 2024S2

wrapBuilder如果想View和ObservedV2做绑定 必须要用 ComponentV2 Param 和 区别 退出两层循环 Builder的传入的参数及时是Trace修饰的也无法刷新组件 折叠屏展开后键盘无法点击 vm是公用的&#xff0c;组件生命周期问题导致 监听键盘高度变化失效 原因&#xff1a;分享面…...

【学Rust写CAD】21 2D 点(point.rs)

源码 //matrix/point.rs use std::ops::Mul; use super::algebraic_units::{Zero, One}; use super::generic::Matrix;/// 点坐标结构体 #[derive(Debug, Clone, Copy, PartialEq)] pub struct Point<X, Y>(Matrix<X, Y, One, Zero, Zero, One>);impl<X, Y>…...