2016-04-06 66 views
5

我很好奇Azure函數的關於輸出到文檔數據庫的縮放比例。Azure函數和文檔數據庫

基本上當Document DB返回429時會發生什麼情況,因爲我超出了我分配的吞吐量?我問,因爲當我有最低級別的Azure函數和最低級別的Document DB並且在20秒內繼續調用函數1000次時,我只能看到700-800個實際文檔插入到我的文檔db集合中。當我將文檔數據庫縮放到最大並且最低的功能級別相同時,我的文檔數據庫集合中只收到700-800個文檔。但是,當我將函數調高到max時,文檔db在最大值時,我獲得了全部1000.當我將doc db下降到min時,我只有300ish ....儘管它好像鎖定了文檔數據庫帳戶,它仍然在重試插入,直到它可以成功。

所以我只是困惑,因爲這是擴展,如果我可以得到一些見解,所以我可以更好地調整函數或應用程序的各個方面。

回答

6

是的,它現在在429上重試,按照DocDB響應等待建議的時間量。目前沒有絕對超時,所以重試會持續下去,直到他們通過(如果這是預期的行爲,我現在正在雙重檢查)。

在你的第一個場景中,如果你等待足夠長的時間來取消油門,那麼最終所有的1000都會出現嗎?

我想嘗試複製這個 - 你在啓用你的函數之前是否在隊列中粘貼了1000個項目?或者以其他方式調用它?

是正在運行的特定重試代碼是在這裏,如果你很好奇:https://github.com/Azure/azure-webjobs-sdk-extensions/blob/master/src/WebJobs.Extensions.DocumentDB/DocumentDBUtility.cs#L36

+0

我通過http觸發功能,因爲我不相信在C#服務總線觸發當前功能(儘管這可能已經改變因爲目前這種情況正在迅速變化)。所以我通過http觸發所有1000,我使用loader.io來完成這個操作,在我的代碼中調用一個web api端點,然後觸發http後觸發該函數。 loader.io測試設置爲在20秒內運行50次請求/秒。 – steveko23

+0

我不是100%確定函數是否最終完成。在我的最後一次測試中,似乎沒有更多的記錄正在寫入,但是當我嘗試與doc db集合進行交互時,仍然得到了429個記錄。於是我刪除了整個集合並重新創建了它,然後看到了寫入該集合的其他記錄。所以它看起來好像還在嘗試,但似乎也是在一個奇怪的狀態。 – steveko23

+0

好吧,經過今天的一系列測試之後,我意識到我在上次更改中刪除了這段代碼中的實際睡眠:https://github.com/Azure/azure-webjobs-sdk-extensions/commit/d39943965d45038ebddc7d4a2d729beab8a678ac #DIFF-6f209fbf17e36efd4d9ebc6a285cc00cL69。我會解決這個問題並添加一些測試來驗證它不會再發生。當這個修復程序可用時,我會在這裏回寫,我會嘗試一些更多的測試以確保它可以像以前一樣工作。感謝您提出這個! – brettsam