在断开连接的系统中进行跟踪

Tracing in disconnected Systems

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

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

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

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

我需要帮助来理解这是否是正确的方法and/or 不同的方法来做到这一点。

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

请注意,对于 Cadence 支持的活动,可以轻松完成后退 retry

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

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

开放跟踪库框架是为了解决另一个问题。它用于测量和分析服务依赖性和延迟。其实Cadence workflow也支持open tracing 这里是example。它是针对服务级别的,而不是针对特定的请求或处理。