1

我认为“重播”的行为确保了 Azure 持久函数中的可靠执行,如下面的链接中所述。

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

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

回复的行为非常复杂。我想不使用回复比使用重放更简单。

为什么持久函数使用重放?为什么“重放”的行为可以确保 Azure 持久函数中的可靠执行?

4

1 回答 1

2

可靠的执行是特别需要的,因为持久功能通常最适合复杂的长时间运行的操作,这些操作涉及多个功能 - 协调器和活动。

在消耗计划上运行时,函数应用可能会在 VM 之间移动,具体取决于函数运行的时间。在这种情况下,您的函数应该能够从它在下一个 VM 中的一个 VM 中中断的位置运行。这基本上是重放的来源。

您的函数基本上每次都会重新运行,以确保您的函数的当前状态已提交到 Azure 存储(持久函数用于外部状态管理/日志记录)。

请注意,这并不意味着您的函数每次都保持重新运行,相反,它们的结果也被存储,允许您的函数执行状态“重新水化”,而无需实际重新运行函数。

但是为了实现这一点,您的编排器代码有一些限制,您必须按照文档中的规定遵循这些限制。以供参考,

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

您可以阅读有关 Durable Functions 实现的底层模式(事件溯源)的更多信息,以获取更多信息。

于 2019-03-26T17:37:02.070 回答