我试图理解以下术语之间的区别:
这两个术语似乎都用作搜索多个服务产生的相关日志的标识符,尤其是在面向微服务的架构中。
这两者之间有细微的差别吗?
我们应该在我们的软件中使用这些术语中的哪一个,我们如何决定?
两者均根据所使用的工具/库、系统设计来使用。它们可能以某种方式相关,这取决于应用程序和系统设计。一般来说,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 ,因为后者又使用 CorrelationId 进行 RPC 请求和响应跟踪。