入门OpenTelemetry——可观测性与链路追踪介绍
可观测性
什么是可观测性
可观察性(Observability)是从外部输出知识中推断所获得,可理解为衡量一个系统内部状态的方法。可观测性是一种能力,它能帮助你回答系统内部发生了什么——无需事先定义每种可能的故障或状态。系统的可观测性越高,就可以根据已识别的性能问题更快速、更准确地定位到其根本原因,而无需进行额外的测试或编码。
举个例子,水处理厂的操作员如果无法看到水管的内部状况,就无法监测到水的正常流动,流动的方式,以及水质的干净程度。但在管道内可以添加可观察性的工具——流量计和传感器后,状况就截然不同,这些工具将通过遥测连接到仪表板,帮助操作员能够完全掌握管道中水流的情况,并及时根据状况进行调整,大大提高了工作效率。
可观测性是应用程序性能监控 (APM)和网络性能管理 (NPM)数据收集方法的自然演变,它能更好地适应云原生应用程序部署日益加快、分布式和动态的本质。可观测性并不会取代监控,但可以完善监控以及 APM 和 NPM。
为什么需要可观测性
现如今,企业正在迅速采用现代化开发实践。这包括敏捷开发、持续集成和持续部署 (CI/CD)、DevOps、多种编程语言。
企业也在采用云原生技术,如微服务、Docker 容器、Kubernetes。因此,这些企业正以前所未有的速度将更多服务推向市场。但在此过程中,他们也在部署新的应用程序组件,每种服务使用不同的语言开发、在 Kubernetes + 微服务 + 异步消息 的架构中,应用之间的调用变得极其复杂。传统方式很难排查问题。比如:
- 一个订单失败,到底是前端?中间件?后端?哪个组件异常?
- 日志查不出东西,但用户反馈就是卡顿;
- 应用指标显示正常,但系统无相应或超时。
这时候,“可观测性”能帮助你,它可以针对每个应用程序用户的请求或事务创建高精确度、上下文丰富且完全相关的记录。
快速定位问题:
Trace + Log 可以告诉你:“哪个服务、哪一段代码、哪一次请求出了问题”。
主动发现异常:
Metric + 告警可以告诉你:“服务 QPS 降低了、错误率升高了”,即使你没看到用户投诉。
可观测性如何工作
可观测性平台通过集成应用程序和基础架构组件内置的现有检测功能,并提供各种工具来为这些组件添加检测功能,以便持续发现和收集性能遥测数据。 可观测性包含三大核心数据支柱。
类型 | 描述 | 举例 |
---|---|---|
Logs 日志 | 记录事件的时间线信息,常用于故障排查 | ERROR: failed to connect to DB |
Metrics 指标 | 数值型数据,便于聚合、报警和绘图 | CPU usage 85% , request_count=1000 |
Traces 链路追踪 | 展现请求如何在系统中流转 | 请求从 API 网关 → 订单服务 → 库存服务 |
可观测性的优势
- 快速定位问题(故障排查更高效)
- 能清楚看到请求从入口到各个服务的调用路径(Trace)。
- 能查看每一步的耗时、错误详情。
- 再也不用靠“猜”+ grep 日志找问题。
- 系统运行状态全面透明(从黑盒变成玻璃盒)
- CPU、内存只是基础指标,可观测性能告诉你:
- 访问量波动
- 请求成功率、错误率
- 每个组件的性能表现
- 支持黑盒 + 白盒监控,多维度了解系统状态。
- 异常发现更及时(主动报警)
- 使用 Metrics + Alerts,可以在问题刚发生时自动通知你,而不是等用户投诉。
- 可设定阈值规则,如:
- 错误率 > 1%
- 响应时间 > 1s
- QPS 突降
- 更好地理解系统行为(观测而非盲猜)
- 看到应用之间真实交互的链路图。
- 发现一些你“以为不会调用”的组件其实被调用了。
- 理解系统运行模式,帮助架构优化。
- 性能优化的依据
- 找出慢接口、慢 SQL、瓶颈节点。
- 基于数据调整服务部署、限流策略或数据库索引。
- 提高团队协作效率
- 开发、测试、运维、SRE 团队有统一的数据源。
- 不同角色可以快速对齐问题来源与解决路径。
- 提升系统稳定性与用户体验
- 可观测性让你提前发现潜在问题(比如内存泄漏、连接池耗尽);
- 系统出问题能快速恢复,用户影响最小化。
链路追踪
什么是链路追踪
链路追踪是分布式系统下的一个概念,它是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如,各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。
想象一下,你点了一个外卖(发起了请求),但外卖迟迟没送到(请求响应慢),你想知道:
- 餐馆什么时候开始做的?
- 骑手什么时候接的单?
- 途中有没有绕路?堵车?
- 是哪一环节慢了?
链路追踪就像是在每一环节都装了摄像头,并记录时间、状态、异常等,最终汇总成一条完整的调用链路图。
链路追踪核心概念
Trace: 表示“一次完整的请求路径”,从用户发起请求到最终响应的全流程。(比如一个订单请求, 每个 Trace 有一个唯一的 Trace ID)
Span:Trace 中的每一步操作(比如调用了哪个服务、哪个方法)
Parent-Child: Span 之间通过父子关系构成树形结构。 (父子关系)
Context: 是 Trace 信息的“载体”,用于在服务间传递追踪信息(HTTP Header)
如何实现链路追踪
- 埋点
应用代码中集成 OpenTelemetry SDK / Jaeger SDK / Zipkin SDK,或者使用 Agent 自动注入。 - 传递 + 收集
把 TraceID 等信息通过 HTTP Header / gRPC Metadata 等方式传递给下游服务。 - 存储 + 展示
用 OpenTelemetry Collector / Tempo 等组件采集并转发 trace 数据,再用 Jaeger / Grafana 展示。
常见链路追踪方案
方案 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
Jaeger | CNCF 项目,社区活跃 支持 OpenTelemetry UI 直观、部署灵活 | 存储依赖较多(Elasticsearch/Clickhouse) UI 功能相对基础 | 中大型微服务系统 希望使用标准化工具链 |
Zipkin | 启动快,轻量 组件少,易部署 支持多语言客户端 | 功能相对简单 与 OpenTelemetry 集成不如 Jaeger 完善 | 资源受限的环境 适合入门 |
SkyWalking | 支持 APM(性能监控)+ Trace 一体 对 Java 支持极好(Agent 模式) 支持链路拓扑图 | 复杂度较高,学习成本较大 资源占用相对高 | Java 系统为主的企业系统 需要拓扑可视化 |
OpenTelemetry + Collector + Jaeger/Tempo/Elastic APM | 灵活的标准化协议 多语言支持好 可自定义处理流程(Pipeline) | 配置较复杂,需要搭配 Collector 使用 学习成本较高 | 新系统从零建设可观测性 统一采集链路+日志+指标 |
Tempo (Grafana Labs) | 支持与 Loki、Prometheus 集成 存储成本低(对象存储) 支持 OpenTelemetry | UI 功能依赖 Grafana 查询需结合 Logs/Metric 联动 | 已使用 Grafana Stack 的团队 关注成本控制和联动分析 |
Elastic APM | 与 ELK 集成方便 提供自动化探针(Java、Node.js 等) 强大的查询分析能力 | 依赖 Elastic Stack 免费功能有限制(X-Pack) | 已使用 ELK 的团队 希望用一体化可观测方案 |
OpenTelemetry 介绍
OpenTelemetry 是什么
OpenTelemetry (OTel) 是一个开源可观测性框架,为我们提供了一个与供应商无关的可观测性标准,该框架由 CNCF(云原生计算基金会)托管的开源可观测性框架,用于采集、处理和导出应用的 Trace(链路追踪)、Metrics(指标)、Logs(日志) 三大核心可观测性数据。
OpenTelemetry不是像Jaeger、Prometheus或商业供应商那样的观测性后端。OpenTelemetry关注于追踪数据的生成、收集、管理和导出。存储和可视化数据留给其他工具。
OpenTelemetry 优点
传统可观测性方案的问题:
- 各家标准不统一(Prometheus、Jaeger、Zipkin、ELK 各搞各的),后期更换组件成本巨大。
- SDK 难以复用,语言多了埋点就变得混乱
- 很多工具不支持日志 + 指标 + 链路统一分析
OpenTelemetry 的优势是:
- 用一个统一协议打通链路、指标、日志三者
- 支持多语言自动埋点
- 和 Prometheus/Grafana/Jaeger 无缝对接
OpenTelemetry 组件架构
组件 | 说明 |
---|---|
API & SDK | 提供各语言(Go、Java、Python、Node.js 等)的统一接口和实现,供开发者在应用中埋点 |
Instrumentation | 自动或手动的代码埋点方式,用于生成 Trace、Metric 数据 |
Collector | 一个独立服务,接收应用数据,进行处理(过滤/增强/聚合)后导出到后端系统(Jaeger、Tempo 等) |
Exporter | Collector 的插件或 SDK 端模块,将数据导出到目标后端存储或 APM 工具 |
Protocol(OTLP) | 标准数据格式(OTel Protocol),支持 HTTP/gRPC 传输,统一 Trace、Metrics、Logs |
OTLP协议
OpenTelemetry 协议(OTLP)规范描述了遥测数据在遥测源、收集器和遥测后端之间的编码、传输和传递机制。
每种语言的 SDK 都提供了一个 OTLP 导出器,可以配置该导出器来通过 OTLP 导出数据。然后,OpenTelemetry SDK 会将事件转换为 OTLP 数据。
OTLP 是代理(配置为导出器)和收集器(配置为接收器)之间的通信。
Collector
收集器(Collector)是 OpenTelemetry 的一个组件,它接收遥测数据(span、metrics、logs 等),处理(预处理数据)并导出数据(将其发送到想要的通信后端)。
接收器(Receiver)
收集器可以被配置为从各种来源接收各种格式的遥测数据。一旦接收到,所有这些数据都会被转换为 OTLP。OpenTelemetry 同时支持基于推和拉的接收器。
处理器(Processor)
一旦接收器将遥测数据转换为 OTLP,就会有各种处理器可用。处理器可以被配置为执行各种任务。
- 清洗数据以删除敏感数据,如 PII(个人身份信息)。
- 数据规范化,例如将数据源的旧版本转换为与当前后台使用的仪表盘和查询相匹配的版本。
- 根据某些属性将数据路由到特定的后端。例如,将与欧盟用户有关的数据存储在欧盟境内托管的存储系统上。
- 基于尾部的采样,以帮助确保错误和异常值更有可能被捕获,同时对嘈杂和无趣的信息进行速率限制。
导出器(Exporter)
一旦遥测数据被处理,它可以被输出到各种后端,OTLP 可以被转换为目前流行的系统所支持的许多格式。
除了将遥测数据转换为单一格式外,还可以安装多个导出器。遥测数据可以按类型分开,并发送到不同的后端。例如,将追踪数据发送到 Jaeger,将度量数据发送到 Prometheus。
管道(Pipeline)
收集器允许接收器、处理器和导出器组合成复杂的管道(pipeline),可以同时运行。
和skywalking 对比
OpenTelemetry和Skywalking都是用于应用程序性能监控和分布式追踪的工具,但它们之间有一些区别:
- 开源社区支持:OpenTelemetry是由云原生计算基金会(CNCF)支持的开源项目,而Skywalking是Apache软件基金会的顶级项目。
- 语言支持:OpenTelemetry支持多种编程语言,包括Java、Python、Go等,而Skywalking主要支持Java和.NET。
- 数据采集方式:OpenTelemetry通过标准的API和插件机制来收集数据,而Skywalking采用Agent的方式来收集数据。
- 生态系统:OpenTelemetry有一个庞大的生态系统,包括多个厂商和社区的支持,可以方便地集成各种监控工具和服务。而Skywalking的生态系统相对较小,支持的插件和集成相对有限。
总的来说,OpenTelemetry是一个更加通用、灵活和开放的监控和追踪工具,适用于各种不同场景和环境。而Skywalking更专注于Java和.NET应用程序的监控和追踪,可以提供更深度的性能分析和优化。选择哪个工具取决于具体的需求和使用场景。
查看更多
崔亮的博客-专注devops自动化运维,传播优秀it运维技术文章。更多原创运维开发相关文章,欢迎访问https://www.cuiliangblog.cn
相关文章:
入门OpenTelemetry——可观测性与链路追踪介绍
可观测性 什么是可观测性 可观察性(Observability)是从外部输出知识中推断所获得,可理解为衡量一个系统内部状态的方法。可观测性是一种能力,它能帮助你回答系统内部发生了什么——无需事先定义每种可能的故障或状态。系统的可观…...
c#队列及其操作
可以用数组、链表实现队列,大致与栈相似,简要介绍下队列实现吧。值得注意的是循环队列判空判满操作,在用链表实现时需要额外思考下出入队列条件。 设计头文件 #ifndef ARRAY_QUEUE_H #define ARRAY_QUEUE_H#include <stdbool.h> #incl…...
【Linux C/C++开发】轻量级关系型数据库SQLite开发(包含性能测试代码)
前言 之前的文件分享过基于内存的STL缓存、环形缓冲区,以及基于文件的队列缓存mqueue、hash存储、向量库annoy存储,这两种属于比较原始且高效的方式。 那么,有没有高级且高效的方式呢。有的,从数据角度上看,࿰…...
77. 组合【 力扣(LeetCode) 】
文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 77. 组合 一、题目描述 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 二、测试用例 示例 1: 输入&…...
GpuGeek全栈AI开发实战:从零构建企业级大模型生产管线(附完整案例)
目录 背景一、算力困境:AI开发者的「三重诅咒」1.1 硬件成本黑洞1.2 资源调度失衡1.3 环境部署陷阱 二、三大核心技术突破GpuGeek的破局方案2.1 分时切片调度引擎(Time-Slicing Scheduler)2.2 异构计算融合架构2.3 AI资产自动化…...
LeetCode 热题 100_颜色分类(98_75_中等_C++)(技巧)(计数;双指针)
LeetCode 热题 100_颜色分类(98_75_中等_C) 题目描述:输入输出样例:题解:解题思路:思路一(计数):思路二(双指针): 代码实现代码实现&a…...
【前端】:单 HTML 去除 Word 批注
在现代办公中,.docx 文件常用于文档编辑,但其中的批注(注释)有时需要在分享或归档前被去除。本文将从原理出发,深入剖析如何在纯前端环境下实现对 .docx 文件注释的移除,并提供完整的实现源码。最后&#x…...
TTS-Web-Vue系列:Vue3实现内嵌iframe文档显示功能
🖼️ 本文是TTS-Web-Vue系列的新篇章,重点介绍如何在Vue3项目中优雅地实现内嵌iframe功能,用于加载外部文档内容。通过Vue3的响应式系统和组件化设计,我们实现了一个功能完善、用户体验友好的文档嵌入方案,包括加载状态…...
AWS CloudTrail日志跟踪启用
问题 启用日志管理。 步骤 审计界面,如下图: 点击创建跟踪,AWS云就会记录AWS账号在云中的操作。...
PHP 编程:现代 Web 开发的基石与演进
引言 PHP(Hypertext Preprocessor)自1995年诞生以来,已成为全球最流行的服务器端脚本语言之一。尽管近年来Node.js、Python等语言在特定领域崭露头角,但PHP仍占据着超过78%的网站市场份额(W3Techs数据)。本…...
NAT/代理服务器/内网穿透
目录 一 NAT技术 二 内网穿透/内网打洞 三 代理服务器 一 NAT技术 跨网络传输的时候,私网不能直接访问公网,就引入了NAT能讲私网转换为公网进行访问,主要解决IPv4(2^32)地址不足的问题。 1. NAT原理 当某个内网想访问公网,就必…...
[已解决] VS Code / Cursor / Trae 的 PowerShell 终端 conda activate 进不去环境的常见问题
背景 PS C:\Users\Lenovo\WPSDrive\669715199_3\WPS云盘\课程\研一\ROAS5700 Robot Motion Planning and Control\Final\LaTex报告\final-v1> conda activate mpPS C:\Users\Lenovo\WPSDrive\669715199_3\WPS云盘\课程\研一\ROAS5700 Robot Motion Planning and Control\Fin…...
Kuka AI音乐AI音乐开发「人声伴奏分离」 —— 「Kuka Api系列|中文咬字清晰|AI音乐API」第6篇
导读 今天我们来了解一下 Kuka API 的人声与伴奏分离功能。 所谓“人声伴奏分离”,顾名思义,就是将一段完整的音频拆分为两个独立的轨道:一个是人声部分,另一个是伴奏(乐器)部分。 这个功能在音乐创作和…...
深度伪造对知识产权保护的新挑战与应对之策
首席数据官高鹏律师团队 在科技的飞速发展带来了诸多便利的同时,也引发了一系列复杂的法律问题,其中深度伪造技术对知识产权保护的冲击尤为显著,亟待引起广泛关注与深入探讨。 深度伪造,简单来说,是借助先进的人工智…...
【嵌入式开发-软件定时器】
嵌入式开发-软件定时器 ■ 1.■ 2.■ 3.■ 4. ■ 1. ■ 2. ■ 3. ■ 4....
3天重庆和成都旅游规划
重庆和成都都是大城市,各自都有丰富的旅游资源。如果要在三天内两头都游览,可能需要合理安排时间,确保既能体验到重庆的特色,又能在成都游览主要景点。然而,考虑到交通时间,如果从重庆到成都需要一定的时间…...
JAVA中的文件操作
文章目录 一、文件认识(一)文件的分类(二)目录结构 二、文件操作(一)File类1.属性2.构造方法3.方法 (二)File类的具体使用1.文件路径的查看2.文件的基本操作(1࿰…...
深度解析网闸策略:构建坚固的网络安全防线
深度解析网闸策略:构建坚固的网络安全防线 在数字化浪潮中,网络安全已成为企业、机构乃至国家稳定发展的关键要素。随着网络攻击手段日益复杂多样,传统的网络安全防护措施难以满足日益增长的安全需求。网闸作为一种先进的网络安全设备&#x…...
【Rust trait特质】如何在Rust中使用trait特质,全面解析与应用实战
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
滑动窗口算法笔记
力扣209 题目分析:想象一个窗口遍历着这个数组,不断扩大右边界,让r。往窗口中添加数字: 此时我们找到了这个窗口,它的和满足了大于等于target的条件,题目让我求最短的,那么我们就尝试来缩短它&…...
Problem A: 歌手打分
1.题目描述 在歌唱比赛中,共有10位评委进行打分,在计算歌手得分时,去掉一个最高分,去掉一个最低分,然后剩余的8位评委的分数进行平均,就是该选手的最终得分。输入每个评委的评分,求某选手的得分…...
容器安全-核心概述
文章摘要 本文探讨了容器安全的四个核心类别,包括环境基础设施安全、镜像安全、运行时安全和生态安全。尽管 EDR 能提供主机安全层面的部分防护,但无法覆盖容器的镜像安全和生态安全。容器的镜像安全和生态安全问题,如镜像漏洞、恶意镜像、容…...
Golang实践录:在go中使用curl实现https请求
之前曾经在一个 golang 工程调用 libcur 实现 https的请求,当前自测是通过的。后来迁移到另一个小系统出现段错误,于是对该模块代码改造,并再次自测。 问题提出 大约2年前,在某golang项目使用libcurl进行https请求(参…...
nvrtc环境依赖
一 下载 1.1 添加nvidia的源(不同于pypi) pip install nvidia-pyindex 1.2 pip dowload 执行 pip download nvidia-cuda-runtime nvidia-cuda-python 会发现文件夹多了以下几个文件 而需要安装的则只有红框的三个文件, 二 安装 对红框的…...
【计算机视觉】OpenCV实战项目:GraspPicture 项目深度解析:基于图像分割的抓取点检测系统
GraspPicture 项目深度解析:基于图像分割的抓取点检测系统 一、项目概述项目特点 二、项目运行方式与执行步骤(一)环境准备(二)项目结构(三)执行步骤 三、重要逻辑代码解析(一&#…...
Redis持久化存储
我们知道Redis是将数据放在内存中的,那怎么做到持久化存储呢?很简单,就是内存存一份,硬盘也存一份.那么两个地方都存会不会影响效率?答案是影响是不大的,要看具体的策略.同时也要注意内存的数据和硬盘中的数据可能会有一点不同.这也是取决于策略的不同. Redis持久化存储的两个…...
网络检测工具InternetTest v8.9.1.2504 单文件版,支持一键查询IP/DNS、WIFI密码信息
—————【下 载 地 址】——————— 【本章下载一】:https://drive.uc.cn/s/295e068b79314 【本章下载二】:https://pan.xunlei.com/s/VOQDXguH0DYPxrql5y2zlkhTA1?pwdg2nx# 【百款黑科技】:https://ucnygalh6wle.feishu.cn/wiki/…...
elpis-core: 基于 Koa 实现 web 服务引擎架构设计解析
前言 内容来源于抖音【哲玄前端】大佬的《大前端全栈实践》课程,此课程是从零开始做一个企业级的全栈应用框架。此框架是基于koa.js构建的服务引擎,对BFF层的框架封装,让我感受颇深。 整体elpis项目架构设计 elpis-core设计思路 可以看到elpi…...
计算机网络-MPLS LDP基础实验配置
前面我们学习了LDP的会话建立、标签发布与交换、LDP的工作原理,今天通过一个基础实验来加深记忆。 一、LDP基础实验 实验拓扑: 1、IGP使用OSPF进行通告,使用Lookback接口作为LSR ID,LDP ID自动生成。 2、实验目的:使…...
搜索二维矩阵 II
存储m和n,用i表示行,j表示列,i从最后一行开始遍历,j从0开始遍历,当前值比目标值小j,反之i-- class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int…...
C++中如何实现一个单例模式?
单利模式是指对象在整个程序中只有一个实例,提供一个访问方法供全局访问。实现单例模式有如下要求: 1.私有化构造函数:将构造函数定义为私有,以防外部通过构造函数创建其它实例。 2.静态实例:在内部提供一个静态实例…...
进程与线程
进程与线程:计算机世界的"公司与员工" 进程与线程的本质区别 进程(Process)是计算机中独立运行的程序实例,拥有自己的内存空间和系统资源;而线程(Thread)是进程内的执行单元,共享所属进程的资源,但拥有独立的执行路径。 🏢 生活类比:想象一个大型企业的运…...
JDK 命令行工具大全与学习方法总结 —— 从帮助文档到高效实践
JDK 命令行工具大全与学习方法总结 —— 从帮助文档到高效实践 Java开发与运维过程中,JDK自带的命令行工具是定位问题、性能调优、编译调试的基石。本文全面梳理JDK常用命令工具、帮助文档的获取方式,并总结类似Linux命令行的学习方法,助你系…...
行业趋势与技术创新:驾驭工业元宇宙与绿色智能制造
引言 制造业发展的新格局:创新势在必行 当今制造业正经历深刻变革,面临着供应链波动、个性化需求增长、可持续发展压力以及技能人才短缺等多重挑战。在这样的背景下,技术创新不再是可有可无的选项,而是企业保持竞争力、实现可持…...
代码随想录算法训练营第三十九天(打家劫舍专题) | 198.打家劫舍、213.打家劫舍II、337.打家劫舍III
一、198.打家劫舍 题目链接:198. 打家劫舍 - 力扣(LeetCode) 文章讲解:代码随想录 视频讲解:动态规划,偷不偷这个房间呢?| LeetCode:198.打家劫舍_哔哩哔哩_bilibili 1. 思路 大家如…...
Linux514 rsync 解决方案环境配置
节点ab都改为NAT模式 网关和VMnet8网卡不一致 ping 不通外网 ping不通外网 是这里的问题吗 怎么突然就ping通了 没改啥啊 上面改了dhcp范围后 ping还是ping不通 为啥现在又ping通了 设置节点b 推测应该是dhcp范围问题 今日源码 节点b MX...
STM32F103_LL库+寄存器学习笔记23 - PWM波形输出及软件方式调整周期与占空比
导言 脉宽调制(PWM)是 STM32 定时器最常用的输出模式之一,广泛应用于电机驱动、LED 调光、伺服控制和功率管理等场景。本篇文章将以 TIM5 为例,从寄存器层面深入剖析 PWM 输出的原理与实现步骤。通过本篇博客,你不仅能…...
Canvas知识框架
一、Canvas基础 核心概念 Canvas是位图绘图区域,通过JavaScript(或Python等)动态绘制图形。 坐标系:左上角为原点 (0, 0),x向右递增,y向下递增。 绘图流程: const canvas document.getElemen…...
【SSL证书系列】客户端如何验证https网站服务器发的证书是否由受信任的根证书签发机构签发
客户端验证HTTPS网站证书是否由受信任的根证书颁发机构(CA)签发,是一个多步骤的过程,涉及证书链验证、信任锚(Trust Anchor)检查、域名匹配和吊销状态验证等。以下是详细的验证流程: 1. 证书链的…...
spark小任务
import org.apache.spark.{Partitioner, SparkConf, SparkContext}object PartitionCustom {// 分区器决定哪一个元素进入某一个分区// 目标: 把10个分区器,偶数分在第一个分区,奇数分在第二个分区// 自定义分区器// 1. 创建一个类继承Partitioner// 2. …...
git push 报错:send-pack: unexpected disconnect while reading sideband packet
背景 新建了一个仓库,第一次push 代码文件,文件中有一个依赖的jar,有80MB,结果push的时候报错。 错误信息 error: RPC failed; HTTP 500 curl 22 The requested URL returned error: 500 send-pack: unexpected disconnect whi…...
读入csv文件写入MySQL
### 使用 Spark RDD 读取 CSV 文件并写入 MySQL 的实现方法 #### 1. 环境准备 在使用 Spark 读取 CSV 文件并写入 MySQL 数据库之前,需要确保以下环境已配置完成: - 添加 Maven 依赖项以支持 JDBC 连接。 - 配置 MySQL 数据库连接参数,包括 …...
5.18-AI分析师
强化练习1 神经网络训练案例(SG) #划分数据集 #以下5行需要背 folder datasets.ImageFolder(rootC:/水果种类智能训练/水果图片, transformtrans_compose) n len(folder) n1 int(n*0.8) n2 n-n1 train, test random_split(folder, [n1, n2]) #训…...
腾讯云运营开发 golang一面
redis为什么单线程会快 每秒10w吞吐量 io多路复用 一个文件描述符整体拷贝;调用epoll_ctl 单个传递 内核遍历文件描述符判断是否有事件发送;回调函数列表维护 修改有事件发送的socket为可读或可写,返回整个文件描述符;返回链…...
spark数据压缩
### Spark 数据压缩方法及其实现 在大数据处理框架中,数据压缩是一个重要的环节,它不仅能够减少磁盘占用空间,还能降低网络传输成本。然而,在分布式计算环境中(如 Spark),选择合适的压缩编解码…...
synchronized关键字详解
synchronized关键字详解 1. 基本概念与使用方式 作用:确保多个线程在访问共享资源时的互斥性,防止数据不一致。使用方式: 修饰实例方法:锁对象为当前实例(this)。public synchronized void instanceMethod() {// 同步代码 }修饰静态方法:锁对象为类的Class对象。public…...
React useState 的同步/异步行为及设计原理解析
一、useState 的同步/异步行为 异步更新(默认行为) • 场景:在 React 合成事件(如 onClick)或生命周期钩子(如 useEffect)中调用 useState 的更新函数时,React 会将这些更新放入队列…...
《社交应用动态表情:RN与Flutter实战解码》
React Native依托于JavaScript和React,为动态表情的实现开辟了一条独特的道路。其核心优势在于对原生模块的便捷调用,这为动态表情的展示和交互提供了强大支持。在社交应用中,当用户点击发送动态表情时,React Native能够迅速调用相…...
【Oracle专栏】清理告警日志、监听日志
Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.背景 今天在导入数据库时,发现之前可以导入,今天导入时居然报空间不足,于是检查是哪里占用空间比较大。检查回收站、归档日志,发现没有。然后检查告警日志、监听日志,发现果然占用空间比较大,于是进行…...
Ubuntu24.04编译ORB_SLAM的一系列报错解决
Ubuntu24.04编译ORB_SLAM的一系列报错解决 decay_t报错 报错信息:error: ‘decay_t’ is not a member of ‘std’;did you mean ‘decay’ 将CMakeLists.txt中第17行的c标准修改为c14即可: 修改前: CHECK_CXX_COMPILER_FLAG…...