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

istio流量治理——重试

Istio 的重试功能的底层原理主要依赖于其数据平面组件 Envoy 代理(Sidecar 或 Gateway)的实现。Envoy 是一个高性能的代理服务器,负责处理所有流入和流出的流量,并在 Istio 的服务网格中执行流量管理策略,包括重试逻辑。以下是对重试底层原理的详细解析,涵盖其工作机制、核心组件和实现细节。

注意!!!当服务A配置了重试后,其他注入了sidecar的服务在访问服务A的时候,若A发生了5xx等错误,则会触发重试,必须是已注入了sidecar的服务调用才会触发。


1. Envoy 的角色

Istio 通过将 Envoy 注入到每个 Pod 作为 Sidecar 代理,或者部署为 Ingress/Egress Gateway,来拦截和控制服务之间的网络流量。重试功能是 Envoy 的路由和故障处理能力的一部分,由 Istio 的控制平面(例如 Pilot)通过配置下发给 Envoy。

  • 配置来源:Istio 的 VirtualService 和 DestinationRule 定义了重试策略(例如 attempts、retryOn、perTryTimeout),这些配置被转换为 Envoy 的内部数据结构(xDS 协议)。
  • 执行主体:Envoy 在收到这些配置后,负责在流量转发过程中执行重试逻辑。

2. 重试的核心原理

Envoy 的重试机制是在其 HTTP 路由器过滤器(HTTP Router Filter)故障注入/重试策略 中实现的。以下是底层工作原理的逐步分解:

(1) 请求拦截与路由
  • 当客户端发起请求时,请求首先到达源 Pod 的 Envoy Sidecar。
  • Envoy 根据路由规则(基于 VirtualService 配置)将请求转发到目标服务(例如 gindemo.demo-bookinfo.svc.cluster.local)。
  • 在转发之前,Envoy 会检查是否有重试策略绑定到该路由。
(2) 重试策略的解析
  • 重试触发条件(retryOn):Envoy 检查配置中的 retryOn 字段,例如 5xx、connect-failure 等。这些条件被映射为具体的错误类型:
    • 5xx:HTTP 响应状态码 500-599。
    • connect-failure:TCP 连接失败。
    • reset:连接被上游服务重置。
    • gateway-error:网关相关的错误(如 502、503、504)。
  • 重试次数(attempts):Envoy 从配置中读取最大重试次数(例如 attempts: 10),并将其作为计数器。
  • 每次重试超时(perTryTimeout):为每次尝试设置独立的超时时间,避免单次重试耗时过长。
(3) 请求执行与失败检测
  • Envoy 将请求发送到上游服务(Upstream),并等待响应。
  • 如果上游服务返回符合 retryOn 条件的错误(例如 500 错误),或者发生网络错误(例如连接超时),Envoy 标记该请求为“失败”。
(4) 重试逻辑的执行
  • 计数器检查:Envoy 检查当前已尝试的次数是否小于配置的 attempts 值。
  • 延迟(如果有):如果配置了重试间隔(例如 Istio 支持通过 retryBudget 或自定义策略间接控制),Envoy 会在重试前等待一段时间。默认情况下,Envoy 不引入额外延迟,直接重试。
  • 重新发送请求:Envoy 构造一个新的请求(通常与原始请求相同,除非配置了特殊头或参数),并再次发送到上游服务。
  • 负载均衡:如果上游有多个实例(由 DestinationRule 定义的 subset 或负载均衡策略),Envoy 可能在每次重试时选择不同的实例(取决于负载均衡策略,如 Round Robin)。
(5) 结果返回
  • 如果某次重试成功(例如返回 200 OK),Envoy 将响应返回给客户端,终止重试流程。
  • 如果所有重试次数耗尽仍未成功,Envoy 将最后一次失败的响应(或错误信息)返回给客户端。

3. 底层实现细节

Envoy 的重试功能是在其 C++ 代码库中实现的,主要涉及以下模块:

(1) HTTP 路由器过滤器
  • 文件:source/extensions/filters/http/router/router.cc
  • 功能:解析路由配置,执行重试策略。
  • 逻辑:当上游返回错误时,过滤器检查重试策略(RetryPolicy),决定是否触发重试。
(2) 重试策略(RetryPolicy)
  • 数据结构:Envoy 使用 envoy.config.route.v3.RetryPolicy(通过 xDS 协议接收)存储重试配置。
  • 参数:
    • retry_on:触发条件(例如 5xx)。
    • num_retries:重试次数。
    • per_try_timeout:单次重试超时。
  • 实现:过滤器根据 RetryPolicy 判断是否需要重试,并更新内部状态(如重试计数器)。
(3) Upstream 管理
  • 文件:source/common/upstream/upstream_impl.cc
  • 功能:管理与上游服务的连接池和负载均衡。
  • 重试时,Envoy 从连接池中选择新的上游实例(如果可用),确保重试不会始终打到同一个失败节点。
(4) 时间管理
  • Envoy 使用事件循环(基于 libevent)来调度重试请求。如果配置了 perTryTimeout,会在超时后取消当前尝试并进入下一次重试。

4. 数据流示例

假设你的配置是 attempts: 10, retryOn: 5xx,服务返回 500 错误:

  1. 客户端发送请求 → 源 Envoy。
  2. 源 Envoy 转发请求到目标服务 → 返回 500。
  3. Envoy 检查 retryOn: 5xx,匹配条件,计数器从 0 增至 1。
  4. Envoy 重发请求 → 返回 500,计数器增至 2。
  5. 重复此过程,直到:
    • 上游返回非 5xx 响应(成功,结束)。
    • 重试 10 次仍失败,返回最后一次响应。

5. 与你的问题关联

在你的场景中(即使不设置 retries,仍重试 3 次),底层原理提示可能存在以下情况:

  • Envoy 默认配置:某些全局配置(通过 EnvoyFilter 或 Istio 默认设置)可能启用了重试。
  • Gateway 层重试:Ingress Gateway 的 Envoy 实例可能独立执行了重试逻辑,未受 VirtualService 控制。
  • 日志显示限制:Envoy 可能执行了更多重试,但日志级别不足以显示完整过程。

6. 扩展与限制

  • 幂等性:Envoy 默认假设请求是幂等的,重试不会检查请求的具体语义(如 POST 是否安全)。
  • 性能开销:重试会增加网络和上游服务的负载,尤其在高并发场景下。
  • 超时协调:全局超时(如 timeout)必须大于 perTryTimeout × attempts,否则重试可能被截断。

总结

Istio 的重试功能底层由 Envoy 的 HTTP 路由器过滤器和重试策略实现,通过拦截请求、检测失败并重新发送来完成。它的核心是一个基于配置驱动的循环机制,依赖上游状态和负载均衡。

相关文章:

istio流量治理——重试

Istio 的重试功能的底层原理主要依赖于其数据平面组件 Envoy 代理(Sidecar 或 Gateway)的实现。Envoy 是一个高性能的代理服务器,负责处理所有流入和流出的流量,并在 Istio 的服务网格中执行流量管理策略,包括重试逻辑…...

Spring Cloud之服务入口Gateway之Route Predicate Factories

目录 Route Predicate Factories Predicate 实现Predicate接口 测试运行 Predicate的其它实现方法 匿名内部类 lambda表达式 Predicate的其它方法 源码详解 代码示例 Route Predicate Factories The After Route Predicate Factory The Before Route Predicate Fac…...

测试分类篇

文章目录 目录1. 为什么要对软件测试进行分类2. 按照测试目标分类2.1 界面测试2.2 功能测试2.3 性能测试2.4 可靠性测试2.5 安全性测试2.6 易用性测试 3. 按照执行方式分类3.1 静态测试3.2 动态测试 4. 按照测试方法分类4.1 白盒测试4.1.1 语句覆盖4.1.2 判定覆盖4.1.3 条件覆盖…...

Django接入 免费的 AI 大模型——讯飞星火(2025年4月最新!!!)

上文有介绍deepseek接入,但是需要 付费,虽然 sliconflow 可以白嫖 token,但是毕竟是有限的,本文将介绍一款完全免费的 API——讯飞星火 目录 接入讯飞星火(免费) 测试对话 接入Django 扩展建议 接入讯飞星火…...

使用NVM下载Node.js管理多版本

提示:我解决这个bug跟别人思路可能不太一样,因为我是之前好用,换个项目就不好使了,倦了 文章目录 前言项目场景一项目场景二解决方案:下载 nvm安装 nvm重新下载所需Node 版本nvm常用命令 项目结构说明 前言 提示&…...

下载安装Node.js及其他环境

提示:从Node版本降级到Vue项目运行 文章目录 下载Node.js环境配置配置环境变量 安装 cnpm(我需要安装)安装脚手架安装依赖安装淘宝镜像(注意会更新)cnpm vs npm 与新旧版本核心差异包管理器不同功能差异如何选择&#…...

Java 基础-31-枚举-认识枚举

在Java编程语言中,枚举(Enum)是一种特殊的类,它允许一组固定的常量。它们非常适合用来表示一组固定的值,比如星期几、季节、颜色等。枚举自Java 5开始引入,为定义常量提供了一种更强大和方便的方式。本文将…...

问题1:Sinal 4在开启PAC检查的设备崩溃

​ 问题信息 硬件不支持PAC(Pointer Authentication),此类错误就是signal 11的错误,崩溃信息如下: Build fingerprint: google/sdk_gphone64_arm64/emu64a:16/BP22.250221.010/13193326:userdebug/dev-keys Revision: 0 ABI: arm64 Timestamp: 2025-04-06 11:33:13.923…...

美团Leaf分布式ID生成器:雪花算法原理与应用

📖 前言 在分布式系统中,全局唯一ID生成是保证数据一致性的核心技术之一。传统方案(如数据库自增ID、UUID)存在性能瓶颈或无序性问题,而美团开源的Leaf框架提供了高可用、高性能的分布式ID解决方案。本文重点解析Leaf…...

【C++奇遇记】C++中的进阶知识(多态(一))

🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集 数据库专栏 初阶数据结构 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如…...

C++自学笔记---指针在数组遍历中的应用

指针在数组遍历中的应用 在这一篇文章中&#xff0c;我们可以看到指针在数组遍历中的具体应用例子。 1. 赋值 我们要创建一个将数组的所有元素赋值为 1 的函数&#xff0c;并使用解引用运算符来访问数组元素. 代码为&#xff1a; #include <iostream> using namespac…...

Java八股文-List集合

集合的底层是否加锁也就代表是否线程安全 (一)List集合 一、数组 array[1]是如何通过索引找到堆内存中对应的这块数据的呢? (1)数组如何获取其他元素的地址值 (2)为什么数组的索引是从0开始的&#xff0c;不可以从1开始吗 (3)操作数组的时间复杂度 ①查找 根据索引查询 未…...

二叉树——队列bfs专题

1.N叉树的层序遍历 我们之前遇到过二叉树的层序遍历&#xff0c;只需要用队列先进先出的特性就可以达到层序遍历的目的。 而这里不是二叉树&#xff0c;也就是说让节点的孩子入队列时不仅仅是左右孩子了&#xff0c;而是它的所有孩子。而我们看这棵多叉树的构造&#xff0c;它…...

ESPIDF备忘

ESP8266 环境搭建 Windows 首先确保安装好了vscode和git 在工作目录使用git 克隆这个 git clone --recursive https://github.com/espressif/ESP8266_RTOS_SDK.git下载 集成环境和 ESP8266编译工具 旧版本的集成工具可能有问题 这里用20200601版本的 https://dl.espressif.co…...

4-c语言中的数据类型

一.C 语⾔中的常量 1.生活中的数据 整数&#xff1a; 100,200,300,400,500 小数: 11.11 22.22 33.33 字母&#xff1a; a&#xff0c;b&#xff0c;c&#xff0c;d A&#xff0c;B&#xff0c;C&#xff0c;D 在 C 语⾔中我们把字⺟叫做字符. 字符⽤单引号引⽤。例如A’ 单词…...

ST 芯片架构全景速览:MCU、无线 SoC、BLE 模块、MPU 差异详解

在嵌入式开发中,ST 是一个非常常见的芯片厂商,其产品线覆盖了 MCU、无线芯片、BLE 模块以及运行 Linux 的 MPU 等多个领域。很多开发者初次接触 ST 时会对这些产品之间的关系感到困惑。 本文从分类视角出发,带你快速了解 ST 芯片家族的核心架构和主要用途。 🧭 ST 芯片四…...

第十章Python语言高阶加强-SQL(数据库)

目录 一.数据库介绍 二.MySQL的安装 三.MySQL入门使用 四.SQL基础和DDL 五.SQL—DML 六.SQL—DQL 1.基础查询 2.分组聚合 七.Python操作MySQL 1.基础使用 2.数据插入 此章节主要掌握并且了解SQL语法和基础使用。如&#xff1a;安装、增删改查&#xff0c;SQL在未来我…...

NO.71十六届蓝桥杯备战|搜索算法-递归型枚举与回溯剪枝|枚举子集|组合型枚举|枚举排列|全排列问题(C++)

什么是搜索&#xff1f; 搜索&#xff0c;是⼀种枚举&#xff0c;通过穷举所有的情况来找到最优解&#xff0c;或者统计合法解的个数。因此&#xff0c;搜索有时候也叫作暴搜。 搜索⼀般分为深度优先搜索(DFS)与宽度优先搜索(BFS)。深度优先遍历vs深度优先搜索&#xff0c;宽度…...

C++ 中为什么构造函数不需要实现虚函数,而析构函数需要?

在C中&#xff0c;构造函数不需要是虚函数&#xff0c;而析构函数往往需要&#xff0c;原因如下&#xff1a; 构造函数 对象创建顺序&#xff1a;构造函数的主要任务是初始化对象的成员变量&#xff0c;创建对象时需要先调用基类的构造函数&#xff0c;再调用派生类的构造函数…...

如何获取oracle cloud永久免费的vps(4C/24G)?

1.注册oracle cloud账号 Oracle Cloud 免费套餐 | Oracle 中国 新注册的小伙伴&#xff0c;可以在 30 天内&#xff0c;利用 300 美元免费储值&#xff0c;任性使用所有 Oracle Cloud 基础设施服务。 30 天后呢&#xff1f;你仍然可以畅享 Always Free 免费套餐中的云服务&am…...

TypeScript面试题集合【初级、中级、高级】

初级面试题 什么是TypeScript&#xff1f; TypeScript是JavaScript的超集&#xff0c;由Microsoft开发&#xff0c;它添加了可选的静态类型和基于类的面向对象编程。TypeScript旨在解决JavaScript的某些局限性&#xff0c;比如缺乏静态类型和基于类的面向对象编程&#xff0c…...

java面试篇 并发编程篇

目录 1.线程的基础知识 1.线程与进程的区别&#xff1f; 2.并行与并发的区别&#xff1f; 3.创建线程的方式有哪些&#xff1f; 4.线程包括哪些状态&#xff1f;状态之间是如何变化的&#xff1f; 5.T1&#xff0c;T2&#xff0c;T3三个线程新建完毕后&#xff0c;如何保证…...

掌握 JSON 到表格转换:全面指南

高效地转换数据格式对于现代数据处理至关重要。JSON&#xff08;JavaScript 对象表示法&#xff09;因其灵活性而广受欢迎&#xff0c;而 CSV 或 Excel 等表格格式则更适用于数据分析和可视化。本文将介绍多种 JSON 转换为表格格式的方法&#xff0c;帮助您提升数据处理和可视化…...

【Spring Cloud Netflix】GateWay服务网关

1.基本概述 GateWay用于在微服务架构中提供统一的入口点&#xff0c;对请求进行路由&#xff0c;过滤和处理。它就像是整个微服务系统的大门&#xff0c;所有外部请求都要通过它才能访问到后端的各个微服务。 2.核心概念 2.1路由(Route) 路由是Spring Cloud gateWay中最基本…...

国产芯片解析:龙讯USB Type-C/DP Transmitter多场景覆盖,定义高速互联新标杆

在智能设备功能日益复杂化的今天&#xff0c;高速数据传输、高清视频输出与多功能接口融合已成为行业刚需。龙讯半导体&#xff08;Lontium&#xff09;凭借其领先的芯片设计能力&#xff0c;推出多款‌USB Type-C/DP Transmitter芯片‌&#xff0c;覆盖从消费电子到工业应用的…...

蓝桥杯 web 展开你的扇子(css3)

普通答案&#xff1a; #box:hover #item1{transform: rotate(-60deg); } #box:hover #item2{transform: rotate(-50deg); } #box:hover #item3{transform: rotate(-40deg); } #box:hover #item4{transform: rotate(-30deg); } #box:hover #item5{transform: rotate(-20deg); }…...

【Kubernetes】StorageClass 的作用是什么?如何实现动态存储供应?

StorageClass 使得用户能够根据不同的存储需求动态地申请和管理存储资源。 StorageClass 定义了如何创建存储资源&#xff0c;并指定了存储供应的配置&#xff0c;例如存储类型、质量、访问模式等。为动态存储供应提供了基础&#xff0c;使得 Kubernetes 可以在用户创建 PVC 时…...

4月7号.

双列集合的特点: Map中的常见API: //1.创建Map集合的对象 Map<String, String> m new HashMap<>();//2.添加元素 Stringvalue1 m.put("郭靖","黄蓉"); System.out.println(value1); m.put("韦小宝","沐剑屏"); m.put(&q…...

C++抽卡模拟器

近日在学校无聊&#xff0c;写了个抽卡模拟器供大家娱乐。 代码实现以下功能&#xff1a;抽卡界面&#xff0c;抽卡判定、动画播放、存档。 1.抽卡界面及判定 技术有限&#xff0c;不可能做的和原神一样精致。代码如下&#xff08;注&#xff1a;这不是完整代码&#xff0c;…...

蓝桥杯 2. 开赛主题曲【算法赛】

2.开赛主题曲【算法赛】 - 蓝桥云课 这道题和3. 无重复字符的最长子串 - 力扣&#xff08;LeetCode&#xff09;类似&#xff0c;因为题目中规定只有小写字母&#xff0c;所以定义统计数组时只需要定义26个字母即可&#xff0c;然后每次遍历的字符减去‘a’即为他的下标 impo…...

Spring Boot 中的 Bean

2025/4/6 向全栈工程师迈进&#xff01; 一、Bean的扫描 在之前&#xff0c;对于Bean的扫描&#xff0c;我们可以在XML文件中书写标签&#xff0c;来指定要扫描的包路径&#xff0c;如下所示,可以实通过如下标签的方式&#xff1a; <context:component-scan base-package&…...

基于springboot科研论文检索系统的设计(源码+lw+部署文档+讲解),源码可白嫖!

摘要 随着我国经济的高速发展与人们生活水平的日益提高&#xff0c;人们对生活质量的追求也多种多样。尤其在人们生活节奏不断加快的当下&#xff0c;人们更趋向于足不出户解决生活上的问题&#xff0c;线上管理系统展现了其蓬勃生命力和广阔的前景。与此同时&#xff0c;在此…...

Mysql入门

一、数据库三层结构 所谓安装Mysql数据库&#xff0c;就是在主机安装一个数据库管理系统(DBMS)&#xff0c;这个管理程序可以管理多个数据库。DBMS(database manage system)一个数据库中可以创建多个表&#xff0c;以保存数据(信息)。数据库管理系统(DBMS)、数据库和表的关系如…...

如何解决uniapp打包安卓只出现功能栏而无数据的问题

如何解决uniapp打包安卓只出现功能栏而无数据的问题 经验来自&#xff1a;关于Vue3中调试APP触发异常&#xff1a;exception:white screen cause create instanceContext failed,check js stack -> at useStore (app-service.js:2309:15)解决方案 - 甲辰哥来帮你算命 - 博客…...

Python高级爬虫之JS逆向+安卓逆向1.1节-搭建Python开发环境

目录 引言&#xff1a; 1.1.1 为什么要安装Python? 1.1.2 下载Python解释器 1.1.3 安装Python解释器 1.1.4 测试是否安装成功 1.1.5 跟大神学高级爬虫安卓逆向 引言&#xff1a; 大神薯条老师的高级爬虫安卓逆向教程&#xff1a; 这套爬虫教程会系统讲解爬虫的初级&…...

剖析Mybatis中用到的设计模式

框架对很多设计模式的实现&#xff0c;都并非标准的代码实现&#xff0c;都做了比较多的自我改进。实际上&#xff0c;这就是所谓的灵活应用, 只借鉴不照搬, 根据具体问题针对性地去解决。 涉及到Mybatis源码知识和设计模式&#xff0c;这点我之前的博客均有涉及。 可以查看我的…...

MySQL 函数(入门版)

目录 一、字符串函数 1、常用的字符串函数 2、函数演示 3、具体案例 二、数值函数 1、常用的数值函数 2、函数演示 3、具体案例 三、日期函数 1、常用的日期函数 2、函数演示 3、具体案例 四、流程函数 1、常用的流程函数 2、函数演示 3、具体案例 在MySQL中&a…...

d202546

目录 一、罗马字符转数字 二、二叉树的右视图 三、sql-查询结果的质量和占比 一、罗马字符转数字 首先把两个字符组成一个数字做一下单独判断 然后就是单个字符转数字 public int romanToInt(String s) {int sum 0;char[] ch s.toCharArray();int i 0;while(i < ch.len…...

洛谷每日1题-------Day37__P1634 禽兽的传染病

题目背景 mxj 的启发。 题目描述 禽兽患传染病了。一个禽兽会每轮传染 x 个禽兽。试问 n 轮传染后有多少禽兽被传染&#xff1f; 输入格式 两个非负整数 x 和 n。 输出格式 一个整数&#xff0c;即被传染的禽兽数。 输入输出样例 输入 #1复制 10 2 输出 #1复制 121…...

c语言修炼秘籍 - - 禁(进)忌(阶)秘(技)术(巧)【第五式】动态内存管理

c语言修炼秘籍 - - 禁(进)忌(阶)秘(技)术(巧)【第五式】动态内存管理 【心法】 【第零章】c语言概述 【第一章】分支与循环语句 【第二章】函数 【第三章】数组 【第四章】操作符 【第五章】指针 【第六章】结构体 【第七章】const与c语言中一些错误代码 【禁忌秘术】 【第一式…...

理解进程和线程的概念

在操作系统中&#xff0c;进程和线程都是执行的基本单位&#xff0c;但它们在性质和管理方面有所不同 进程 定义: 进程是一个正在运行的程序的实例&#xff0c;是操作系统资源分配的基本单位。特点: 独立性&#xff1a;每个进程有其独立的内存空间、数据栈和其他辅助数据。重…...

【项目管理】第2章 信息技术发展 --知识点整理

Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 (一)知识总览 对应:第1章-第5章 (二)知识笔记 二、信息技术的发展 1. 信息技术及其发展 1)计算机软硬件 计算机硬件由电子机械、光电元件等组成的物理装置,提供物质基础给计算机软件运行。软件包括程…...

docker部署rabbitmq

拉取镜像 docker pull rabbitmq:managementmanagement 标签表示包含管理插件&#xff0c;可以通过 Web 界面管理 RabbitMQ 启动容器 docker run --restartalways -d --name rabbitmq \-p 9004:5672 -p 9005:15672 \-e RABBITMQ_DEFAULT_USERrabbitmq \-e RABBITMQ_DEFAULT_P…...

手搓多模态-03 顶层和嵌入层的搭建

声明&#xff1a;本代码非原创&#xff0c;是博主跟着国外大佬的视频教程编写的&#xff0c;本博客主要为记录学习成果所用。 我们首先开始编写视觉模型这一部分&#xff0c;这一部分的主要功能是接收一个batch的图像&#xff0c;并将其转化为上下文相关的嵌入向量&#xff0c;…...

计算机系统---UEFI(统一可扩展固件接口)

一、UEFI定义与历史背景 UEFI&#xff08;Unified Extensible Firmware Interface&#xff09; 是替代传统BIOS的新一代固件接口标准&#xff0c;由UEFI论坛&#xff08;前身是Intel的EFI论坛&#xff09;制定&#xff0c;旨在解决BIOS在现代硬件和操作系统下的局限性。 设计…...

2025年渗透测试面试题总结-某四字大厂面试复盘扩展 二面 (题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 某四字大厂面试复盘 二面 一、文件上传绕过WAF的15种深度技巧 二、SSRF利用与WAF绕过的8种高阶手法 …...

基于BP神经网络的杂草智能识别系统(杂草识别、Python项目)

基于BP神经网络的杂草智能识别系统 项目介绍 本项目是一个基于PyQt5和BP神经网络的杂草智能识别系统。系统通过图像处理和神经网络技术&#xff0c; 能够识别8种不同的杂草类别。用户可以通过上传图片&#xff0c;系统会自动识别图片中的杂草类别&#xff0c;并显示识别结果和…...

Java的Selenium的特殊元素操作与定位之时间日期控件

分为两种情况: 控件没有限制手动输入&#xff0c;则直接调用sendKeys方法写入时间数据 //时间日期控件处理 chromeDriver.get ("https://www,fliggy,com/?ttidsem.000000736&hlreferidbaidu.082076&route sourceseo"); chromeDriver.findElement (By.xpat…...

深入理解矩阵乘积的导数:以线性回归损失函数为例

深入理解矩阵乘积的导数&#xff1a;以线性回归损失函数为例 在机器学习和数据分析领域&#xff0c;矩阵微积分扮演着至关重要的角色。特别是当我们涉及到优化问题&#xff0c;如最小化损失函数时&#xff0c;对矩阵表达式求导变得必不可少。本文将通过一个具体的例子——线性…...

基于大数据的美团外卖数据可视化分析系统

【大数据】基于大数据的美团外卖数据可视化分析系统 &#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统通过对海量外卖数据的深度挖掘与分析&#xff0c;能够为美团外卖平台提供运营决策支…...