分布式链路跟踪
目录
链路追踪简介
基本概念
基于代理(Agent)的链路跟踪
基于 SDK 的链路跟踪
基于日志的链路跟踪
SkyWalking
Sleuth + ZipKin
链路追踪简介
分布式链路追踪是一种监控和分析分布式系统中请求流动的方法。它能够记录和分析一个请求在系统中经历的每一步操作,帮助开发者和运维人员了解系统的性能和行为。在微服务架构中,一个请求可能会跨越多个服务节点,而每个服务节点又可能依赖其他多个服务。分布式链路追踪通过生成一个唯一的跟踪ID(Trace ID),并在每个服务节点生成一个跨度(Span),记录每个操作的详细信息,从而形成完整的请求链路。
基本概念
Span 和 Trace
Trace:表示一个完整的请求链路,从请求发起到请求完成,包含了所有相关的 Spans。
Span:表示 Trace 中的一个单独的操作单元,包含操作的开始时间、结束时间、操作名称、相关的元数据(如标签、日志)等信息。一个 Trace 由多个 Spans 组成,形成一个有向无环图(DAG)。
实现方式: 【application名称+Traceid+spanid 】
分布式链路追踪(Distributed Tracing),就是将一次分布式请求还原成调用链路,进行日志记录,性能监控并将一次分布式请求的调用情况集中展示。比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。
链路跟踪在分布式系统中至关重要,它主要有以下几类,各自具有不同作用和使用方式:
基于代理(Agent)的链路跟踪
- 作用:
- 透明性高:对应用代码侵入性小,通过在应用启动时加载代理,自动收集链路数据。应用开发者无需在业务代码中大量添加跟踪相关代码,就能实现链路跟踪功能。
- 全面收集数据:能自动捕获应用与外部服务(如数据库、消息队列)的交互,全面记录请求从进入应用到离开应用的完整路径,包括网络调用、数据库查询等细节,有助于分析整个分布式系统的调用关系和性能瓶颈。
- 使用方式:
- 选择代理工具:如 SkyWalking Agent、Pinpoint Agent 等。以 SkyWalking Agent 为例,下载对应版本的 Agent 包后,在应用启动命令中添加代理参数,如
java -javaagent:/path/to/skywalking-agent.jar -Dskywalking.agent.service_name=your_service_name -jar your_application.jar
。 - 配置代理参数:可在配置文件中设置代理的各种参数,如指定后端收集器地址、采样率等。例如在 SkyWalking 中,可在
agent.config
文件里配置collector.backend_service
指定后端服务地址。
- 选择代理工具:如 SkyWalking Agent、Pinpoint Agent 等。以 SkyWalking Agent 为例,下载对应版本的 Agent 包后,在应用启动命令中添加代理参数,如
基于 SDK 的链路跟踪
- 作用:
- 定制性强:开发者可以根据业务需求灵活定制链路跟踪逻辑。比如在特定业务场景下,对某些关键操作添加自定义的跟踪标签或注释,更精准地记录和分析业务相关的性能指标。
- 深度集成:与应用代码深度结合,能获取更详细的业务上下文信息。例如,在电商下单场景中,可将订单 ID、用户信息等业务关键数据作为跟踪信息的一部分,方便排查与业务逻辑紧密相关的问题。
- 使用方式:
- 引入 SDK:根据所选择的链路跟踪系统,在项目中引入相应的 SDK。例如,使用 Jaeger 时,对于 Java 项目,在
pom.xml
中添加io.jaegertracing:jaeger - client - java
依赖。 - 代码埋点:在业务代码中合适的位置添加跟踪代码。例如,在方法入口处创建跨度(Span),在方法结束时结束跨度,并在过程中记录关键信息。以下是使用 Jaeger SDK 在 Java 中简单创建跨度的示例代码:
- 引入 SDK:根据所选择的链路跟踪系统,在项目中引入相应的 SDK。例如,使用 Jaeger 时,对于 Java 项目,在
import io.jaegertracing.Configuration;
import io.jaegertracing.internal.JaegerTracer;
import io.opentracing.Span;
import io.opentracing.Tracer;
import io.opentracing.util.GlobalTracer;public class ExampleService {private static final Tracer tracer;static {Configuration.SamplerConfiguration samplerConfig = Configuration.SamplerConfiguration.fromEnv().withType("const").withParam(1);Configuration.ReporterConfiguration reporterConfig = Configuration.ReporterConfiguration.fromEnv().withLogSpans(true);Configuration config = new Configuration("example - service").withSampler(samplerConfig).withReporter(reporterConfig);tracer = config.getTracer();GlobalTracer.register(tracer);}public void doBusinessLogic() {Span span = tracer.buildSpan("doBusinessLogic").start();try {// 业务逻辑代码} finally {span.finish();}}
}
基于日志的链路跟踪
- 作用:
- 兼容性好:几乎适用于所有类型的应用,无论应用采用何种技术栈、框架,只要能记录日志,就可实现链路跟踪。这对于一些老旧系统或难以引入其他链路跟踪工具的场景非常适用。
- 辅助排查:通过在日志中添加特定的跟踪标识(如 Trace ID、Span ID),当系统出现问题时,可以根据这些标识从大量日志中快速定位相关联的日志记录,分析问题发生的过程。
- 使用方式:
- 添加跟踪标识到日志:在应用代码中,在记录日志的地方添加 Trace ID 和 Span ID 等跟踪标识。例如,在使用 Logback 作为日志框架的 Java 应用中,可通过 MDC(Mapped Diagnostic Context)来实现。首先在请求入口处生成 Trace ID 并放入 MDC,如下:
import org.slf4j.MDC;
import java.util.UUID;public class RequestInterceptor {public void intercept() {String traceId = UUID.randomUUID().
SkyWalking
- 简介:SkyWalking 是一个开源的应用性能监控(APM)系统,专为微服务、云原生架构和基于容器(Docker、Kubernetes)的架构而设计。它提供了分布式链路跟踪、性能指标分析、应用拓扑图展示等功能。
- 特点:
- 低侵入性:通过 Java Agent 方式,对应用代码的侵入性极小,只需要在启动命令中添加相关参数即可启用链路跟踪,无需在业务代码中大量添加跟踪代码。
- 多语言支持:不仅支持 Java,还支持 C++、.NET、Node.js、Python 等多种语言,适用于异构的分布式系统。
- 丰富的可视化界面:其自带的 Web UI 可以直观地展示服务拓扑、链路详情、性能指标等信息,方便运维和开发人员进行问题排查和性能优化。
- 使用步骤:
- 安装 SkyWalking:从 SkyWalking 官方GitHub Releases下载安装包,解压后启动后端和前端。启动后端可在
bin
目录下执行startup.sh
(Windows 下为startup.bat
),前端默认端口为 8080,可通过浏览器访问http://localhost:8080
查看监控数据。 - 集成到应用:对于 Java 应用,在
pom.xml
中添加依赖:
- 安装 SkyWalking:从 SkyWalking 官方GitHub Releases下载安装包,解压后启动后端和前端。启动后端可在
<dependency><groupId>org.apache.skywalking</groupId><artifactId>apm - agent - core</artifactId><version>[具体版本号]</version>
</dependency>
<dependency><groupId>org.apache.skywalking</groupId><artifactId>apm - spring - boot - starter</artifactId><version>[具体版本号]</version>
</dependency>
然后在application.properties
中配置 SkyWalking 相关参数,如:
skywalking.agent.service_name=your - service - name
skywalking.collector.backend_service=localhost:11800
Sleuth + ZipKin
sleuth : 链路追踪器
zipkin:链路分析器(可视化)
- 简介:
- Spring Cloud Sleuth:它是 Spring Cloud 体系中用于分布式链路跟踪的工具包,为 Spring Boot 应用提供了自动配置的分布式跟踪支持。它会自动为应用生成 Trace ID 和 Span ID 等跟踪信息,并将这些信息注入到 HTTP 请求头中,实现跨服务的链路跟踪。
- ZipKin:是一个分布式跟踪系统,它接收、存储和查询链路数据。它可以与 Sleuth 配合使用,Sleuth 负责收集链路数据并发送给 ZipKin,ZipKin 提供可视化界面来展示链路跟踪信息。
- 特点:
- 与 Spring 生态集成好:Sleuth 与 Spring Boot、Spring Cloud 紧密集成,对于使用 Spring 技术栈构建的微服务系统,使用起来非常方便,几乎可以做到开箱即用。
- 数据收集和存储灵活:ZipKin 支持多种存储后端,如内存、MySQL、Elasticsearch 等,可以根据实际需求选择合适的存储方式来存储链路数据。
- 使用步骤:
- 添加依赖:在 Spring Boot 项目的
pom.xml
中添加 Sleuth 和 ZipKin 相关依赖:
- 添加依赖:在 Spring Boot 项目的
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring - cloud - starter - sleuth</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring - cloud - starter - zipkin</artifactId>
</dependency>
- 配置 ZipKin Server:可以通过 Docker 快速启动一个 ZipKin Server 实例:
docker run -d -p 9411:9411 openzipkin/zipkin
- 配置应用:在
application.properties
中配置 ZipKin 地址:
spring.zipkin.base - url=http://localhost:9411
spring.sleuth.sampler.probability=1.0
这里spring.sleuth.sampler.probability
设置为 1.0 表示对所有请求进行采样跟踪,实际应用中可根据需要调整采样率。
- 对比
- 易用性:
- SkyWalking:对于 Java 应用,通过简单配置 Java Agent 即可启用,对业务代码侵入小,上手相对容易。在异构系统中,多语言支持使其能统一管理不同语言编写的服务的链路跟踪。
- 易用性:
- Sleuth + ZipKin:在 Spring 生态系统内,借助 Spring Boot 的自动配置特性,整合较为便捷,开发人员可以快速上手。然而,对于非 Spring 技术栈的应用,集成难度较大,需要额外的工作来实现跨语言的链路跟踪。
- 性能影响:
- SkyWalking:通过 Java Agent 方式实现链路数据收集,在设计上注重对应用性能的低影响。其采用字节码增强技术,在运行时对类进行增强以收集数据,并且支持灵活的采样策略,可在保证获取足够链路信息的同时,尽量减少对应用性能的损耗。
- Sleuth + ZipKin:Sleuth 在应用内收集链路数据,其对性能的影响取决于采样率设置以及应用内跟踪逻辑的复杂程度。如果采样率过高或跟踪逻辑过于复杂,可能会对应用性能产生一定影响。此外,数据发送到 ZipKin Server 的网络开销也需要考虑。
- 功能特性:
- SkyWalking:除了基本的链路跟踪功能外,还提供了丰富的性能指标分析功能,如服务的响应时间、吞吐量等。其拓扑图展示功能能直观呈现分布式系统中各个服务之间的依赖关系,并且支持告警功能,可根据设定的阈值对性能指标进行实时监控和告警。
- Sleuth + ZipKin:主要聚焦于链路跟踪和可视化展示,通过 ZipKin 的界面可以清晰查看请求的调用链路、每个 Span 的耗时等信息。虽然也能获取一些基本的性能指标,但在指标分析的丰富度和深度上,相较于 SkyWalking 略显不足。同时,ZipKin 本身的告警功能相对较弱,通常需要借助外部工具实现复杂的告警策略。
- 数据存储与扩展性:
- SkyWalking:支持多种存储方式,包括 H2(默认,适合测试环境)、MySQL、Elasticsearch 等。在扩展性方面,通过集群部署方式可以应对大规模分布式系统的链路数据存储和处理需求,能够水平扩展以处理高并发的链路数据收集和查询请求。
- Sleuth + ZipKin:ZipKin 支持内存、MySQL、Elasticsearch 等存储后端。在扩展性方面,虽然也可以通过集群部署来提升性能和存储能力,但在面对超大规模分布式系统时,其架构可能需要更精细的优化和调整,以确保数据的高效存储和查询。例如,在高并发场景下,Elasticsearch 作为存储后端时,需要合理配置索引策略和集群参数。
参考:微服务—链路追踪(Sleuth+Zipkin)_sleuth zipkin-CSDN博客
原来10张图就可以搞懂分布式链路追踪系统原理-阿里云开发者社区
相关文章:
分布式链路跟踪
目录 链路追踪简介 基本概念 基于代理(Agent)的链路跟踪 基于 SDK 的链路跟踪 基于日志的链路跟踪 SkyWalking Sleuth ZipKin 链路追踪简介 分布式链路追踪是一种监控和分析分布式系统中请求流动的方法。它能够记录和分析一个请求在系统中经历的每…...
从数据中台到数据飞轮:实现数据驱动的升级之路
从数据中台到数据飞轮:实现数据驱动的升级之路 随着数字化转型的推进,数据已经成为企业最重要的资产之一,企业普遍搭建了数据中台,用于整合、管理和共享数据;然而,近年来,数据中台的风潮逐渐减退…...
深入解析Java序列化:从使用到原理
在此之前,对于 Java 中的序列化,我一直停留在使用层面 —— 把需要序列化在网络上传输的类实现Serializable接口就可以了 但对于这块知识点,随着工作年限的提升,我觉得必须要好好研究下它了,不能似懂非懂的只知道使用。…...
Python面向对象编程(OOP)深度解析:从封装到继承的多维度实践
引言 面向对象编程(Object-Oriented Programming, OOP)是Python开发中的核心范式,其三大特性——封装、继承、多态——为构建模块化、可维护的代码提供了坚实基础。本文将通过代码实例与理论结合的方式,系统解析Python OOP的实现机制与高级特性…...
传输层:UDP协议
1.UDP协议特点 2.UDP报文格式 如下: 校验和的计算: 3.例子 UDP(User Datagram Protocol,用户数据报协议)是一种无连接的传输层协议,其报文格式简单高效,适用于对实时性要求高但允许少量丢包的…...
使用WebStorm打断点调试Vue项目
1:打开WebStorm,先配置vue启动的服务,如下 2:如果上面的选择第4步空白,,就先启动过vue项目,或者在packege.json启动过,就可以直接添加npm服务 3:使用Debug启动项目 4&…...
AI助力:零基础开启编程之旅
一、代码调试 三步解决BUG 1. 错误信息翻译 指令模板: 错误诊断模式我遇到【编程语言】报错“粘贴报错信息“ 请: 用小白能懂的话解释问题本质标注可能引发该错误的三个场景给出最可能的修复方案和其他备选方案 2. 上下文分析 进阶指令 结合上下文代…...
信息学奥赛一本通 1535:【例 1】数列操作
【题目链接】 ybt 1535:【例 1】数列操作 【题目考点】 1. 树状数组 【解题思路】 本题为树状数组模板题,维护区间和,进行单点修改,区间查询。 详细讲解见:洛谷 P3374 【模板】树状数组 1(树状数组解法…...
MQTT协议详解:物联网通信的轻量级解决方案
MQTT协议详解:物联网通信的轻量级解决方案 引言 在物联网(IoT)快速发展的今天,设备间高效可靠的通信变得至关重要。MQTT(Message Queuing Telemetry Transport)作为一种轻量级的发布/订阅协议,已成为物联网通信的首选解决方案。本文将深入探…...
【时时三省】(C语言基础)使用字符串处理函数
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 在C函数库中提供了一些用来专门处理字符串的函数,使用方便。几乎所有版本的C语言编译系统都提供这些函数。下面介绍几种常用的函数。 ①puts函数 输出字符串的函数 其一般形式…...
工具学习_VirusTotal使用
VirusTotal Intelligence 允许用户在其庞大的数据集中进行搜索,以查找符合特定条件的文件,例如哈希值、杀毒引擎检测结果、元数据信息、提交时的文件名、文件结构特征、文件大小等。可以说,它几乎是恶意软件领域的“谷歌搜索引擎”。 网页使…...
Linux下mysql的安装与远程链接
linux安装mysql 01下载依赖: 找到网址/download下: 最下面MySQL Community(mysql社区版) 选择MySQL Community Server 选择对应的mysql版本 操作系统版本选择 根据操作系统的版本选择具体版本号 下载离线版本 安装包详情 0…...
WebpackVite总结篇与进阶
模块化 Webpack Webpack 入口entry 分离app和第三方库入口 这是什么? 这是告诉 webpack 我们想要配置 2 个单独的入口点(例如上面的示例)。 为什么? 这样你就可以在 vendor.js 中存入未做修改的必要 library 或文件࿰…...
数据工具:数据同步工具、数据血缘工具全解析
目录 一、数据同步工具 (一)数据同步工具的定义与基本原理 (二)数据同步工具的类型 (三)数据同步工具的应用场景 二、数据血缘工具 (一)数据血缘工具的定义与作用 ࿰…...
贪吃蛇游戏排行榜模块开发总结:从数据到视觉的实现
一、项目背景与成果概览 在完成贪吃蛇游戏核心玩法后,本次开发重点聚焦于排行榜系统的实现。该系统具备以下核心特性: 🌐 双数据源支持:本地存储(localStorage)与远程API自由切换 🕒 时间维度统计:日榜/周榜/月榜/全时段数据筛选 🎮 模式区分:闯关模式(关卡进度…...
亚远景-基于ASPICE的汽车供应链质量管控培训
以下是一份基于ASPICE的汽车供应链质量管控培训的介绍: 培训目标 理解ASPICE核心概念:帮助学员全面掌握ASPICE的框架结构、最新版本的更新内容,深入理解过程评估模型和参考模型的实际应用。 提升开发过程成熟度:通过培训&#x…...
【工作记录】Kong Gateway 入门篇之部署及简单测试
Kong Gateway部署 Kong Gateway 可以通过多种方式部署,包括 Docker、Kubernetes、以及直接安装在操作系统上。以下是常见的部署方法: 使用 Docker 部署 安装 Docker 和 Docker Compose。创建一个 docker-compose.yml 文件,内容如下&#x…...
【Qt】之音视频编程1:QtAV的背景和安装篇
QtAV 背景与核心概念 1. 什么是 QtAV? QtAV 是一个基于 Qt 框架 和 FFmpeg 的多媒体播放库,旨在为 Qt 应用程序提供高性能、跨平台的音视频播放、处理及渲染功能。它封装了 FFmpeg 的底层编解码能力,并通过 Qt 的图形系统(如 QM…...
Centos7安装部署wordpress个人博客保姆级教程
目录 关闭防火墙修改yum镜像源安装 php安装mysql安装nginx关闭SELinux配置nginx转发php文件到fpm服务下载wordpress与配置 centos: 7 php:8.1.29 wordpress:6.8.1 nginx:1.26.1 mysql:5.6.51 关闭防火墙 # 停止防火墙 systemctl stop firewalld # 禁止开启启动 systemctl …...
Python-简单网络编程 I
目录 一、UDP 网络程序1. 通信结构图2. Python 代码实现1)服务器端2)客户端 3. 注意 二、TCP 网络程序1. 通信结构图2. Python 代码实现1)服务器端2)客户端 3. 注意 三、文件下载1. PyCharm 程序传参1)图形化界面传参2…...
深入浅出之STL源码分析8_三个指针
引言 在第一篇文章 深入浅出之STL源码分析1_vector基本操作-CSDN博客 中有引出了下面的几个问题 1.刚才我提到了我的编译器版本是g 11.4.0,而我们要讲解的是STL(标准模板库),那么二者之间的关系是什么?STL安装后我们…...
数据结构(七)——图
一、图的定义与基本术语 1.图的定义 图G由顶点集V和边集E组成,记为G(V,E),其中V(G)表示图G中顶点的有限非空集;E(G)表示图G中顶点之间的关系(边)的集合 注意:线性表可以是空表,树可以是空树&…...
养生:打造健康生活的全方位策略
在生活节奏不断加快的当下,养生已成为提升生活质量、维护身心平衡的重要方式。从饮食、运动到睡眠,再到心态调节,各个方面的养生之道共同构建起健康生活的坚实基础。以下为您详细介绍养生的关键要点,助您拥抱健康生活。 饮食养生…...
数据结构(2)线性表-顺序表
知道一个算法的好坏怎么去判断以后,就该正式的去学习一些常见的数据结构,当然,这里的数据结构仅仅是初阶,不会挨个一个一个学完,后期慢慢来。 一、数据结构总论 一般按照逻辑结构和存储结构来分类,在初阶…...
【深度学习-Day 10】机器学习基石:从零入门线性回归与逻辑回归
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
芯片:金线的作用
一、金线的核心作用:互联芯片与外部封装 金线(Gold Wire)在芯片制造中主要用于引线键合(Wire Bonding),这是将芯片(Die)与外部封装引脚(Lead Frame或Substrateÿ…...
Vue3+uniapp 封装axios
1.第一步在项目根目录新建utils文件夹,里边新建两个文件request.js和uni-api-promisify.js 2.request.js 代码 要安装axios import axios from axios import { showToast } from /utils/uni-api-promisify// 创建axios实例 const service axios.create({baseURL:…...
Nacos源码—9.Nacos升级gRPC分析七
大纲 10.gRPC客户端初始化分析 11.gRPC客户端的心跳机制(健康检查) 12.gRPC服务端如何处理客户端的建立连接请求 13.gRPC服务端如何映射各种请求与对应的Handler处理类 14.gRPC简单介绍 10.gRPC客户端初始化分析 (1)gRPC客户端代理初始化的源码 (2)gRPC客户端启动的源码…...
与智能体高效协作:Kimi交互逻辑探索与提示词设计实践【附kimi提示词合集下载】
引言:智能时代的人机协作新范式 在持续使用多款AI助手完成技术文档分析、数据分析等任务后,我逐渐意识到工具效能的核心不仅在于技术参数,更在于使用者对交互逻辑的理解深度。本文将基于实际项目经验,探讨智能体交互的本质规律&a…...
Web 架构之负载均衡会话保持
文章目录 一、引言二、思维导图三、负载均衡会话保持的概念3.1 定义3.2 作用 四、负载均衡会话保持的实现方式4.1 基于 IP 地址原理代码示例(以 Nginx 为例)注释 4.2 基于 Cookie原理代码示例(以 HAProxy 为例)注释 4.3 基于 SSL …...
遨游卫星电话与普通手机有什么区别?
在数字化浪潮席卷全球的今天,通信设备的角色早已超越传统语音工具,成为连接物理世界与数字世界的核心枢纽。然而,当普通手机在都市丛林中游刃有余时,面对偏远地区、危险作业场景的应急通信需求,其局限性便显露无遗。遨…...
【Redis】谈谈Redis的设计
Redis(Remote Dictionary Service)是一个高性能的内存键值数据库,其设计核心是速度、简单性和灵活性。以下从架构、数据结构、持久化、网络模型等方面解析 Redis 的设计实现原理: 1. 核心设计思想 内存优先:数据主要存…...
聊天项目总结
目前项目 完成了个人信息修改,添加好友,创建群聊,添加群聊,在线状态,删除好友,退出群,解散群,好友申请,群资料修改,群管理,群主转让,…...
智能手表整机装配作业指导书(SOP)
📄 智能手表整机装配作业指导书(SOP) 产品名称:Aurora Watch S1 产品型号:AWS1-BG22 版本号:SOP-AWS1-V1.0 编制日期:2025年5月6日 编制单位:制造工程部(ME)…...
c语言第一个小游戏:贪吃蛇小游戏05
贪吃蛇脱缰自动向右走:脱缰的野蛇 #include <curses.h> #include <stdlib.h> struct snake{ int hang; int lie; struct snake *next; }; struct snake *head; struct snake *tail; void initNcurse() { initscr(); keypad(stdscr,1); } int …...
ES6中的解构
在 JavaScript(包括 TypeScript)中,数组解构和对象解构是 ES6 引入的两个非常实用的语法特性,它们可以帮助我们更方便地从数组或对象中提取数据。 一、数组解构(Array Destructuring) 📌 基本用…...
Pycharm的终端执行allure命令出现command not found
Pycharm的接口自动化项目用的是venv虚拟环境,已下载和配置好Allure路径,查看Allure版本正常。 问题:在重新打开Pycham的项目时,在Pycharm终端中执行allure相关命令就会报错zsh: allure: command not found 原因:在PyC…...
[ctfshow web入门] web72
信息收集 下载index.php并查看,和上题差不多 error_reporting(0); ini_set(display_errors, 0); // 你们在炫技吗? if(isset($_POST[c])){$c $_POST[c];eval($c);$s ob_get_contents();ob_end_clean();echo preg_replace("/[0-9]|[a-z]/i",…...
【Folium】使用离线地图
文章目录 相关文献离线地图下载Folium 使用离线地图 相关文献 Folium — Folium 0.19.5 documentationOffline Map Maker 离线地图下载 我们使用 Offline Map Maker 进行地图下载。 特别注意:Folium 默认支持 WGS84 坐标系,建议下载 WGS84 坐标系的地…...
嵌入式自学第二十天(5.13)
(1)线性表顺序存储的优缺点: 优点:无需为表中逻辑关系添加额外存储空间; 可以快速随机访问元素,时间复杂度O(1)。 缺点:插入删除需要移动元素O(n); 无法动态存储。 …...
ThingsBoard3.9.1 MQTT Topic(4)
本章中的主题适用于网关设备。 1.网关订阅设备属性的topic:v1/gateway/attributes/response 订阅后接收到的响应格式。 { "id":3, "device":"m1", "values":{ "version":"V1.2"…...
centos中JDK_PATH 如何设置
在 CentOS 7.9 中设置 JDK_PATH(即 JAVA_HOME)的步骤如下。JAVA_HOME 是一个环境变量,用于指向 Java 开发工具包(JDK)的安装路径。 1. 查找 JDK 安装路径 首先,你需要找到 JDK 的安装路径。可以通过以下命…...
一次讲清 FP32 / FP16 / BF16 / INT8 / INT4
一次讲清 FP32 / FP16 / BF16 / INT8 / INT4 目标:让你3 分钟读懂格式原理,5 分钟学会选型。 只记一句:“指数定范围,尾数定精度;位宽定显存,硬件定成本”。 1 | 为什么要有这么多格式? …...
PH热榜 | 2025-05-13
1. FirstQuadrant 标语:通过以人为本的人工智能来最大化B2B销售 介绍:销售人工智能,帮助创始人和收益团队提高效率,保持组织有序,并促成更多交易。它通过简化销售幕后工作,确保每个细节都不会遗漏。 产品…...
java基础-泛型
文章目录 目录 文章目录 前言 一、泛型的作用 1.类型安全 2.通用性 这里再举个例子 二、泛型的实现 1.泛型类 2.泛型接口 3.泛型方法 4.T符号的起源(额外) 三、泛型擦除 四、泛型通配符 1.上界通配符( ) 为什么用于…...
对抗帕金森:在疾病阴影下,如何重掌生活主动权?
帕金森病,一种影响全球超 1000 万人的神经退行性疾病,正无声地改变着患者的生活轨迹。随着大脑中多巴胺分泌减少,患者逐渐出现肢体震颤、肌肉僵硬、步态迟缓等症状,甚至连扣纽扣、端水杯这类日常动作都变得艰难。更棘手的是&#…...
网络协议与系统架构分析实战:工具与方法全解
网络协议与系统架构分析实战:工具与方法全解 在互联网系统的开发、运维与安全分析中,协议解析与抓包分析是不可或缺的核心技能。本文将系统梳理主流协议解析工具、协议自动识别方案,并结合实际抓包案例,讲解如何还原和推测底层系…...
使用PocketFlow构建Web Search Agent
前言 本文介绍的是PocketFlow的cookbook中的pocketflow-agent部分。 回顾一下PocketFlow的核心架构: 每一个节点的架构: 具体介绍可以看上一篇文章: “Pocket Flow,一个仅用 100 行代码实现的 LLM 框架” 实现效果 这个Web S…...
基于STM32、HAL库的TLV320AIC3204IRHBR音频接口芯片驱动程序设计
一、简介: ADAU1701JSTZ-RL 是一款高性能音频编解码器 (Codec),专为便携式和低功耗应用设计。它集成了 ADC、DAC、麦克风前置放大器、耳机放大器和数字信号处理功能,支持 I2S/PCM 音频接口和 I2C 控制接口,非常适合与 STM32 微控制器配合使用。 二、硬件接口: 典型的 ST…...
轻量级高性能推理引擎MNN 学习笔记 02.MNN主要API
1. MNN 主要API 注意:本学习笔记只介绍了我在学习过程中常用的API ,更多MNN API 请参考官方文档。 1.1. 推理时操作流程 创建Interpreter : createFromFile()通过Interpreter创建Session :createSession()设置输入数据: getSes…...