Windows Azure で動的な弾力性を実現する方法はありますか? ワーカーが過負荷になり始めた場合、キューがいっぱいになり始めた場合、または実行する作業がないワーカーが多すぎる場合、コードを介してワーカーを動的に追加または削除する方法はありますか、それとも手動で (人間の介入が必要です) 行われますか?今?現在利用できない場合、それを追加する計画を知っている人はいますか?
5 に答える
Microsoftは、動的スケーリングを提供するためにAutoscaling Application Block (Wasabi) を出荷しました。サポートされているシナリオの一部:
- インスタンス数を動的に変更するか、アプリケーション スロットリングを実行することにより、Windows Azure で Web ロールとワーカー ロールの両方を自動スケーリングします。
- タイムテーブルに基づく Windows Azure ロールの自動スケーリング。
- アプリケーションや Windows Azure から収集されたメトリックに基づいて Windows Azure ロールを自動スケーリングしますが、ロールごとのインスタンス数の上限と下限によって制約されます。
- スタビライザーを使用して、ロール インスタンスの数が急激に変動するのを防ぎます。スタビライザーは、スケールアップ操作を時間の初めに制限し、操作のスケールダウンを時間の終わりに制限することで、コストを最適化するのにも役立ちます。
- 自動スケーリング アクティビティのモニタリングとロギング。
- 通知を送信して、スケーリング操作を実行する前にプレビューします。
- Windows Azure BLOB ストレージまたはローカル ファイル ストレージ内のルールおよびその他の構成を暗号化します。
- Windows PowerShell を使用してオートスケーラーの構成を管理します。
これらすべての機能を紹介する包括的なサンプル アプリケーション ( Tailspin Surveys ) が提供されています (インストール手順はこちらから入手できます)。また、開発者ガイドと Channel9ビデオ ウォークスルーもご覧ください。
このブロックは、バイナリ、ソース、またはNuGetのスタンドアロン ダウンロードとして利用できます。
以下は、Wasabi の動作を示す講演/デモの 2 つです。
Service Management API があり、それを使用して (Windows Azure で実行されているコードから、または Windows Azure の外部で実行されているコードから) アプリケーションをスケーリングできます。
http://msdn.microsoft.com/en-us/library/ee460799.aspxおよびhttp://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=windowsazuresamples&ReleaseId=3233。
- という名前のキューを作成します
autoscale.[your_role_name].instance_count
- 管理ポータルで、自動スケールを に設定し
Queue
ます。 - [ターゲット数] フィールドを に設定し
1
ます。
これで、そのキューで標準のエンキューおよびデキュー操作を使用して、worker ロール インスタンスの数を制御できるようになりました。有効期限が切れる前にメッセージを処理するのに 7 日間の猶予があるため、キュー内のメッセージの数がターゲット インスタンスの数を追跡していることを確認できるワーカー ロールを作成することができます。
動的な弾力性を求めている場合は、おそらく既にワーカー ロール ベースのコントローラーを念頭に置いているので、おそらく問題にはなりません。
Windows Azure用のLokad.Cloudオープンソースプロジェクトには、分散エグゼキューターフレームワークが含まれています。特に、VMプロビジョニング機能を備えた自動スケーリングを提供します。