gpt4 book ai didi

azure - 限制每个时间跨度的 Azure 持久函数事件最大执行次数的最佳方法

转载 作者:行者123 更新时间:2023-12-02 05:56:07 25 4
gpt4 key购买 nike

作为 Azure Durable Functions 领域的新手,我正在努力寻找最佳方法来处理对已实现速率限制的 API 的下游调用。

我的流程设置方式如下:

  • HistorySynchronizer_HttpStart 函数:签名中具有 HttpTriggerDurableClient 绑定(bind),并调用下一个编排函数:
  • HistorySynchronizer 函数:签名中具有 OrchestrationTrigger 绑定(bind)。该函数将调用 API(等待)并返回集合。对于该集合中的每个项目,它将启动一个新的 Activity:context.CallActivityAsync()(将它们组合在 List 中并执行 Task.WhenAll() )
  • ProcessActivity 函数:签名中有 ActivityTrigger 绑定(bind)。该函数必须调用速率受限的 API 端点。我想要限制的正是这些事件(跨多个编排)。

所以,我正在寻找的是节流模式的实现:

  • 我需要一个线程安全的共享状态(我正在考虑持久实体)来跟踪对该 API 的调用次数
  • 在 ProcessActivity 函数调用该 API 之前,它必须检查持久实体是否可以调用该 API,或者是否必须等待一定的 TimeSpan 才能执行该调用。
  • 如果必须等待,事件就必须“ sleep ”,我正在考虑持久计时器,但似乎应该在编排功能中使用,而不是在事件功能中使用。
  • 如果允许调用 API,则 Activity 必须更新该共享状态对象中的速率计数器。

我没有看到实现此目的的标准实现,并且我希望将尽可能多的检查/ sleep 逻辑从主编排中移出。

最好的方法是在调用 Activity 之前为每个必须限制的 API 调用实现子编配,并在其中进行检查吗?

期待任何见解。

最佳答案

山姆,我看到了几个选择。我还创建了一个 video作为对此的回应。让我们退后一步,看看如何使用常规函数(不持久)来做到这一点。

第一种方法是将函数变成队列触发函数,并使用队列机制来控制横向扩展,使用 batchSizenewBatchThreshold :

enter image description here

另一种方法是使用 http 触发的函数并在 host.js 文件中使用它:

enter image description here

通过持久功能,我们可以做到这一点:

enter image description here

您特别询问了有关控制每个时间跨度的扩展的问题,这就是我将如何做到这一点:

  1. 将您的事件函数转换为队列触发
  2. 每次执行队列触发函数时,此函数都会向表存储中插入一条记录,指示存在事件运行
  3. 在实际触发外部 http 调用之前,对表存储执行 ping 操作以查看有多少个事件连接。
  4. 如果当前连接数低于X,则处理消息(即进行外部调用),如果表存储显示所有连接都已占用,则将消息放回队列!

关于azure - 限制每个时间跨度的 Azure 持久函数事件最大执行次数的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64023390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com