克服 Azure Vision 读取 API 每秒事务数 (TPS) 限制
Posted
技术标签:
【中文标题】克服 Azure Vision 读取 API 每秒事务数 (TPS) 限制【英文标题】:Overcoming Azure Vision Read API Transactions-Per-Second (TPS) limit 【发布时间】:2020-02-19 06:04:45 【问题描述】:我正在开发一个系统,我们正在调用 Vision Read API 从光栅 PDF 中提取内容。文件大小不一,从一页到几百页不等。
文件存储在 Azure Blob 中,当所有文件上传到 Blob 时,将有一个功能将文件推送到 Read API 一次。可能有数百个文件。
因此,当流程开始时,预计每秒会发送大量文档进行文本提取。但 Vision API 的限制为每秒 10 个事务,包括读取。
我想知道最好的方法是什么?某种类型的限制或队列?
是否有任何可用的集成(比如与队列),读取 API 将从其中提取文档,是否有任何类型的推送通知可用于通知读取操作的完成?如何防止由于超过 10 TPS 限制而导致超时?
【问题讨论】:
【参考方案1】:根据我的理解,有两个关键点你想知道:
-
当您有大量文件要读取时,如何克服 10 TPS 的限制。
寻找获取读取操作状态的最佳方法和
结果。
你的问题有点笼统,也许我可以给你一些建议:
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) 应该一直等待当前操作成功,等待时间会呈指数级增长。
对于第二季度,,我们知道,我们可以使用this API 来获取读取操作状态/结果。 如果您想获得完成通知/结果,您应该每隔一段时间为您的每个操作构建一个轮询请求,即每10秒发送一个检查请求。您可以使用Azure function或Azure automation runbook创建异步任务来检查读取操作状态,一旦完成,根据您的要求处理结果。
希望对您有所帮助。如果您还有任何疑问,请随时告诉我。
【讨论】:
嗨@Nenad Bulatovic,我想知道它对你有帮助吗?还有什么我可以帮忙的吗? 谢谢,我们会试试的。以上是关于克服 Azure Vision 读取 API 每秒事务数 (TPS) 限制的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Google Cloud Vision API 读取一列文本
如何强制 Android 版 Mobile Vision 读取整行文本
Android Vision Api - 条码检测如何获取条码类型?
使用 Google Vision API 进行 OCR 扫描的地图