2011-02-08 15 views
7

これは、Azureと一般的なクラウド技術に関する初心者の質問です。Azureはどのようにスケーリングを提供しますか?

私は、Azureプラットフォームがアプリケーションの規模を正確に把握しようとしており、パフォーマンスを上げるために何かを行う必要があるのですか。

私は、受信データを処理し、多くのクラスで構成されているアプリケーション(C#)を持っています。関連する計算が必要になるたびに、新しいクラスがインスタンス化され、作業が終了するまでメモリに格納され、そこでそこにとどまり、イベントを介して新しい計算要求をリッスンします(明示的に破棄されるまで)。もちろん、これはリソースを消費します。アプリケーションでは、計算要求をリスンして応答するインスタンスが10万と数万になる場合があります。

質問:新しいインスタンスがロードされると、クラウドは自分の環境リソースを増やすだけですか? 新しいインスタンスを開始できない瞬間があるか、または現在のインスタンスの計算でシステムが過負荷になっていますか?私は予算面からは、運用面のものだけを気にしません。 クラウドは私の代わりにシームレスに管理できますか、私のコードで何か他のことをする必要がありますか?

ありがとうございました

答えて

4

クラウド用にシステムを再設計する必要があります。

次のように私はそれを行っているでしょう、あなたの場合:

  • ウェブロールのセットウェブサービス
  • を経由して計算要求を受信するためにウェブ役割がキュー
  • に計算要求を記述します
  • はその後、Workerロールのセットには、1または100分にWorkerロールの数を設定する(または少なくとも非常に笙をすることができますキューをポーリングして、設定では、計算に

を行うにはあなたが要求したマシンの数を持っている設定を変更した後。

また、キューが長くなりすぎるとワーカー・ロールの数を増やすなどの作業を行うこともできます。

+0

しかし、10,000人の作業者の役割が必要な場合はどうすればよいですか?また、ロールを動的に追加できますか?また、インスタンスがそこに座ってリッスンしても、同じロールで実行されるインスタンスはほとんどありませんか? – Saul

+0

マシンを動的に追加することができます。http://msdn.microsoft.com/en-us/magazine/gg232759.aspx –

+0

10000人の作業者の役割はOKですが、設定を変更するだけで、1時間あたり1000米ドル以上かかる場合があります。 http://blog.toddysm.com/2010/01/windows-azure-role-instance-limits-explained.html –

1

Azureで動作するように設計しているかどうかにかかわらず、キューを操作して特定の機能を分離するのが最善です。

Shiraz Bhaijiには、キューにメッセージを追加するWebサービスをホストするWebワーカーであるAzureに2つのワーカープロセスがあり、計算を行うバックグラウンドワーカーがあります。

次に、追加のワーカーのインスタンス数を増やすことができます。インスタンスのサイズを増やすことで、より多くのリソース(CPU、RAM、ネットワーク)を提供して、より多くのWebサービスコール/各労働者。

最大キューパフォーマンスに達した場合、複数のキューを作成できます。

automateこのスケーリングを行わないと、アプリケーションが人間とのやりとりでどのように実行するかを明示的に監視し、調整する必要があります。

+0

ロールからメッセージを移動することについて私が読んだり理解していないものは、キューの部分です。私が理解することで、作業者はキューを常にチェックして、新しいメッセージがあるかどうかを調べる必要があります。これは、デスクトップアプリケーションのイベント主導の性質と比較して、仕事の割当てのように思えるでしょうか?そうするより効率的な方法はありませんか? – Saul

+0

いいえありません。これは、他のストレージ・フレーバと同様にキューがHTTP RESTful APIを介してアクセスされるため、サーバーが新しいメッセージが到着したことをロールに通知する方法がないためです。私はあなたのように感じます、私はイベント主導のアプローチに慣れていました。無限ループやタイマーを保つこのことはちょっとばかげていますが、その理由があります。 – vtortola

+0

WCFとある種のブロードキャストメッセージプロトコルの使い方はどうですか?それはより効率的ではないでしょうか? – Saul

4

これは素晴らしい質問であり、しばしばAzureに関する大きな誤解です。

Azureでは、REST-API呼び出しによって割り当てられた計算リソースの量を調整できますが、リソースは自動的に調整されません。あなたが話していることは、ダイナミックまたは自動スケーラビリティのように聞こえる。それは自分で実装する必要があります(数多くの例があります)。または、大部分のスケーリングシナリオを処理できるサードパーティのサービスAzureWatchを利用することができます。

動的スケーリングを実装するには、それを前もって考える必要はありません。私はあなたが間違いなくそれについて考えなければならないことを意味しますが、サードパーティのベンダーと仕事をするための要件や能力に応じて、それについて多くのことを行う必要はありません。

動的スケーラビリティについての難しい部分は、実際のスケーリング部分ではなく、いつスケールアップするのか、いつスケールダウンするのかを知ることです。

まず、呼び出しが1分以内に完了しない場合、Azureはパブリック負荷分散エンドポイントへのすべての呼び出しを強制終了します。したがって、計算に時間がかかる場合は、非同期計算を計画してキューを使用する必要があります。この方法で、キューのサイズに基づいて拡大または縮小することができます。

計算が迅速に完了し、呼び出しが早く終了し、計算を要求している受信クライアントが非同期でない場合、以前のX時間の平均使用率を追跡し、それに基づいて拡大または縮小します。あなたの場合は、あまりにも制限的で、十分に柔軟ではないと思われるので、私はこのアプローチをしません。

いずれにしても、AzureWatchはどちらかのパターンまたは両方で動作します。

1

アプリケーションは、第10および 計算要求を聞き、答えるそれら インスタンスの数千人の 百を持っているかもしれません。

私はこの部分を本当に理解していません。これらのクラスをステートレス(もちろんスレッドセーフ)にすると、それぞれのクラスをロードするだけです。

あなたはアプリケーションを穏やかに拡大できますか?

+0

複数のメッセージに対していくつかの計算が行われているため、ステートレスにすることはできません。これはまさに私が理解しようとしていることです... – Saul

+0

"スケールアップ"は、すべてのマシンリソースを使用し、アイドルタイム(マルチスレッド、低競合時間など)を避ける能力です。より大きいマシンであれば、アプリケーションはより多くの要求を処理できます。一方、「スケールアウト」は、アプリケーションが複数のインスタンスと並行して機能する能力です。まず、穏やかに "スケールアップ"できるようにする必要があります。そうでなければ、スケールアウトしようとすると無駄になります。 – vtortola

2

バックグラウンドを提供するだけで、役割と各役割のインスタンス数を指定するサービスのモデルを作成できます。 Azureはこれをあなたのために配備します。この設定はいつでも変更できますが、Azureはこれを実行しません。 私が知っているように、Azureチームは自動拡張機能について考えていますが、それを実装するのはかなり複雑で、私が見たすべてのサードパーティのソリューションは、これを正しく実行しませんでした(データが不十分でスパイクの動作が悪い)。 また、新しいインスタンスの開始はインスタント操作ではありません。あなたは先に計画する必要があります。

関連する問題