Page 1 of 1

调试是一场噩梦:追踪单个报告的旅

Posted: Tue Apr 22, 2025 8:49 am
by sakib40
每个步骤都由一个单独的队列处理,如果发生错误,系统会多次重试该消息,直到将报告标记为失败。但错误并不总是显而易见的——例如,如果外部 API 调用由于输入错误而持续失败,或者返回了意外的响应形状,重试也无济于事。在这种情况下,报告可能会卡在中间状态,我们经常需要手动翻阅不同队列的日志来找出问题所在。

更令人沮丧的是,在处理失败的报告时,我们依赖于“Reaper”——一个每小 阿尔及利亚电报号码数据 时运行一次的 cron 任务,用于重新提交失败的报告。由于报告可能在任何步骤失败,Reaper 必须推断出哪个队列失败了,并发送消息开始重新处理。这意味着:

程意味着在多个队列的日志之间跳转。

重试不可靠:一些队列具有重试逻辑,而其他队列依赖于 Reaper,从而导致不一致。

状态管理很痛苦:除了查看日志之外,我们没有明确的方法来追踪报告是在管道中途还是完全丢失。

运营开销很高:开发人员经常需要手动检查失败的报告并重新提交。

队列为我们提供了坚实的消息传输基础,但它并非用于处理业务流程编排。我们实际上做的是在消息总线上构建一堆松散连接的步骤,并希望它们能够紧密结合。在大多数情况下,它都能正常工作,但笨重、难以推理且容易崩溃。仅仅了解一份报告如何在系统中移动,就意味着需要跨多个队列跟踪消息并深入挖掘日志。

我们知道我们需要更好的方案:一种能够明确定义工作流程的方法,清晰地了解流程的进展和失败之处。但当时,除了引入重量级工具或自行编写大量胶水代码外,我们没有其他好的方法来实现这一点。Cloudflare Workflows 的出现,让我们感觉找到了缺失的那块拼图,终于为我们提供了一种简单可靠的方法,让我们能够无需任何繁琐的流程来协调所有流程。