为什么 "replay" 的行为可确保在 Azure 持久函数中可靠执行?

Why does The behavior of "replay" ensure reliable execution in Azure durable functions?

我认为 "replay" 的行为可确保 Azure 持久函数中的可靠执行,如下面 link 所述。

https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-checkpointing-and-replay

但是,我不知道为什么这意味着可靠以及"replay"和不"replay"之间的区别。

回复的行为非常complicated.I猜测不使用回复比使用重播更简单。

为什么持久函数使用重播?为什么 "replay" 的行为确保在 Azure 持久函数中可靠执行?

可靠执行是特别需要的,因为持久函数通常最适合涉及多个函数的复杂长期 运行ning 操作 - 协调器和 activity.

当运行使用消费计划时,您的函数应用程序可能会在 VM 之间移动,具体取决于您的函数 运行s 的时长。在这种情况下,您的函数应该能够 运行 从它在一个 VM 中停止的地方到下一个 VM。这基本上就是回放的用武之地。

你的函数基本上每次都在重新运行,以确保你的函数的当前状态与提交到 Azure 存储中的一样(持久函数用于外部状态 management/logging)。

请注意,这并不意味着您的函数每次都保持重新 运行,相反,它们的结果也会被存储,以便 "re-hydration"您的函数执行状态,而无需实际重新运行调整函数。

但要实现这一点,您的协调程序代码有一些您必须遵循的限制条件 documented。供参考,

  • 确定性 - 不要使用在每次回放时给出不同输出的函数。如果您需要此类功能,请将它们移动到自己的 activity 功能中
  • 非阻塞
  • 没有异步操作 除了使用 Durable Functions 库进行的操作
  • 避免无限循环

您可以阅读有关 Durable Functions 实现的底层模式的更多信息 - Event Sourcing - 以获取更多信息。