跳到主要内容

SkyWalking 源码分析 Agent DictionaryManager 字典管理

1. 概述

本文主要分享 Agent DictionaryManager 字典管理。先来简单了解下字典的定义和用途:

  • 字典实际上是一个 Map 映射。目前 Agent 上有两种字典:应用编码与应用编号的映射,操作名与操作编号的映射。
  • 应用的定义:例如,Tomcat 启动的应用,或者程序里访问的 MongoDB 、MySQL 都可以认为是应用。
  • 操作的定义:例如,访问的 URL 地址,Mongo 的执行操作。
  • Agent 在每次上传调用链路 Segment 给 Collector 时,Segment 里面需要包含应用和操作相关信息。考虑到减少网络流量,应用编号少于应用编号,操作编号少于操作名。

Agent 字典,会定时从 Collector 【同步需要( 需要的定义,下文代码会看到 )的字典。

下面,我们分成两个小节,分别从 API 的实现调用,分享代码的具体实现。

2. Collector 同步相关 API

Collector 同步相关 API 相关有四个接口:

  • 2.1 应用的同步 API

  • 2.2 操作的同步 API

API处理的流程大体如下:

 

2.1 应用的同步 API

应用的同步 API ,实际使用的是应用的注册 API,在 「2.1 应用的注册 API」 有详细解析。

2.2 操作的同步 API

我们先来看看 API 的定义,DiscoveryService ,如下图所示: