2016-05-31 29 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使用它。

我必須爲「表現」增加付出如此多的代價。