以前は、ステートレスサービスインフラストラクチャを使用してシステムを構築しましたが、アイテムをAzureキューに置くフロントエンドAPIこれらのキューを処理する役割紙の上では、これは素晴らしく、クラウドはどのように動作するのでしょうか。私たちのキューが成長するにつれて、それはシングルスレッドで30個のバッチを処理する、私たちのアプリのより多くのインスタンスをスピンアップさせます。待ち行列が縮小するにつれて、キューが縮小されます。Azure - 保留中のアイテムに基づいて単一のスレッドアプリケーションをスケーリングするベストプラクティス
しかし、これは期待どおりに機能しなくなりました。 Azureは待ち行列内のアイテムに基づいて自動的にスケーリングされたワーカーのみであり、保留中のアイテムではありません。アイテムは5日前までにキューに入れられていたので、必要のないスケーリングされたインスタンスがたくさん残っていました。解決策として、私たちは、私たちのインスタンスを最大限必要なものにスケーリングするだけで済みました。これはクラウド全体の経験から取り除かれました。また、データの急増に伴い、バックアップが取られることもありました。理想的には、データを数秒で処理したいと思っていますが、この方法論では一度に多くのデータを扱うことができたので、数分かかっていました。
クラウドサービスのスピンアップとダウンの性質上、これはコストがかかるだけでなく、実際にリソースを追加する必要があるとき、インスタンスがスピンアップするまで10分以上待たなければなりませんでした。それは私たちが手動で待ち行列を見て、紺碧のインスタンスを調整することです。私たちは、自動でスピンアップするサードパーティのアプリケーションを開発することができますが、実際の問題は、単にインスタンスを追加または削除するのにどれくらいの時間がかかるかということです。
私たちがクラウドサービスで実行していたすべての制限のため、個々のスレッドを150個以上追加することができる1つのアプリケーションに戻ってしまい、それぞれがメインUIに戻ります。私たちは、コストのほんのわずかでシステムパワーはほとんどないため、常にクラウドサービスで実行されている40のインスタンスから、いつでも最大150個のスレッドを実行することになりました。私たちは次の3分間で何が起きるかを見て、それに基づいてスレッドを拡大します。
この1つのアプリケーションの拡大縮小は、私が雲の中で起こりたいと思うように完全に機能します。一度にすべてのスレッドの状態を見ることができます。各スレッドはキューアイテムの30個のバッチを処理し、各タスクは約2〜3秒かかるので、オーバーヘッドは非常に低いです。
今や明らかに落ち込んでいるのは、私たちが基本的な考え方に戻っていることです。私たちが利用しているクラウドインフラストラクチャは、単に仮想マシンに過ぎません。この1つのアプリがクラッシュしたり、コンピュータが再起動したらどうなりますか?処理能力がさらに必要な場合はどうなりますか?単一のWinFormアプリケーションを簡単に実行するにはどうすればよいですか? (私たちはoctopusのデプロイメントを使用し、Windowsサービスのみを提供します)どのように多分8つの異なるEXEがすべてデスクトップ上で動作しているのでしょうか?
私たちは現在の作業負荷に基づいて自動的に単一のスレッドをスケーリングできる、より良い方法が必要であることを知っています。これがクラウド上で実行される場所でも、VMを管理することによって制限されることはありません。
私はサービスファブリックで6時間の読書をしていましたが、それは正しい方向に向いているようですが、私たちのユースケースをカバーする1つの文書とこれを設定する最善の方法はまだ見つかりません。
単一のタスク(スレッド)のインスタンスを必要に応じて自動的にスケーリングするシステムを作成するにはどうしたらいいですか?各タスクが完了したら、不要になったためスピンダウンする必要があるかどうかを決定します。私は、これらのインスタンスをスピンアップする親のワーカーが必要であり、完了したらシャットダウンする必要があるかどうかをそれぞれ指示します。しかし、私はこのようなプロジェクトのコード化/ドキュメントを見つけることができません、それは紺碧を利用しています。
大文字のユースケースは、電子メールの送信者になります。
- 私たちには、いつメールを予定に入れて送信するアプリケーションがありますか。
- 次の30個のアイテムをキューに入れてすぐに取り出して送信できる、2番目のシングルスレッドアプリがあります。
- 誰かが今すぐキューに25,000アイテムを追加するとどうなりますか? 私たちはメールを外出したいと思いますが、 この1つのスレッドアプリを複数のインスタンスにするにはどうすればいいですか? 次に、完了したら不要になったスレッドをどのようにスケールダウンするのですか?
おかげ
「Azure関数」を見ましたか?私が理解していることから、インフラストラクチャ自体の拡張について心配する必要はありません。 –
私はサービスファブリックと同じように今週始めました。私はまだワークロード(キュー)に基づいて単一のインスタンスをどのようにスケールアウトするのかという中心的な問題にありますか?使い方に基づいてVMをスケーリングするのは簡単ですが、必要のないタスクを自動起動する/シャットダウンする方法はありますか? –
私はAzure関数について簡単に読みましたが、私が理解していることは、あなたがそれを心配する必要がないということです。基本的には、ワークロードに基づいて自動的に拡大/縮小されるサーバーレスのインフラストラクチャ(Amazon Lambdaと同様)を提供します。基盤となるVMにアクセスする必要がある場合を除き、以下を使用することを強くお勧めします。https://azure.microsoft.com/en-us/blog/introducing-azure-functions/ 。 –