【问题标题】:Tracing in disconnected Systems在断开连接的系统中进行跟踪
【发布时间】:2021-03-09 11:03:39
【问题描述】:

我知道有一些库可以在基于 OpenTracing 和 OpenTelemetry 的分布式系统中跟踪请求;这些都有效,因为请求是连接/链接的(微服务相互交谈)。系统/服务断开时如何追踪?

服务 X 调用服务 Y。Y 执行一些处理,然后写入共享位置。组件 Z 轮询共享位置(几小时后)并进行处理。

我想知道对于 X 生成的每个请求,这 3 个系统中每个系统的状态。

一种简单的跟踪方法是创建一个表并更新数据库条目。 但是考虑到我可能需要重试某些事情这一事实,我曾想过引入一个工作流引擎(Cadence),它在服务 X 上打开一个工作流。然后在每个服务处更新工作流。如果请求达到 Y,则完成 w/f 中的一个步骤。如果它没有达到 Z,则工作流程保持打开状态,一段时间后我可以生成一封电子邮件等,说明工作流程失败。

我需要帮助来了解这是否是正确的方法和/或不同的方法来做到这一点。

【问题讨论】:

    标签: cadence-workflow distributed-tracing data-tracing


    【解决方案1】:

    这是 Cadence Workflow 最典型的用例之一。推荐的解决方案是让服务 X 启动工作流。它将执行一个活动来对服务 Y 进行服务调用。如果可能,让组件 Z 向工作流发送signal,告知处理完成。或者您可以进行其他活动来继续轮询状态。

    请注意,对于 Cadence 支持的活动,可以轻松地退出 retry

    然后在工作流中使用计时器来触发发送电子邮件的活动。

    最后这个工作流的状态还是作为工作流的一个局部变量。您可以在工作流中实现Query 处理程序以获取状态。或者您可以实现一个后台活动来主动报告进度。

    开放追踪库框架是为了解决另一个问题。它是为了测量和分析服务依赖和延迟。事实上,Cadence 工作流也支持开放追踪,这里是example。它是针对服务级别的,而不是针对特定请求或处理的。

    【讨论】:

    • 我忘了明确提及,但我还需要获得整体延迟;例如,当请求在 X 处发起时,到达 Z 需要多长时间。谢谢。
    • 有几种方法可以做到这一点。在工作流中您可以使用 Workflow.Now() API 获取任何步骤的当前时间戳。如果 Z 是一个需要发回信号的单独组件,则让它发送一个带有时间戳的对象。这样您就可以使用时间戳来计算到达 Z 所需的时间。或者在 Z 中查询开始时间并进行计算。如果 Z 也是工作流的一个活动,也可以使用开放的追踪框架
    • Cadence 还会发出许多标准指标,例如工作流和活动延迟。您可以免费获得它们
    猜你喜欢
    • 2012-04-03
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 2012-06-20
    • 2012-04-03
    • 2019-01-04
    相关资源
    最近更新 更多