首页 > 解决方案 > 克服 Azure Vision 读取 API 每秒事务数 (TPS) 限制

问题描述

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

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

因此,当流程开始时,预计每秒会发送大量文档进行文本提取。但 Vision API 限制每秒 10 个事务,包括读取。

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

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

标签: azurecomputer-visionazure-functionsocr

解决方案


根据我的理解,您需要了解 2 个关键点:

  1. 当你有很多文件要阅读时,如何克服 10 TPS 的限制。
  2. 寻找获取读取操作状态和结果的最佳方法。

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

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

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

2.2)当HTTP响应码为429时,则在N秒后重试该操作,您可以自己定义例如10秒……</p>

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

{ "error":{ "statusCode": 429, "message": "已超过速率限制。请在 26 秒后重试。" } }

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

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

2.5) 如果第 4 步也失败并返回 429,请在 N N N 秒后重试此操作……</p>

2.6) 您应该一直等待当前操作成功,等待时间会呈指数增长。

对于第二季度,我们知道,我们可以使用这个 API来获取读取操作状态/结果。如果您想获得完成通知/结果,您应该每隔一段时间为您的每个操作构建一个轮询请求,即每 10 秒发送一个检查请求。您可以使用Azure 函数Azure 自动化运行手册创建异步任务以检查读取操作状态,一旦完成,根据您的要求处理结果。

希望能帮助到你。如果您有任何进一步的疑虑,请随时告诉我。


推荐阅读