我正在开发一个使用 Durable Functions (v2) 执行的 ETL 流程。基本流程如下:
- 使用 Activity 检索要处理的产品代码列表
- 从主编排器扇出到 N 个子编排,将多个集成数据源合并为单个对象并在 Cosmos DB 中更新
主要编排是使用单例实例模式实现的,因此一次只有一个实例运行。
它工作正常,但是底层 TaskHub 表存储中的执行历史记录随着该进程的每次执行而显着增长,并且存在明显的维护问题,因为该进程将按小时运行并会生成大量数据在底层 TaskHub 表中。
我正在努力寻找有关如何维护此进程的执行历史记录以使其不会增长太多的指导。我知道 ContinueAsNewAsync()
API,但这并不太适合我的设计,因为它也强制进程再次运行。我也找不到任何可用于清除执行历史记录的 API 的信息。
现在是否需要直接手动清除表,例如使用单独的计时器触发函数?考虑到持久函数表的架构可能随时发生变化,这感觉有点hacky/不稳定。
最佳答案
Durable Functions 1.7引入了 Orchestration History Purging,它允许您删除与指定实例相关的所有数据:
await client.PurgeInstanceHistoryAsync(instanceId);
您仍然需要实现触发逻辑(例如计时器触发的作业)。要查找您要删除的实例,您可以使用 GetStatusAsync
方法,该方法允许您查询创建时间和实例状态:
var instances = await client.GetStatusAsync(
creationTimeFrom,
creationTimeTo,
new[] { OrchestrationRuntimeStatus.Completed, OrchestrationRuntimeStatus.Failed, OrchestrationRuntimeStatus.Canceled });
关于azure - 如何管理 Azure Durable Functions 的执行历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52938661/