利用DeepFlow解决APISIX故障诊断中的方向偏差问题
概要:随着APISIX作为IT应用系统入口的普及,其故障定位能力的不足导致了在业务故障诊断中,APISIX常常成为首要的“嫌疑对象”。这不仅导致了“兴师动众”式的资源投入,还可能使诊断方向“背道而驰”,从而导致业务故障“长期悬而未决”。本文通过回顾一家全球领先智能终端制造商最近处理核心业务响应延迟故障的过程,展示了“背道而驰”现象对诊断效率的巨大影响,并介绍了DeepFlow可观测性平台如何通过短短几分钟和几个简单的步骤,消除APISIX故障诊断中的“背道而驰”,解决了一个悬而未决长达两个月的问题,极大地提高了故障处理的效率。
01 业务故障的定界困境
作为一款云原生时代极受关注的 API 网关产品,Apache APISIX 被越来越多的用户选择作为 IT 应用系统的入口,在网运行的 APISIX 承载着重要等级各有差异的不同业务,但在运维过程中,普遍存在着故障诊断定位的困难。当业务出现异常需要诊断定位时,运维团队无法快速、清晰地确定故障边界,因而 APISIX 经常成为重点 "怀疑对象",一方面投入大量运维人力消耗在无效的读日志、抓包、追踪等诊断工作中,另一方面诊断方向经常 "南辕北辙",业务故障长期得不到解决。
近期某全球领先的智能终端提供商 就在运维工作中陷入了这样的困境,核心业务系统出现明显的响应时延劣化之后,在长达两个月的定位过程中无法确定故障边界,网关、应用、公有云服务商等多个团队在错误的方向投入大量人力但仍无头绪。
故障诊断陷入困境后,故障诊断团队以零基础在两小时内完成 DeepFlow 企业版的部署,数分钟内点亮业务链路拓扑及多个关键位置的性能指标,迅速排除 APISIX 的故障嫌疑,并将故障锁定到后端应用。
从本文的整个定位过程您可以看到 DeepFlow 可观测性平台在实战中,如何用数分钟时间、几步简单的操作解决数名工程师两个月未能完成的故障诊断工作,为包括 APISIX 在内的云原生应用、网关、基础组件、基础设施提供分钟级的故障定界能力,为云原生业务提供端到端的可靠性运维保障能力。
02 警报响起
该智能终端提供商的 IT 业务系统构建在公有云之上,业务部署跨多个可用区,架构复杂,组件众多,运维保障和故障诊断涉及应用、平台、公有云服务商等企业内及企业间不同团队之间的沟通协作。
某段时间,该企业 IT 业务系统中的 "手机收入系统" 的应用服务,在高压力情况下一部分业务请求出现明显的响应时延劣化,直接影响 ToC 客户业务服务过程的交易流畅度,线上用户的业务体验受到影响,企业对此高度重视,组织多个技术团队的技术人员组成故障诊断团队,联合专项定位并每日汇报定位进展。
03 持续 2 个月的鏖战
1)谁是问题的根源?
团队对业务路径进行梳理,确定该业务服务的访问过程经过了 Client、APISIX、公有云、K8s、后端应用等诸多内、外部组件。
到底谁是问题的根源呢?------ 现在首要的问题便是故障定界。
当前可用的运维工具包括 Prometheus 和 Pinpoint,但在对部分业务请求的响应时延劣化的故障进行诊断时,却发现这两种工具组合起来无法回答故障的边界问题:
- Pinpoint 的局限性:Pinpoint 覆盖了后端应用实例(pctr)的内部关键应用函数,但插桩范围之外的代码、K8s 网络、公有云、APISIX 等位置的响应时延均无从了解;
- Prometheus 的局限性:通过 Prometheus 观测的指标是粗粒度的 APISIX 性能指标统计结果,经过 APISIX 的统计计算后已经失去许多关键信息,无法将性能指标细化到 Ingress 方向、Egress 方向,细化到每一个通信对端,细化到每一次业务请求;
- 关联的困难:Prometheus 的粗粒度统计指标与 Pinpoint 的细粒度追踪记录中的时延指标无直接对应关系。
此时,团队无法在 APISIX、后端应用实例、K8s、公有云之间确定故障边界 ,陷入了 " 处处都有可能 " 的困境。
2)插桩 ------ 数据迷雾重重!
当发现 APISIX 的 Prometheus 指标过粗,无法对此次响应时延劣化的故障进行定界后, 团队迫不得已开始对 APISIX 代码进行追踪插桩的改造并上线新的版本,尝试追踪单条请求在 APISIX、Pinpoint 中的响应时延表现,这时抽样分析(人工分析无法对比每一次请求量,仅能做少量抽样)发现:
- 应用请求在后端应用(pctr) 位置的时延约 48ms(源自 Pinpoint 追踪数据);
- 应用请求在 APISIX 插桩位置的响应时延约 88ms(源自 APISIX 的追踪打印日志)。
问题 "看起来" 出现在 APISIX、公有云和 K8s 之间。
3)抓包 ------ 历尽千辛万苦!
为了彻底弄清楚 APISIX 是否是问题真正的根源,团队开始投入人力在 APISIX 所在的近百个 CVM 上对接口网卡进行人工抓包、读包,比对应用请求在网卡位置的时延表现,但依然面临两个方面的困难:
- 人力投入巨大 :每一轮的抓包均会包含数十万次业务请求,产生数 GB 数据包,需要投入大量的人力进行分析,工程师只能全力以赴以 7*15 小时的工作节奏投入到抓包读包的工作中;
- 容易陷入 "盲人摸象":人工读包只能解读少量业务请求的交互过程,无法分析每一次业务请求的端到端时延,分析样本量有限,得出的结论容易出现 "盲人摸象",结论可信度容易被质疑。
最终经过连续多周的抓包读包分析,团队发现 CVM 网卡位置的应用响应时延约为 50ms,结合 APISIX 追踪打印日志中的 88ms,因而得到一个阶段性结论:APISIX 对应用响应时延贡献了约 38ms,所以 APISIX 是问题的根源(事后分析这是一个 "南辕北辙" 的结论)。
4)怀疑 ------ 插桩数据准确吗?
当抓包数据和插桩数据让我们将所有注意力放到 APISIX 身上后,开发人员开始对 APISIX 的程序代码进行诊断定位,但再次历经连续多天的努力,仍然无法在 APISIX 的代码中找到任何会引入 "38ms "时延的可疑点,而且"38ms" 对于网关产品基本属于天量且难以置信的时延。
团队开始怀疑:APISIX 插桩日志输出的 "88ms" 时延真实、可靠吗?
由于不同开发语言、插桩数量、插桩代码质量均会带来不同程度的「插桩时延 」,而且插桩代码会引入多少「插桩时延」无法得到准确的评估和测量, "88ms" 有多少是由 APISIX 的插桩代码引入,有多少是由 APISIX 自身引入,变成了一个无解的问题。
至此,时间已经过去两个月 ,但 Pinpoint 追踪数据、APISIX 插桩追踪数据、抓包数据让响应时延劣化故障的定界变得更加扑朔迷离,故障诊断定位工作回到原点。
注:「插桩时延」------ 在应用程序中启用追踪插桩后,插桩代码的执行动作会增加服务响应时延,这一部分额外增加的时延可以将其称之为「插桩时延」。
04 使用 DeepFlow 快速排障
团队了解到 DeepFlow 可观测性平台的 Agent 通过 eBPF 技术实现观测数据采集能力,具有应用零侵扰 、随时热加载的特点,无需对 APISIX 网关和后端应用实例进行重启操作即可开启从网关到应用的端到端观测能力,因此开始尝试使用 DeepFlow 进行故障诊断。由于初次使用 eBPF 技术,团队决定先在测试环境部署 DeepFlow 对此次故障复现定位。
1)快速部署 DeepFlow
DeepFlow 支持容器化部署,极大降低了部署难度,工程师以零基础在 2 个小时内即完成了 DeepFlow 企业版的部署工作,并将 DeepFlow Agent 覆盖到 APISIX 网关所在的数十个 CVM 和上百个后端应用实例所在的 K8s 容器集群。
随着 Agent 的运行,DeepFlow 随即开始实时采集每一次应用调用在全链路多个位置(如下图中 1、2、3、4、5、6)的响应时延等指标数据:
2)应用拓扑,一分钟排除 APISIX 嫌疑
DeepFlow 运行后的数分钟内即可开始进行诊断定位,输入 APISIX 实例的 CVM 名称后,调阅出 APISIX 实例的应用访问拓扑,以及前后端互访的应用性能指标数据:
与 Prometheus 指标数据相比,DeepFlow 的应用性能指标数据可以细化区分 Ingress 方向、Egress 方向,细化区分每一个通信对端,细化区分不同采集位置,因此通过 APISIX 应用拓扑图中不同通信对端、不同位置的应用响应「最大时延」指标,我们可以快速发现响应速度最差的应用请求在全链路中不同位置的时延表现:
- (观测点 1 )APISIX Ingress 方向的网卡位置的最大响应时延 ------506.72ms
- (观测点 2 )APISIX Ingress 方向的系统 Syscall 位置的最大响应时延 ------506.69ms
- (观测点 3 )APISIX Egress 方向的系统 Syscall 位置的最大响应时延 ------506.56ms
- (观测点 4 )APISIX Egress 方向的网卡位置的最大响应时延 ------506.5ms
通过以上数据可直观发现如下信息:
- APISIX (含 CVM)对最大响应时延的贡献仅为 [506.72ms - 506.5ms] =0.22ms
- 后端(含公有云、K8s、后端应用实例)贡献了 506.5ms
至此,我们便在打开 APISIX 拓扑后的 1 分钟内明确排除 APISIX 的故障嫌疑,并将故障源锁定到 APISIX 的后方(包括公有云、K8s、后端应用)。
注:测试环境复现的响应时延与生产环境的实时业务响应时延会有一定差异,但不影响 DeepFlow 故障诊断的分析过程和定界方法。
3)调用链追踪,一分钟锁定后端应用
如何在公有云、K8s、后端应用之间找到故障的根源呢?我们在 DeepFlow 中选择一部分响应时延最大的应用调用进行调用链追踪,发现有两类不同的时延现象。
现象 1------ 后端应用实例「网络 Span」与「系统 Span」差值明显
从第一种时延严重劣化的应用调用链追踪火焰图中(见下图),我们可以看到 pctr 的「网络 Span」时延为 477.48ms,pctr 的「系统 Span」时延为 121.48ms,两者中间出现了约 356ms 的差值,这说明:
- pctr 应用实例的 IO 线程调度处于繁忙状态,网卡收到请求之后延迟约 356ms 方才触发 IO 线程的 Syscall 进行数据读取,导致响应时延劣化。
- pctr 应用实例收到请求后,内部代码处理及其他后端调用消耗 121.48ms 方才回复应用响应。
注:「网络 Span」------ 即 DeepFlow Agent 采集的网卡位置的数据,Span 长度表示某次请求在该网络接口的响应时延; 「系统 Span」------ 即 DeepFlow Agent 采集的应用进程系统调用位置的数据,Span 长度表示某次请求在应用进程出入口位置的响应时延。
现象 2------ 后端应用实例「系统 Span」时延大
从第二种时延严重劣化的应用调用链追踪火焰图中(见下图),我们可以看到 pctr 的「系统 Span」时延达到 451.55ms,这说明:pctr 应用实例收到请求后,内部代码处理及其他后端调用消耗 451.55ms 方才回复应用响应,可以判断 Work 线程处于繁忙状态。
通过以上两种调用链追踪的结果,我们便可以排除公有云、K8s 的故障嫌疑,明确后端应用是此次响应时延劣化故障的问题根源,APISIX 运维和开发、K8s 运维、公有云服务商便可以从故障诊断团队中释放,由应用开发团队独立定位应用代码的根因。
05 复盘
复盘此次响应时延劣化的定位过程,我们发现快速、准确定界能力的缺失是云原生 IT 系统可靠性保障的最大障碍。
定界能力缺失往往导致 "盲人摸象"、"南辕北辙" 情况的产生,导致故障诊断团队的资源和时间消耗在无效的工作中,导致故障经常在不同团队之间流转、循环、甩锅,导致故障定位率低、定位周期长。而定界能力缺失的主要原因包括:
- APM 追踪的盲区:应用的 APM 追踪能力能够观测应用内部的关键位置,但应用外部仍存在大量盲区;
- Prometheus 指标的粗糙:多数故障的诊断定位需要精细到单次应用调用,而 Prometheus 的粗粒度统计指标数据对此类应用响应时延劣化的追踪诊断无法发挥作用;
- 「插桩时延」的干扰:为诊断故障而临时在 APISIX 中进行追踪插桩,但同时引入的「插桩时延」反而影响诊断结论的准确性,甚至误导故障定位方向;
- 人工分析的 "盲人摸象":人工无法完成海量数据的采集、解析、分析工作,因此人工抓包、读包、读日志、关联比对等操作只能对少量样本抽样分析,分析结论只能 "盲人摸象",很难得出全面、准确的结论。
而对比发现,DeepFlow 的零侵扰调用链追踪能力则全面解决了上述关键难题,从而能够在故障诊断过程中通过客观数据快速确定故障边界:
- 无盲区追踪 :DeepFlow 通过 eBPF 技术实现的零侵扰调用链追踪,将任意一次应用调用的追踪能力覆盖到应用、转发网卡、APISIX,还包括其他各类中间件、负载均衡、消息队列、数据库、DNS 等基础服务,因而可以在各个组件间快速定界;
- 细粒度指标 :DeepFlow 采集分析的应用调用指标可以细化到 Ingress 方向、Egress 方向,细化到每一个通信对端,细化到不同采集位置,快速比对不同位置、不同通信对、出 / 入向的指标数据,因而可以在不同采集位置间快速定界;
- 客观数据 :DeepFlow 通过 eBPF 技术实现了在 Linux 内核中观测数据的旁路采集能力,采集过程不影响应用程序的处理过程,做到对应用响应时延的零影响,因而可以获取各个位置的客观数据,得出更准确、更客观的诊断结论;
- 业务全貌 :DeepFlow 实时采集全链路数据并自动关联分析,因而可以在无需投入大量人工的情况下快速观测业务全貌,得出全面、准确结论。
正是由于以上技术的加持,DeepFlow 能够帮助运维工程师在数分钟内明确故障是否与 APISIX 有关,用几步检索操作替代数名工程师两个月的繁琐抓包读包,并且在故障诊断过程中用精细的数据得出准确的结论。
06 什么是 DeepFlow
DeepFlow 是云杉网络开发的一款可观测性产品,旨在为复杂的云原生 及 AI 应用提供深度可观测性。DeepFlow 基于 eBPF
实现了应用性能指标、分布式追踪、持续性能剖析等观测信号的零侵扰 (Zero Code
)采集,并结合智能标签 (SmartEncoding
)技术实现了所有观测信号的全栈 (Full Stack
)关联和高效存取。使用 DeepFlow,可以让云原生及 AI 应用自动具有深度可观测性,从而消除开发者不断插桩的沉重负担,并为 DevOps/SRE 团队提供从代码到基础设施的监控及诊断能力。
相关文章:
利用DeepFlow解决APISIX故障诊断中的方向偏差问题
概要:随着APISIX作为IT应用系统入口的普及,其故障定位能力的不足导致了在业务故障诊断中,APISIX常常成为首要的“嫌疑对象”。这不仅导致了“兴师动众”式的资源投入,还可能使诊断方向“背道而驰”,从而导致业务故障“…...
智慧养老实训基地建设方案:如何以科技赋能养老实操培训
在人口老龄化加剧的当下,智慧养老产业蓬勃发展,对专业技能型人才的需求愈发迫切。智慧养老实训基地建设意义非凡,它为培育具备实操能力与创新思维的养老人才搭建关键平台,有助于填补行业人才缺口,推动养老服务从传统模…...
基于AI的Web应用防火墙(AppWall)实战:漏洞拦截与威胁情报集成
摘要:针对Web应用面临的OWASP、CVE等漏洞攻击,本文结合群联AI云防护系统的AppWall模块,详解AI规则双引擎的防御原理,并提供漏洞拦截配置与威胁情报集成代码示例。 一、Web应用安全挑战与AppWall优势 传统WAF依赖规则库更新滞后&a…...
什么是采购管理?如何做好采购管理的持续优化?
你是不是也遇到过这种情况: 公司采购部刚换了新供应商,结果原材料质量忽高忽低,生产线上三天两头出状况;行政采购的办公用品,月初买回来月底就堆在仓库吃灰;财务部天天追着问采购成本怎么又超支了... 这些…...
Unity 设置弹窗Tips位置
根据鼠标位于屏幕的区域,设置弹窗锚点以及位置 public static void TipsPos(Transform tf) {//获取ui相机var uiCamera GetUICamera();var popup tf.GetComponent<RectTransform>();//获取鼠标位置Vector2 mousePos Input.mousePosition;float screenWidt…...
区块链知识点5-Solidity编程基础
1. 全局变量名 具体描述 msg.sender 返回当前调用函数的调用者的地址 msg.value 当前消息所附带的以太币,单位为wei 2.变量的用法 默认存储位置修饰符 函数的返回值 memory 函数内部的局…...
OLAP与OLTP架构设计原理对比
OLAP与OLTP架构设计原理对比 一、核心区别 维度OLTPOLAP设计目标支持高并发、低延迟的事务操作(增删改查)支持复杂分析查询(聚合、多维度统计)数据模型规范化模型(3NF),减少冗余维度模型&…...
ubuntu20.04在mid360部署direct_lidar_odometry(DLO)
editor:1034Robotics-yy time:2025.4.10 1.下载DLO,mid360需要的一些...: 1.1 在工作空间/src下 下载DLO: git clone https://github.com/vectr-ucla/direct_lidar_odometry 1.2 在工作空间/src下 下载livox_ros_driver2&…...
检索增强生成(RAG)架构深度解析:突破大模型边界的工程实践
一、RAG技术架构设计哲学 1.1 范式演进:从静态模型到动态知识系统 graph LR A[传统LLM架构] -->|问题| B[依赖预训练参数] B --> C[知识固化风险] C --> D[领域适配困难]A -->|解决方案| E[RAG增强架构] E --> F[实时知识检索] F --> G[动态上下…...
线代第四课:行列式的性质
行列式性质 转置行列式 把行列式的第一行转置成第一列,使用表示 如果在转置一下: 性质一: 行列地位相同,对行性质,对列性质 性质二: 交换D的两行(列),D值变符号 性…...
【语音识别】vLLM 部署 Whisper 语音识别模型指南
目录 1. 模型下载 2. 环境安装 3. 部署脚本 4. 服务测试 语音识别技术在现代人工智能应用中扮演着重要角色,OpenAI开源的Whisper模型以其出色的识别准确率和多语言支持能力成为当前最先进的语音识别解决方案之一。本文将详细介绍如何使用vLLM(一个高…...
Python | kelvin波的水平空间结构
写在前面 简单记录一下之前想画的一个图: 思路 整体比较简单,两个子图,本质上就是一个带有投影,一个不带投影,通常用在EOF的空间模态和时间序列的绘制中,可以看看之前的几个详细的画法。 Python | El Ni…...
什么叫行列式
《行列式:数学中的重要概念及其应用》 行列式是数学中的一个重要概念,主要用于描述线性方程组、向量空间等方面的性质。以下是关于它的详细介绍: 定义 行列式是由排成正方形的一组数(称为元素)按照特定的规则计算得…...
构建高可用大数据平台:Hadoop与Spark分布式集群搭建指南
想象一下,你手握海量数据,却因为测试环境不稳定,频频遭遇宕机和数据丢失的噩梦。Hadoop和Spark作为大数据处理的“黄金搭档”,如何在分布式高可用(HA)环境下稳如磐石地运行?答案就在于一个精心构…...
[leetcode]211. 添加与搜索单词(Trie+DFS)
题目链接 题意 实现词典类 WordDictionary : WordDictionary() 初始化词典对象void addWord(word) 将 word 添加到数据结构中,之后可以对它进行匹配bool search(word) 如果数据结构中存在字符串与 word 匹配,则返回 true ;否则…...
AI | 字节跳动 AI 中文IDE编辑器 Trae 初体验
Trae 简介与安装 🔦 什么是 Trae Trae 是大厂字节跳动出品的国内首个 AI IDE,深度理解中文开发场景。AI 高度集成于 IDE 环境之中,为你带来比 AI 插件更加流畅、准确、优质的开发体验。说是能够不用写代码,全靠一张嘴跟 AI 聊天…...
【开发经验】结合实际问题解决详述HTTPS通信过程
最近的开发调试过程中涉及到了HTTPS发送与接收,遇到实际问题才发现对这部分尚属于一知半解。结合实际问题的解决过程来详细整理以下HTTPS通信过程。 需要调试的功能为BMC作为客户端向搭建好的Web服务器发送HTTPS请求,Web服务器负责接收处理发送过来的HT…...
灵霄破茧:仙途启幕 - 灵霄门新篇-(4)
重建之路,风云再起 灵霄门内一片萧瑟,残垣断壁间弥漫着悲伤与凝重。弟子们忙碌地清理着战场,救治伤员,每个人的脸上都带着劫后余生的疲惫。陈霄日夜守在玄风真人的榻前,眼中满是自责与担忧。玄风真人的伤势极重&#…...
微信小程序事件绑定基本语法
微信小程序使用 bind 或 catch 前缀绑定事件,语法如下: <组件 bind事件名"处理函数" catch事件名"处理函数"></组件> bind:事件绑定,允许事件冒泡(向父组件传递)。 catc…...
vscode 连不上 Ubuntu 18 server 的解决方案
下载 vscode 历史版本 18.5(windows请装在 系统盘 C 盘) 打开 vdcode,将 自动更新 设置为 None (很关键,否则容易前功尽弃) 重命名(删除) 服务器上的 .vscode-server 文件夹 重新…...
OSPF接口的网络类型和不规则区域
网络类型(数据链路层所使用的协议所构建的二层网络类型) 1、MA --- 多点接入网络 BMA --- 支持广播的多点接入网络 NBMA --- 不支持广播的多点接入网络 2、P2P --- 点到点网络 以太网 --- 以太网最主要的特点是需要基于MAC地址进行物理寻址,主要是因为以太网接口所连…...
基于Flask的勒索病毒应急响应平台架构设计与实践
基于Flask的勒索病毒应急响应平台架构设计与实践 序言:安全工程师的防御视角 作为从业十年的网络安全工程师,我深刻理解勒索病毒防御的黄金时间法则——应急响应速度每提升1分钟,数据恢复成功率将提高17%。本文介绍的应急响应平台ÿ…...
0410 | 软考高项笔记:项目管理概述
以下是不同组织结构中项目经理的角色、工作特点以及快速记忆的方法: 不同组织结构中项目经理的角色和工作特点 组织结构项目经理的角色工作特点职能型组织项目协调者、辅助管理者权力有限,主要负责协调部门间的工作,项目成员向部门经理汇报…...
基于 Qt 的图片处理工具开发(一):拖拽加载与基础图像处理功能实现
一、引言 在桌面应用开发中,图片处理工具的核心挑战在于用户交互的流畅性和异常处理的健壮性。本文以 Qt为框架,深度解析如何实现一个支持拖拽加载、亮度调节、角度旋转的图片处理工具。通过严谨的文件格式校验、分层的架构设计和用户友好的交互逻辑&am…...
2025年4月通信科技领域周报(3.31-4.06):6G技术加速落地与全连接生态构建
2025年4月通信科技领域周报(3.31-4.06):6G技术加速落地与全连接生态构建 目录 一、本周热点回顾二、技术进展深度解析三、产业动态全景扫描四、行业生态与政策风向五、专业术语解释六、免责声明 一、本周热点回顾 1. 华为发布6G全场景技术…...
Codeforces-CF816B-Karen and Coffee(差分/前缀和)
题目翻译: Karen 喜欢咖啡。 她有 n 本食谱,第 i 本食谱包含两个数 li,ri,表示这本食谱推荐用 [li,ri] 之间的温度(包含 li.ri)来煮咖啡。 Karen 认为一个温度 a 是可接受的当且仅当有 ≥k 本食谱推荐用 …...
4.DJI-PSDK云台x-port控制:
DJI-PSDK云台x-port控制: X-Port 功能控制,即控制 X-Port 云台,头文件为 dji_xport.h 使用PSDK 的“云台控制”功能,开发者需要先设计负载设备的云台并开发出控制云台的程序,将云台的控制函数注册到PSDK 指定的接口后…...
大语言模型中的幻觉现象深度解析
一、幻觉的定义及出现的原因 1. 基本定义 幻觉(Hallucination) 指大语言模型在自然语言处理过程中产生的与客观事实或既定输入相悖的响应,主要表现为信息失准与逻辑矛盾。 2. 幻觉类型与机制 2.1 事实性幻觉 定义:生成内容与可验证…...
衣橱管理助手系统(衣服推荐系统)(springboot+ssm+vue+mysql)含运行文档
衣橱管理助手系统(衣服推荐系统)(springbootssmvuemysql)含运行文档 该系统名为衣橱管理助手,是一个衣物搭配管理系统,主要功能包括衣物档案管理、衣物搭配推荐、搭配收藏以及套装智能推荐。用户可以通过系统进行衣物的搭配和收藏管理,系统提…...
视觉对象 - 数据可视化解读
Power BI 提供了丰富的视觉对象(Visuals),帮助用户以直观的方式呈现和分析数据。以下是 32 个常用视觉对象的解读及案例分享,涵盖核心功能、适用场景和注意事项。内容基于实际应用场景整理,便于快速理解。 一、数据比较类视觉对象 这类视觉对象主要用于比较不同类别、组别…...
使用物联网卡的烟感(NB-IoT/4G烟感)详解
基于物联网卡(NB-IoT/4G)的智能烟感是一种无线联网型火灾报警设备,相比传统烟感,它能够实时上报火警信息,适用于无人值守场所、智慧消防、远程监控等场景。 1. 物联网卡烟感的核心功能 功能说明实时报警探测到烟雾后&…...
(2)网络学习之堡垒机
堡垒机和防火墙的区别: 1.功能定位 防火墙主要负责抵御外部攻击,就像一道坚固的城墙,防止黑客进入内部网络。堡垒机则专注于内部管理,监控和记录运维人员的操作行为,确保内部网络的安全。 2.部署位置与作用范围 防…...
FlinkSQL的常用语言
FlinkSQL 常用语言指南 FlinkSQL 是 Apache Flink 提供的 SQL 接口,允许用户使用标准 SQL 或扩展的 SQL 语法来处理流式和批式数据。以下是 FlinkSQL 的常用语言元素和操作: 基本查询 -- 选择查询 SELECT * FROM table_name;-- 带条件的查询 SELECT c…...
Go语言编写一个进销存Web软件的demo
Go语言编写一个进销存Web软件的demo 用户现在要求用。之前他们已经讨论了用Django实现的方案,现在突然切换到Go,可能有几个原因。首先,用户可能对Go语言感兴趣,或者他们公司的技术栈转向了Go。其次,用户可能希望比较不…...
架构设计之Redisson分布式锁-可重入同步锁(一)
架构设计之Redisson分布式锁-可重入同步锁(一) Redisson分布式锁官方博客地址 1、Redisson是什么 Redisson 是一个基于 Redis 的 Java 分布式工具库,它提供了 分布式锁、集合、队列、缓存、Map、限流、任务调度 等高级数据结构和功能,极大地简化了 Ja…...
使用libcurl编写爬虫程序指南
用户想知道用Curl库编写的爬虫程序是什么样的。首先,我需要明确Curl本身是一个命令行工具和库,用于传输数据,支持多种协议。而用户提到的“Curl库”可能指的是libcurl,这是一个客户端URL传输库,可以用在C、C等编程语言…...
【数据结构】排序算法(下篇·终结)·解析数据难点
前引:归并排序作为一种高效排序方法,掌握起来还是有点困难的,何况需要先接受递归的熏陶,这正是编程的浪漫之处,我们不断探索出新的可能,如果给你一串数据让其变得有序?是选择简单的冒泡、插入排…...
Django 使用 Celery 完成异步任务或定时任务
1 介绍 Celery是一个分布式任务队列,由三个主要组件组成:Celery worker、Celery beat 和消息代理(例如 Redis 或 RabbitMQ)。这些组件一起协作,让开发者能够轻松地执行异步任务和定时任务。 Celery worker࿱…...
Excel 自动执行全局宏
Excel 自动执行全局宏 25.04.09 步骤 1:创建个人宏工作簿(Personal.xlsb) 生成Personal.xlsb (如尚未存在): 打开Excel → 开发工具 → 录制宏 → 选择“保存到个人宏工作簿” → 停止录制。按 Alt F11 进…...
【前缀和】矩阵区域和(medium)
矩阵区域和(medium) 题⽬描述:解法:代码Java 算法代码:C 算法代码: 题⽬描述: 题⽬链接:1314. 矩阵区域和 给你⼀个 m x n 的矩阵 mat 和⼀个整数 k ,请你返回⼀个矩阵 …...
Android ViewStub显示VISIBLE与消失GONE,Kotlin
Android ViewStub显示VISIBLE与消失GONE,Kotlin import android.os.Bundle import android.util.Log import android.view.View import android.view.ViewStub import android.widget.Button import androidx.appcompat.app.AppCompatActivity import androidx.trac…...
【愚公系列】《高效使用DeepSeek》063-海关数据获取和管理
🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…...
探索 OSPF 协议:构建高效网络的基石
文章目录 目录 文章目录 前言 一.OSPF协议概述 二.OSPF相关概念 🕤 2.1 基本思想 🕤 2.2 SPF算法 🕤 2.3 区域划分编辑 三.OSPF工作原理 编辑 🕤 3.1 DR/BDR选举 四.OSPF网络类型 🕤4.1 BMA 🕤4.2 P2P …...
深入剖析C++单例模式的八种实现演进与工程实践
深入剖析C单例模式的八种实现演进与工程实践 一、从基础到工业级:单例模式的演进图谱 1.1 基础实现的致命缺陷分析 // 初级版(非线程安全) class NaiveSingleton { public:static NaiveSingleton* getInstance() {if (!instance) {instanc…...
手游防DDoS攻击SDK接入
在手游中集成防DDoS攻击SDK是抵御流量型和应用层攻击的核心手段之一。以下从SDK选型、接入流程、防护策略优化三个维度提供完整指南,并附关键代码示例: 一、SDK选型与核心能力对比 服务商优势劣势适用场景…...
【C++进阶】关联容器:multimap类型
目录 一、multimap 基础概念与底层实现 1.1 定义与核心特性 1.2 底层数据结构 1.3 类模板定义 1.4 与其他容器的对比 二、multimap 核心操作详解 2.1 定义与初始化 2.2 插入元素 2.3 查找元素 2.4 删除元素 2.5 遍历元素 三、性能分析与适用场景 3.1 时间复杂度分…...
学习threejs,使用EffectComposer后期处理组合器(采用RenderPass、FilmPass渲染通道)
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.EffectComposer 后期…...
用Django和AJAX创建一个待办事项应用
用Django和AJAX创建一个待办事项应用 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 用Django和AJAX创建一个待办事项应用让我们创建一个简单的 Django 项目,其中包含不同类型的 A…...
【微调大模型】使用LLaMA-Factory进行监督微调 Qwen2.5
本文使用LLaMA-Factory进行监督微调 Qwen2.5。 此监督微调(SFT)脚本具有以下特点: 支持单GPU和多GPU训练;支持全参数调优,LoRA,Q-LoRA,Dora。 下面详细介绍一下该脚本的使用方法。 目录 安装…...
前端 react+ant design ,后端 springboot +mysql+redis 全栈项目零基础小白从服务器初始化开始部署上线超详细保姆级教程
哈喽小伙伴们,好久不见,我是小李,今天,来电干货,希望对大家有帮助。 去年12月底的时候心血来潮,正好赶上腾讯云在做活动,就买了一台服务器,说是后面打算上线一两个项目,体验体验云服务器究竟是怎么玩的。后来由于实习和“冬招”,实在忙不过来了,就放在文件夹吃灰了…...