Microservices 如何正确处理相关ID?

Microservices 如何正确处理相关ID?,microservices,Microservices,我刚刚阅读了微服务体系结构中的日志记录,似乎有相关ID的概念,它基本上是传递给每个微服务的。此关联ID对于日志记录非常有用-您可以通过搜索关联ID跨微服务跟踪请求 我的问题是,这通常是如何实现的?这个关联ID是在哪里生成的?您是否在前端生成某种UUID,并通过X-REQUEST-idhttp头传递它 我的第二个问题是:当您在服务器中收到此关联ID时,如何使服务器中的所有功能都可以访问它 假设您的服务器有如下内容: requestHandler(httpRequest) { correla

我刚刚阅读了微服务体系结构中的日志记录,似乎有相关ID的概念,它基本上是传递给每个微服务的。此关联ID对于日志记录非常有用-您可以通过搜索关联ID跨微服务跟踪请求

我的问题是,这通常是如何实现的?这个关联ID是在哪里生成的?您是否在前端生成某种UUID,并通过X-REQUEST-idhttp头传递它

我的第二个问题是:当您在服务器中收到此关联ID时,如何使服务器中的所有功能都可以访问它

假设您的服务器有如下内容:

requestHandler(httpRequest) {
    correlationId = httpRequest.header.get(X-REQUEST-ID)
    ...
    function2()
}

function2() {
    ...
    function3()
}

function3() {
    ...
    function4()
}

function4() {
    ...
}
假设我想在function4()中记录一些东西(假设我希望日志也包含相关ID),我真的必须将相关ID从requestHandler()一直传递到function4()?还是有更好的方法


我的第一个想法是使用某种内存键值数据库,您可以将相关ID存储为一个值,但该键是什么?

是的,它只是一种UUID,每当前端将请求发送到API网关或业务流程层时,然后生成该UUID,并将其添加到要跟踪的每个微服务的后续调用中


因此,如果您通过某个消息传递代理进行同步调用或异步调用,则应该始终将其嵌入头中,被调用函数将仅在开始时将其放入日志中,稍后使用此correlationID,您可以在您的日志客户端中拦截调用流。

您的微服务中将使用哪种实际语言?在Golang中,我猜此RequestID将附加到上下文,并且上下文将传递到所有函数中。但是,在python Flask微服务中,您将如何做到这一点呢?啊,我明白了,谢谢。关于第二个问题有什么建议吗?是的,我也添加了相关信息。您必须在每次调用中添加CorrID,如果我不太确定是否理解,请将其标记为有用,那么您是否可以将相关ID从requestHandler()函数一直传递到function4()?您是否正在使用基于kubernetes的环境?如果是,那么请检查Jaeger,它是一个负责分布式跟踪的实用程序,但是当您开始将UUID作为参数传递给所有需要日志记录的函数(及其所有祖先)时,代码不会变得非常难看吗?我假设大多数函数都需要日志记录,并且您必须将UUID传递给应用程序中的每个函数——这感觉非常难看。