DocumentDB返回“请求率很大”,解析天蓝色

时间:2016-05-31 05:56:18

标签: parsing azure parse-platform azure-devops azure-cosmosdb

我在azure上运行解析(托管Azure服务上的Parse Server), 我将DocumentDB作为数据库包含在内,并且每秒的请求数限制。 一些解析云函数很大,请求速度太快(即使对于S3层),所以我得到了这个错误(使用Visual Studio Team Services(Visual Studio Online)和Streaming日志)。

    error: Uncaught internal server error. { [MongoError: Message: {"Errors":["Request rate is large"]}

ActivityId: a4f1e8eb-0000-0000-0000-000000000000, Request URI: rntbd://10.100.99.69:14000/apps/f8a35ed9-3dea-410f-a89a-28650ff41381/services/2d8e5320-89e6-4750-a06f-174c12013c69/partitions/53e8a085-9fed-4880-bd90-f6191765f625/replicas/131091039101528218s]
  name: 'MongoError',
  message: 'Message: {"Errors":["Request rate is large"]}\r\nActivityId: a4f1e8eb-0000-0000-0000-000000000000, Request URI: rntbd://10.100.99.69:14000/apps/f8a35ed9-3dea-410f-a89a-28650ff41381/services/2d8e5320-89e6-4750-a06f-174c12013c69/partitions/53e8a085-9fed-4880-bd90-f6191765f625/replicas/131091039101528218s' } MongoError: Message: {"Errors":["Request rate is large"]}

ActivityId: a4f1e8eb-0000-0000-0000-000000000000, Request URI: rntbd://10.100.99.69:14000/apps/f8a35ed9-3dea-410f-a89a-28650ff41381/services/2d8e5320-89e6-4750-a06f-174c12013c69/partitions/53e8a085-9fed-4880-bd90-f6191765f625/replicas/131091039101528218s
    at D:\home\site\wwwroot\node_modules\mongodb-core\lib\cursor.js:673:34
    at handleCallback (D:\home\site\wwwroot\node_modules\mongodb-core\lib\cursor.js:159:5)
    at setCursorDeadAndNotified (D:\home\site\wwwroot\node_modules\mongodb-core\lib\cursor.js:501:3)
    at nextFunction (D:\home\site\wwwroot\node_modules\mongodb-core\lib\cursor.js:672:14)
    at D:\home\site\wwwroot\node_modules\mongodb-core\lib\cursor.js:585:7
    at queryCallback (D:\home\site\wwwroot\node_modules\mongodb-core\lib\cursor.js:241:5)
    at Callbacks.emit (D:\home\site\wwwroot\node_modules\mongodb-core\lib\topologies\server.js:119:3)
    at null.messageHandler (D:\home\site\wwwroot\node_modules\mongodb-core\lib\topologies\server.js:397:23)
    at TLSSocket.<anonymous> (D:\home\site\wwwroot\node_modules\mongodb-core\lib\connection\connection.js:302:22)
    at emitOne (events.js:77:13)

如何处理此错误?

2 个答案:

答案 0 :(得分:2)

TL; DR;

  1. 根据新的定价方案将旧的S3集合升级为新的单个集合。这可以支持高达10K RU(从2500 RU起)
  2. 删除旧的S3集合并创建新的分区集合。将需要支持解析中的分区集合。
  3. 根据x-ms-retry-after-ms响应头实现退避策略。
  4. 答案很长:

    对DocumentDB的每个请求都返回一个HTTP标头,其中包含该操作的请求费用。每个集合配置了请求单元的数量。根据我的理解,你有1个大小为S3的集合,所以这个集合每秒只能处理2500个请求单元。

    DocumentDB通过添加多个集合进行扩展。使用S1的旧配置 - &gt; S3您必须手动执行此操作,即必须使用一致散列,映射或perhapse日期等算法在集合上分发数据。使用DocumentDB中的新定价,您可以使用分区集合,通过定义分区键,DocumentDB将为您分割数据。如果您看到RequestRateTooLarge错误的持续率,我建议扩展分区。但是,您需要调查Parse是否支持分区集合。

    当您收到HTTP 429 RequestRateTooLarge时,还有一个名为x-ms-retry-after-ms的标头:###其中###表示重试操作之前等待的毫秒数。您可以做的是实施重试操作的退避策略。请注意,如果在重试期间客户端挂起了客户端,则可能会构建请求队列并阻塞服务器。我建议添加一个队列来处理这样的爆发。对于短暂的请求,这是处理它而不扩展集合的好方法。

答案 1 :(得分:1)

我使用Mlab作为外部mongoDB数据库并在azure中配置解析应用程序以使用它而不是documentDB。

我必须为&#34;表现&#34;付出那么多。增加。