前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >10分钟带你彻底搞懂分布式链路跟踪

10分钟带你彻底搞懂分布式链路跟踪

原创
作者头像
写bug的高哈哈
发布于 2025-02-04 08:01:04
发布于 2025-02-04 08:01:04
3850
举报

在分布式系统中,我们基于业务划分服务,并对外暴露服务访问接口。在中大型系统中,可能需要很多个服务相互协同,才能完成一个接口功能。而随着业务的不断扩张,服务之间相互调用关系会越来越复杂。

分布式服务调用链路示意图
分布式服务调用链路示意图

从这张分布式服务调用链路的示意图中,你也可以看到,随着服务数量的不断增加,整个调用链路的分析工作变得越来越复杂。

显然,通过人工手段已经无法完成这种服务调用链路的分析。这时候,我们就需要引入分布式服务跟踪机制,并借助于一定的工具,来实现微服务架构下的服务监控。

分布式服务跟踪基本原理

首先,我们先来分析一下分布式服务跟踪机制的基本原理,这里,你需要先理解两个基本概念: Trace Id 和 Span Id。这两个概念是对服务跟踪最高层次的抽象,也是掌握分布式服务跟踪原理的基础

Trace Id 和 Span Id

  • Trace Id

Trace Id 即跟踪 ID。在分布式架构中,每个请求会生成一个全局的唯一性 ID,通过这个 ID 可以串联起整个调用链,也就是说请求在分布式系统内部流转时,系统需要始终保持传递该唯一性 ID,直到请求返回。这个唯一性 ID 就是 Trace Id。

  • Span Id

Trace Id 代表的是整个调用链路,而针对链路中的各个组成部分,我们也需要引入新的概念。所以,除了 Trace Id 外,我们还需要 Span Id。

Span Id 一般被称为跨度 ID。所谓跨度,就是调用链路中的一段时间,有明确的开始和结束这两个节点,这样通过计算开始时间和结束时间之间的时间差,我们就能明确调用过程在这个 Span 上所产生的时间延迟。

通过我刚才的介绍,相信你不难理解 Trace Id 和 Span Id 之间是一对多的关系,即在一个调用链路中只会存在一个 Trace Id,但会存在多个 Span Id。这样多个 Span Id 之间就会有父子关系,即链路中的前一个 Span Id 是后一个的父 Span Id。

Trace Id 和 Span Id 关系图
Trace Id 和 Span Id 关系图

四种注解

现在你理解了 Trace Id 和 Span Id 的概念。但这还不够,你可以想象在整个调用链路中,势必涉及到客户端与服务端之间的各种网络交互的请求处理过程,这些过程构成了完整调用链路中的各个环节。

所以,我们就要进一步拆分整个分布式调用链路,从而细化控制的粒度。业界一般通过四种不同的注解(Annotation)记录每个服务的客户端请求和服务器响应过程。

  • cs 注解

cs 代表 Client Send,即客户端发送请求,启动整个调用链路。

  • sr 注解

sr 代表 Server Received,即服务端接收请求。显然,(sr-cs)值代表请求从客户端到服务器端所需要的网络传输时间。

  • ss 注解

ss 代表 Server Send,即服务端把请求处理结果返回给客户端。(ss-sr)值代表服务器端处理该请求所需要的时间。

  • cr 注解

cr 代表 Client Received,即客户端接收到服务端响应,结束调用链路。(cr-ss)值代表响应结果从服务器端传输到客户端所需要的时间。

你可以结合这张示意图来进一步理解这四种注解之间的关联关系。

![请求和响应过程中的四种注解

](https://static001.geekbang.org/resource/image/96/34/96efb8df36ef0a12905b27753dd0ef34.png?wh=1101x483)

有了这四个注解之后,我们就可以使用它们来量化整个服务调用链路,从而找出潜在的问题。同样的,你可以看示意图辅助学习。

分布式调用链路中四种注解关联关系示意图
分布式调用链路中四种注解关联关系示意图

在这张图中,你可以看到,这次请求的 Trace Id 是 trace1,而 Span Id 根据不同的服务会发生变化,四种注解构成了客户端和服务器对一次请求处理的闭环。

对于服务 A 而言,cs 是 11:10:44,cr 是 11:10:55,也就说该次服务请求经由服务 A 的整个调用链路时间是 11s(11:10:44-11:10:55)。考虑到一半的响应时间都需要控制在 1~2s 之内,显然这个响应时间非常长。

分布式服务跟踪工具 Spring Cloud Sleuth

通过这些注解,我们就可以发现服务调用链路中存在的一系列问题,比方说前面提到的响应时间过长问题。而在日常开发过程中,我们也通常可以通过调用链路来发现,在本次请求过程中,某些服务发生的异常情况。

那么如何分析和解决这些问题呢?显然,在调用链路比较复杂的情况下,通过手动观测注解的方式不可行。这时候,我们就需要引入一些自动化工具。幸好,目前主流的服务监控实现工具都对这些注解做了支持和封装。

随着微服务架构的日益流行,Spring 自带的 Spring Cloud 应用也越来越广泛,目前已经成为这一领域的标准开发框架。所以,下面我们就基于 Spring Cloud 家族中的 Spring Cloud Sleuth(SCS)这款工具来分析具体的分布式链路跟踪使用方式。

对于分布式环境下的服务调用链路,我们可以通过 Spring Cloud Sleuth 完成两件事情:

  1. 服务调用链路的构建
  2. 服务监控数据的分析

使用 SCS 构建服务调用链路

首先,来看一看怎么实现用 SCS 构建服务调用链路。

通过将 Spring Cloud Sleuth 添加到系统的类路径,系统便会自动建立日志收集渠道。这些渠道不仅包括常见的 Spring MVC 控制器接收的 HTTP 请求,或者使用 RestTemplate 发出的请求,也能无缝支持通过 Zuul 网关发送的请求。

现在,假设我们有一个 UserService,那么通过 SCS 会生成类似这样的日志信息:

代码语言:txt
AI代码解释
复制
INFO [userservice,81d66b6e43e71faa,6df220755223fb6e,true] 18100 --- [nio-8082-exec-8] c.s.user.controller.UserController : Get user by userName from 8082 port of userservice instance

我们关注于上述日志信息中如下所示的四段内容,即服务名称、Trace Id、Span Id 和 Zipkin 标志位:

代码语言:txt
AI代码解释
复制
[服务名称, TraceId, SpanId, Zipkin标志位]

从日志信息的例子,你也能看到,

  • 第一段的,UserService,代表着该服务的名称。
  • 第二段中的 Trace Id,代表一次完整请求的唯一编号,例中的 81d66b6e43e71faa 就是该次请求的唯一编号。
  • 而第三段中的 6df220755223fb6e,就是这个 Trace Id 下的一个 Span Id。
  • 最后的第四段,代表 Zipkin 标志位,该标志位用于识别是否将服务跟踪信息同步到 Zipkin。

这里你或许会问 Zipkin 是什么,别着急,我们马上就要讲到。

到这里,服务调用链路就构建好了。那么我们如何监控数据呢?

使用 SCS 分析服务监控数据

针对监控数据的管理,你可以用 Spring Cloud Sleuth 设置常见的日志格式来输出 Trace Id 和 Span Id,也可以利用诸如 Logstash 等日志发布组件,将日志发布到 Elastic Search 等日志分析工具中进行处理。同时,Spring Cloud Sleuth 也兼容了 Zipkin、HTrace 等第三方工具的应用和集成。

在具体使用过程中,Spring Cloud Sleuth 和 Zipkin 是一个最佳组合,两者的兼容性非常好,集成过程也很简单。Zipkin 作为一款可视化工具,有其他工具所不具备的数据存储和可视化监控过程的优点。

接下来,我们就一起来看看,Zipkin 具体如何使用。

在结构上,Zipkin 包含几个核心的组件。其中,

  • 收集器组件,用来接收来自各个传输器的数据
  • 存储器代表存储组件,用来存储收集过来的数据
  • API 组件,提供简单的 RESTful API,负责查询存储器中存储的数据
  • UI 组件,提供简单的 Web 界面,可以方便而直观的查询和分析跟踪信息

对于服务监控而言,服务调用链数据收集、分析和管理的目的是,为了发现服务调用过程的问题,并采取相应的优化措施。

Zipkin 的最大优势在于提供了完整的可视化解决方案,通过它,你可以实现服务调用时序和服务调用数据的可视化。

这里我也展示了 Zipkin 可视化服务调用时序的主界面。

Zipkin 可视化服务调用时序的主界面
Zipkin 可视化服务调用时序的主界面

针对某个服务,Zipkin 的查询结果展示了包含该服务的所有调用链路,Zipkin 上的执行效果,你可以看一下。

当发起这个 HTTP 请求时,该请求会先到达网关服务 ZuulService,再通过路由转发到 UserService。图中最重要的就是各个 Span 信息。一个服务调用链路被分解成若干个 Span,每个 Span 代表完整调用链路中的一个可以衡量的部分。

通过可视化的界面,你可以看到整个访问链路的整体时长以及各个 Span 所花费的时间。每个 Span 的时延都已经被量化,并通过背景颜色的深浅来表示时延的大小。

在图中,我们点击任何一个感兴趣的 Span,就可以获取该 Span 对应的各项服务调用数据明细。

例如,我们点击“get /users/username/{username}”这个Span,Zipkin会跳转到一个新的页面并显示这样的数据。

Zipkin 中 Span 对应的名称、TraceId 和 SpanId
Zipkin 中 Span 对应的名称、TraceId 和 SpanId

这里,你可以看到本次调用中用于监控的最重要的元数据 Trace Id 和 Span Id。我们也可以进一步得到注解明细信息。

上图展示了针对该 Span 的 cs、sr、ss 和 cr 这四个注解数据。对于这个 Span 而言,ZuulService 相当于是 UserService 的客户端,所以 ZuulService 触发了 cs 事件,然后通过 (17.160 – 2.102)ms 到达了 UserService,以此类推。

从这些注解数据中可以得出一个结论,即该请求的整个服务响应时间主要取决于 UserService 自身的处理时间。如果这一处理时间过长,那么我们就可以有针对性的采取优化措施。

总结

可以说,构建服务监控和链路跟踪,在分布式系统开发过程中,是一项基础设施类工作。关于服务监控的基本原理其实并不复杂,业界也已经形成了一套比较统一的专业术语和方法论。而 Spring Cloud Sleuth 就是基于这些原理的一种具体实现工具。

Spring Cloud Sleuth 为我们提供了一种代码免侵入的整合方案,在多个服务进行交互的过程中,通过获取 Trace 和 Span 信息就能构建整个服务调用链路。同时,它还可以通过集成 Zipkin,提供可视化服务、调用时序、获取服务调用数据等强大功能。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
LLM 推理引擎之争:Ollama or vLLM ?
Hello folks,我是 Luga,今天我们来聊一下人工智能应用场景 - 构建高效、灵活的计算架构的模型推理框架。
Luga Lee
2025/04/24
1590
LLM 推理引擎之争:Ollama or vLLM ?
陈天奇等人新作引爆AI界:手机原生跑大模型,算力不是问题了
机器之心报道 机器之心编辑部 从此,大模型可以在任何设备上编译运行。 「我把大语言模型下到我的 iPhone 上,它神奇地跑起来了!」 五一假期还没过半,大模型领域的技术就已经发展到了这种程度。 对于陈天奇等人开源的新技术,大家一致的评论是「Amazing」。 最近人们都在研究 ChatGPT,大语言模型(LLM)彻底改变了科技领域的格局,但对于 AI 开发者来说,并不是人人都有上万块 A100 的。为了跑得起大模型,就要寻找各种优化方法。 在让大模型变小这条路上,人们做了很多尝试,先是 Meta 开源了
机器之心
2023/05/09
3950
陈天奇等人新作引爆AI界:手机原生跑大模型,算力不是问题了
A卡跑大模型,性能达到4090的80%,价格只有一半:陈天奇TVM团队出品
自预训练大模型兴起以来,人们面临的算力挑战就变得越来越大。为此,人们为大语言模型(LLM)提出了许多训练和推理的解决方案。显然,大多数高性能推理解决方案都基于 CUDA 并针对英伟达 GPU 进行了优化。
机器之心
2023/09/08
1.3K0
A卡跑大模型,性能达到4090的80%,价格只有一半:陈天奇TVM团队出品
浏览器就能跑大模型了!陈天奇团队发布WebLLM,无需服务器支持
金磊 发自 凹非寺 量子位 | 公众号 QbitAI 现在,只需一个浏览器,就能跑通“大力出奇迹”的大语言模型(LLM)了! 不仅如此,基于LLM的类ChatGPT也能引进来,而且还是不需要服务器支持、WebGPU加速的那种。 例如这样: 这就是由陈天奇团队最新发布的项目——Web LLM。 短短数日,已经在GitHub上揽货3.2K颗星。 一切尽在浏览器,怎么搞? 首先,你需要下载Chrome Canary,也就是谷歌浏览器的金丝雀版本: 因为这个开发者版本的Chrome是支持WebGPU的,否则就
量子位
2023/05/06
3820
浏览器就能跑大模型了!陈天奇团队发布WebLLM,无需服务器支持
MLC LLM——本地应用程序上原生部署任何语言模型
在AI浪潮风起云涌的当下,AI正在不断地重塑着每一个行业。在各大厂先后争先恐后地推出一系列大模型的同时,也不断出现了很多开源的大模型。今天介绍的这个出现在GitHub热榜上的项目是MLC LLM。它是一种通用解决方案,可以在各种硬件后端和本地应用程序上原生部署任何语言模型,同时为所有人提供一个高效的框架,以进一步优化模型性能以适应其自身的用例。 一切都在本地运行,无需服务器支持,并且可以在手机和笔记本电脑上通过本地GPU加速。
山行AI
2023/06/14
3.4K0
MLC LLM——本地应用程序上原生部署任何语言模型
陈天奇官宣新APP,让手机原生跑大模型,应用商店直接下载使用
前段时间,TVM、MXNET、XGBoost 作者,CMU 助理教授,OctoML CTO 陈天奇等多位研究者共同开发的一个项目引爆了 AI 界。
机器之心
2023/08/04
3670
陈天奇官宣新APP,让手机原生跑大模型,应用商店直接下载使用
LLM 大模型学习必知必会系列(一):大模型基础知识篇
2023 年,随着 LLM 技术的发展,中国模型研究机构的开源模型迎来了爆发式的增长:
汀丶人工智能
2024/05/11
3.2K0
LLM 大模型学习必知必会系列(一):大模型基础知识篇
RAG+AI工作流+Agent:LLM框架该如何选择,全面对比MaxKB、Dify、FastGPT、RagFlow、Anything-LLM,以及更多推荐
MaxKB = Max Knowledge Base,是一款基于 LLM 大语言模型的开源知识库问答系统,旨在成为企业的最强大脑。它能够帮助企业高效地管理知识,并提供智能问答功能。想象一下,你有一个虚拟助手,可以回答各种关于公司内部知识的问题,无论是政策、流程,还是技术文档,MaxKB 都能快速准确地给出答案:比如公司内网如何访问、如何提交视觉设计需求等等
汀丶人工智能
2024/08/05
11.1K0
RAG+AI工作流+Agent:LLM框架该如何选择,全面对比MaxKB、Dify、FastGPT、RagFlow、Anything-LLM,以及更多推荐
一文说明如何在NVIDIA Jetson上玩转大模型应用
非常兴奋能在这里与您分享一些关于将最新的生成式AI和大模型LLM引入边缘计算的惊人进展。
GPUS Lady
2023/11/13
3.1K0
一文说明如何在NVIDIA Jetson上玩转大模型应用
大模型时代的系统语言:Rust vs Mojo
这十七年我虽然没有什么光彩履历,但却很幸运,我还能在这个行业坚守,并能不断成长。同样很幸运,我经历了桌面软件没落, Web 2.0 崛起,以及移动互联网的兴盛,当下基础设施系统软件开始复兴的诸多历程。
张汉东
2023/09/13
2.4K0
大模型时代的系统语言:Rust vs Mojo
谷歌正式发布WebGPU!90多位贡献者研发6年,浏览器终于可以利用底层硬件了
整理 | 褚杏娟、核子可乐 经过六年的开发,当地时间 4 月 6 日,谷歌 Chrome 团队正式发布 WebGPU,用于在网络上进行高性能 3D 图形与数据并行计算。WebGPU 现已在 Beta 测试阶段的 Chrome 113 中默认启用。 WebGPU 是一种新型 Web 图形 API,具有显著减少同等图形规模下 JavaScript 工作量、将机器学习模型的推理效率提升 3 倍以上等优势。之所以能实现这样的飞跃,要归功于其令 WebGL 无法实现的灵活 GPU 编程和高级功能访问能力。 据悉,W
深度学习与Python
2023/04/10
1.3K0
谷歌正式发布WebGPU!90多位贡献者研发6年,浏览器终于可以利用底层硬件了
联邦语言模型:边缘SLM+云LLM
联邦语言模型是一个利用了两种人工智能趋势的想法:小型语言模型 (SLM) 和大型语言模型 (LLM) 能力的提升。
云云众生s
2024/07/14
3840
联邦语言模型:边缘SLM+云LLM
AutoGPT、AgentGPT、BabyAGI、HuggingGPT、CAMEL:各种基于GPT-4自治系统总结
来源:Deephub Imba本文约1400字,建议阅读5分钟集成ChatGPT和LLM到各种应用程序中只是使用语言模型的潜力的一部分。 ChatGPT和LLM技术的出现使得这些最先进的语言模型席卷了世界,不仅是AI的开发人员,爱好者和一些组织也在研究探索集成和构建这些模型的创新方法。各种平台如雨后春笋般涌现,集成并促进新应用程序的开发。 AutoGPT的火爆让我们看到越来越多的自主任务和代理利用了GPT-4的API。这些发展不仅增强了处理集成不同系统的复杂任务的能力,而且还推动了我们通过自主人工智能所能
数据派THU
2023/05/11
8950
AutoGPT、AgentGPT、BabyAGI、HuggingGPT、CAMEL:各种基于GPT-4自治系统总结
如何防止模型被窃取?基于TVM的端上模型部署加密方案
2023年在AI的发展史上一定是浓墨重彩的一笔,在这一年里出现了百模大战、全民“炼丹”的场面,围绕着各种模型的训练技术和算力需求有很多讨论。随着模型的成熟以及算力市场的发展,7B、13B这类小型号的模型也出现了端上部署的需求,其中以移动设备厂商最为突出。2024年,在端上部署和应用模型也可能会成为各家移动厂商的一个营销热点。
腾讯安全
2024/01/12
5080
如何防止模型被窃取?基于TVM的端上模型部署加密方案
GPT4All 3.0版 :66.5K 星星!最简单的本地 LLM 前端 - 无需 API 调用或 GPU、本地&私人
在人工智能领域,一年的时间可以带来巨大的变化。如果一个项目能存活超过一个月,那么它必定具有某些独特的优势。GPT4All 已经运行了一整年,仍然是 GitHub 上最受欢迎的项目之一。
AI进修生
2024/12/02
4790
GPT4All 3.0版 :66.5K 星星!最简单的本地 LLM 前端 - 无需 API 调用或 GPU、本地&私人
Ascend推理组件MindIE LLM
MindIE LLM是MindIE解决方案下的大语言模型推理组件,基于昇腾硬件提供业界通用大模型推理能力,同时提供多并发请求的调度功能,支持Continuous Batching、PageAttention、FlashDecoding等加速特性,使能用户高性能推理需求。
zjun
2024/12/04
1940
Ascend推理组件MindIE LLM
使用MLC-LLM将RWKV 3B模型跑在Android手机上(redmi k50每s可解码8个token
这篇文章主要是填一下 MLC-LLM 部署RWKV World系列模型实战(3B模型Mac M2解码可达26tokens/s) 这里留下来的坑,这篇文章里面介绍了如何使用 MLC-LLM 在A100/Mac M2上部署 RWKV 模型。但是探索在Android端部署一个RWKV对话模型的app时却碰到了诸多问题,解决的周期也很长,之前留了issue在MLC-LLM的repo,这周@chentianqi大佬回复说之前编译出的app会在模型初始化阶段卡住的问题已经解决了,所以我又重新开始踩了一些坑最终完成了在手机上运行RWKV World4 3B模型的目的。这里把踩的坑和Android编译方法都描述一下。
BBuf
2023/10/30
1.3K1
使用MLC-LLM将RWKV 3B模型跑在Android手机上(redmi k50每s可解码8个token
LLM推理提速2.8倍,CMU清华姚班校友提出「投机式推理」引擎SpecInfer,小模型撬动大模型高效推理
机器之心专栏 机器之心编辑部 近日,来自卡耐基梅隆大学(CMU)的 Catalyst Group 团队发布了一款「投机式推理」引擎 SpecInfer,可以借助轻量化的小模型来帮助大模型,在完全不影响生成内容准确度的情况下,实现两到三倍的推理加速。 随着 ChatGPT 的出现,大规模语言模型(LLM)研究及其应用得到学术界和工业界的广泛关注。一方面,开源的 LLM 模型不断涌现,比如 OPT、BLOOM、LLaMA 等,这些预训练模型的推出极大地促进了 LLM 的相关研究,使得 LLM 可以被应用于解决
机器之心
2023/05/31
1.3K0
LLM推理提速2.8倍,CMU清华姚班校友提出「投机式推理」引擎SpecInfer,小模型撬动大模型高效推理
mlc-llm 推理优化和大语言模型搭建解析(文末送书)
本文解析一下mlc-llm(https://github.com/mlc-ai/mlc-llm)对大模型推理的流程以及使用的图优化,算子优化策略。mlc-llm的模型部署流程可以查看官方文档:https://mlc.ai/mlc-llm/docs/ ,也可以参考我前段时间写的这篇MLC-LLM 部署RWKV World系列模型实战(3B模型Mac M2解码可达26tokens/s) 。
BBuf
2023/09/26
1.8K0
mlc-llm 推理优化和大语言模型搭建解析(文末送书)
WASM和机器学习
WebAssembly 是一种可以在现代Web浏览器中运行的低级的类汇编语言,具有紧凑的二进制格式,接近本机的性能运行的。为了实现代码紧凑WebAssembly 被设计成了不容易手写,但是支持C、C++、C#、Golang、Rust 等源语言编写代码,使用相应工具链翻译源语言代码。
thierryzhou
2022/11/18
1.1K0
推荐阅读
LLM 推理引擎之争:Ollama or vLLM ?
1590
陈天奇等人新作引爆AI界:手机原生跑大模型,算力不是问题了
3950
A卡跑大模型,性能达到4090的80%,价格只有一半:陈天奇TVM团队出品
1.3K0
浏览器就能跑大模型了!陈天奇团队发布WebLLM,无需服务器支持
3820
MLC LLM——本地应用程序上原生部署任何语言模型
3.4K0
陈天奇官宣新APP,让手机原生跑大模型,应用商店直接下载使用
3670
LLM 大模型学习必知必会系列(一):大模型基础知识篇
3.2K0
RAG+AI工作流+Agent:LLM框架该如何选择,全面对比MaxKB、Dify、FastGPT、RagFlow、Anything-LLM,以及更多推荐
11.1K0
一文说明如何在NVIDIA Jetson上玩转大模型应用
3.1K0
大模型时代的系统语言:Rust vs Mojo
2.4K0
谷歌正式发布WebGPU!90多位贡献者研发6年,浏览器终于可以利用底层硬件了
1.3K0
联邦语言模型:边缘SLM+云LLM
3840
AutoGPT、AgentGPT、BabyAGI、HuggingGPT、CAMEL:各种基于GPT-4自治系统总结
8950
如何防止模型被窃取?基于TVM的端上模型部署加密方案
5080
GPT4All 3.0版 :66.5K 星星!最简单的本地 LLM 前端 - 无需 API 调用或 GPU、本地&私人
4790
Ascend推理组件MindIE LLM
1940
使用MLC-LLM将RWKV 3B模型跑在Android手机上(redmi k50每s可解码8个token
1.3K1
LLM推理提速2.8倍,CMU清华姚班校友提出「投机式推理」引擎SpecInfer,小模型撬动大模型高效推理
1.3K0
mlc-llm 推理优化和大语言模型搭建解析(文末送书)
1.8K0
WASM和机器学习
1.1K0
相关推荐
LLM 推理引擎之争:Ollama or vLLM ?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档