克服 Azure Vision 读取 API 每秒事务 (TPS) 限制

Overcoming Azure Vision Read API Transactions-Per-Second (TPS) limit

我正在开发一个我们调用 Vision Read API 的系统,用于从光栅 PDF 中提取内容。文件大小不一,从一页到几百页不等。

文件存储在Azure Blob中,当所有文件都上传到blob时,将有一个将文件推送到读取API一次的功能。可能有数百个文件。

因此,当进程启动时,预计每秒将发送大量文档以进行文本提取。但是 Vision API 限制为每秒 10 个事务,包括读取。

我想知道最好的方法是什么?某种类型的限制或队列?

读取 API 将提取文档的地方是否有可用的集成(比如队列),是否有任何类型的推送通知可用于通知读取操作完成?如何防止因超过 10 TPS 限制而超时?

据我了解,有 2 个要点是您想知道的:

  1. 当您有很多文件要读取时,如何克服 10 TPS 的限制。
  2. 正在寻找获取读取操作状态和 结果。

你的问题有点笼统,或许我可以给你一些建议:

对于Q1,一般来说,如果你达到TPS限制,你会得到一个HTTP 429响应,你必须等待一段时间才能调用API,否则 API 的下一次调用将被拒绝。通常我们使用类似指数回退重试策略的方法来重试操作来处理 429 错误:

2.1) 您需要检查代码中的 HTTP 响应代码。

2.2) 当HTTP响应码为429时,则在N秒后重试此操作,如10秒可自行定义...

例如,下面是429的响应。您可以将等待时间设置为(26 + n)秒。 (PS:这里可以自己定义n,比如n = 5...)

{ “错误”:{ “状态码”:429, "message": "超出速率限制。请在 26 秒后重试。" } }

2.3) 如果第2步成功,继续下一步操作。

2.4) 如果步骤 2 也以 429 失败,请在 N*N 秒后重试此操作(您也可以自己定义)这是一种指数退避重试策略..

2.5) 如果步骤 4 也以 429 失败,请在 NNN 秒后重试此操作...

2.6) 始终等待当前操作成功,等待时间呈指数增长

对于Q2,,我们知道,我们可以用this API得到Read操作status/result。 如果你想完成notification/result,你应该每隔一段时间为你的每个操作建立一个滚动轮询请求,即每 10 秒发送一次检查 request.You 可以使用 Azure function or Azure automation runbook 创建异步任务来检查读取操作状态,一旦完成,根据您的要求处理结果。

希望对您有所帮助。如果您还有任何疑问,请随时告诉我。