我在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)
如何处理此错误?
答案 0 :(得分:2)
TL; DR;
答案很长:
对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;付出那么多。增加。