2016-05-31 32 views
3

我在Azure上运行解析(Parse服务器上的托管Azure服务), 我不包括DocumentDB作为数据库并且对每秒请求数有限制。 一些解析云功能很大,请求速度太高(即使是S3层),所以我得到了这个错误(使用Visual Studio Team Services(是Visual Studio Online)和Streaming日志)。DocumentDB返回“请求率很大”,在azure上解析

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) 

如何处理这个错误?

+0

请参阅https://azure.microsoft.com/zh-CN/blog/performance-tips-for-azure-documentdb-part-2/ –

回答

1

TL; DR;

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

龙答:

到DocumentDB每个请求返回与申请费为操作的HTTP标头。请求单元的数量是每个集合配置的。根据我的理解,您有1个S3大小的集合,所以这个集合每秒只能处理2500个请求单元。

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

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

+0

您不需要删除一个'S3'集合以转换为'标准“(高达10K RU)集合 - 它可能会被修改而不删除。 –

+0

@DavidMakogon谢谢。我已经更新了答案 – hsulriksen

0

我使用Mlab作为外部mongoDB数据库,并在Azure中配置解析应用程序以代替documentDB使用它。

我必须为“表现”增加付出如此多的代价。