cadence-workflow - 在断开连接的系统中跟踪
问题描述
我知道有一些库可以基于 OpenTracing 和 OpenTelemetry 在分布式系统中跟踪请求;这些都有效,因为请求是连接/链接的(微服务相互交谈)。如何在系统/服务断开连接时进行跟踪?
服务 X 调用服务 Y。Y 执行一些处理,然后写入共享位置。组件 Z 轮询共享位置(几小时后)并进行处理。
我想知道对于 X 生成的每个请求,这 3 个系统中的每个系统的状态。
跟踪这一点的一种简单方法是创建一个表并更新数据库条目。但是考虑到我可能需要重试某些事情这一事实,我曾想过引入一个工作流引擎(Cadence),它在服务 X 上打开一个工作流。然后在每个服务处更新工作流。如果请求达到 Y,则完成 w/f 中的一个步骤。如果它没有达到 Z,则工作流程保持打开状态,一段时间后我可以生成一封电子邮件等,说明工作流程失败。
我需要帮助来了解这是否是正确的方法和/或不同的方法来做到这一点。
解决方案
这是 Cadence Workflow 最典型的用例之一。推荐的解决方案是让服务 X 启动工作流。它将执行一个活动来对服务 Y 进行服务调用。如果可能,让组件 Z 向工作流发送信号,告知处理完成。或者您可以进行其他活动来继续轮询状态。
请注意,对于 Cadence 支持的活动,可以轻松完成回退重试。
然后在工作流中使用计时器来触发发送电子邮件的活动。
最后,这个工作流的状态仍然是工作流的一个局部变量。您可以在工作流中实现查询处理程序以获取状态。或者您可以实施一个后台活动来主动报告进度。
开放跟踪库框架是为了解决另一个问题。它是为了测量和分析服务依赖和延迟。事实上,Cadence 工作流也支持开放式跟踪,这里是示例。它是针对服务级别的,而不是针对特定请求或处理的。
推荐阅读
- c# - WPF - Graphics.CopyFromScreen 返回尺寸错误的图像
- python - 如何从python获取多个输入(stdin)
- javascript - 如何检查数组列表中的值
- javascript - 如何在ajax内部调用ajax?
- firebase - 按角色划分的 Firebase 规则
- flutter - Flutter:如何限制用户在一段时间内可以看到多少奖励视频广告
- apache-kafka - 流处理时如何在Cassandra中实现精确一次?
- r - R中的命令循环?
- python-3.x - 如何使用powershell函数(与python相关)激活文件?
- java - 如何使用 Youtube Java API 从频道中获取所有视频的列表?