2016-04-06 7 views
5

Azure関数のスケーリングがDocument DBへの出力とどのように関係しているのか不思議です。Azure関数とドキュメントDB

基本的に、割り当てられたスループットを超えてDocument DBが429を返すとどうなりますか? Azure関数の最下位レベルがDocument DBの最下位レベルと組み合わされ、20秒で1000回の呼び出しが行われたとき、私はドキュメントデータベースコレクションに700〜800個の実際のドキュメントしか挿入されていなかったからです。同じ最下位のファンクションレベルでドキュメントDBをmaxにスケールアップしたとき、私はdocデータベースコレクションで700〜800のドキュメントしか受け取らなかった。しかし、私は関数をmaxにドキュメントDBを使って最大1000になるようにスケールアップしました。私がdoc dbを最小に落とすと、私は300ishしか得られませんでした....しかし、私はdocをロックしたようですdbアカウントをアップし、成功するまで挿入を再試行していることを確認します。

だから私はちょうどスケーリングと混乱していると私はいくつかの洞察力を得ることができるので、私は機能やアプリの様々な側面を調整することができます。

答えて

6

はい、現時点では429で再試行し、DocDBレスポンスごとに推奨された時間だけ待機します。現在のところ絶対的なタイムアウトはないので、再試行は通過するまで続行されます(これが予期される動作であれば、今すぐ再チェックします)。

最初のシナリオでは、スロットルを取り外すのに十分な時間待っていたら、最終的には1000個がすべて表示されますか?

私はこれを複製しようと思います。機能を有効にする前に1000個のアイテムをキューに入れていますか?それとも別の方法で呼んでいますか?あなたが興味があれば

実行している特定の再試行のコードはここにある:https://github.com/Azure/azure-webjobs-sdk-extensions/blob/master/src/WebJobs.Extensions.DocumentDB/DocumentDBUtility.cs#L36

+0

私は、サービス・バスは、C#でトリガーを信じていないので、私はhttp経由で機能をトリガするよそれが変更されているかもしれませんが(現在は機能していますこれは現時点で急速に変化しているため)。だから、私はHTTPを介してすべての1000をトリガーします。私は、このコードを実行するためにhttp postを起動するコード内でWeb APIのエンドポイントを呼び出すloader.ioを使用しています。 loader.ioテストは、20秒間に50要求/秒を実行するように設定されています。 – steveko23

+0

関数が最終的に終了するかどうかはわかりません。私の最後のテストでは、それ以上のレコードは書かれていないようですが、doc dbコレクションと対話しようとしたときに429を取得していました。だから私は全体のコレクションを削除し、それを再作成し、コレクションに書き込まれた追加のレコードを見た。だから、それはまだ試みているように見えるだけでなく、それが奇妙な状態にあったように思われます。 – steveko23

+0

まあ、今日の一連のテストの後、私は最後の変更でこのコードから実際の睡眠を取り除いたことに気づきました:https://github.com/Azure/azure-webjobs-sdk-extensions/commit/d39943965d45038ebddc7d4a2d729beab8a678ac #diff-6f209fbf17e36efd4d9ebc6a285cc00cL69私はこれを修正し、それが再び起こらないことを確認するいくつかのテストを追加します。この修正が利用可能になったときに私はここに書き戻します。以前と同じように動作することを確認するためにいくつかのテストを試してみましょう。これを持っていただきありがとうございます! – brettsam

関連する問題