术语:跟踪 ID 与相关 ID

ale*_*ine 23 logging terminology distributed-system microservices

我试图理解以下术语之间的区别:

  • 迹线ID
  • 相关ID

这两个术语似乎都用作搜索多个服务产生的相关日志的标识符,尤其是在面向微服务的架构中。

这两者之间有细微的差别吗?

我们应该在我们的软件中使用这些术语中的哪一个?我们如何决定?

Kar*_*uru 14

两者都根据所使用的工具/库、系统设计来使用。它们可能以某种方式相关,这取决于应用程序和系统设计。一般来说,TraceID 或 CorrelationID 应是唯一的用户定义/生成的值,用于跟踪感兴趣的特定活动序列或在应用程序/系统的整个生命周期中。

此外,根据架构/设计,CorrelationID 可以对基于少数类别/模块的每条消息或组消息使用唯一,并具有 ID。在这种分组情况下,也应使用 CorrelationID 术语。

基于微服务的系统严重依赖唯一 ID 来调试与特定微服务相关的数据,以获取详细信息、指标、存储和分析。通常,在此类高度可扩展的系统中,CorrelationID 可以从初始进程传递到子进程,子进程又将其传递到子系统。

基于OpenTracing的系统使用术语 TraceID,它代表从头到尾的链,并且在每个跟踪下,可以存在由 spanID 识别的特定工作单元的跨度,用于构建基于有向无环图 (DAG) 的维护。

基于Sleuth的系统使用术语 TraceID,其中为每个请求分配一个唯一标识符,并在应用程序中的整个请求处理步骤中维护该标识符,而应用程序中又应将工作/步骤单元标记为 spanID 作为其一部分。

大多数消息传递系统都使用correlationId,因此使用这些系统的系统应使用correlationId 进行跟踪和记录。因此,基于Java消息服务(JMS)的系统使用correlationId来进行请求和响应。例如,实现(即兼容)JMS API 的消息代理(例如 Apache ActiveMQ)使用相关 ID。因此,分布式处理引擎(例如Apache Flink)在与 RabbitMQ 一起使用时使用 CorrelationId,而 RabbitMQ 又使用 CorrelationId 进行 RPC 请求和响应跟踪。


Lev*_*sey 1

根据我的经验,我倾向于看到跟踪 ID 严格用于日志记录中的关联,而关联 ID 在域逻辑中另外使用(例如,用于确保从客户端读取的内容可以看到该客户端所做的写入)。