2011-06-18 4 views
5

すべてのAzureインスタンスのデータを最新表示するにはどうすればよいですか?すべてのAzureインスタンスのデータのリフレッシュ

私はいくつかのインスタンスがそれぞれ同じWebロールを実行しています。ロール起動時に、ブロブストレージからローカルストアにデータが読み込まれます。間もなくサイトで使用されるデータの新しい更新があります。 Blobストレージからインスタンスのローカルストレージに更新されたデータを取得し、各インスタンスが更新されるように各インスタンスにプログラムで通知する必要があります。

1つのアイデアは、カスタムのクライアントプログラムを記述してWebロールでWebサービスを呼び出し、更新するロールIDを渡すことです。エンドポイントがロールIDの場合、インスタンスはそれ自身をリフレッシュします。そうでない場合、クライアントは、すべてのインスタンスがリフレッシュされたことを通知するまで、再度試行します。これは良いアプローチですか、これを行うためにAzureにメソッドが組み込まれていますか?

私は、リフレッシュフラグを断続的にチェックする別のスレッドを考えましたが、私のインスタンスが同期しなくなるのではないかと心配しています。

巨大なデータがないので、Azureキャッシュに入れることができます。しかし、私はキャッシュを使用してネットワークの待ち時間が心配です。 Azureキャッシュはこれをうまく処理しますか?

もう1つのアイデアは、インスタンスを次々とリブートすることです(ロールアップの開始時にリフレッシュ操作が実行される)。

答えて

1

、私はあなたの提案された技術に対処しましょう:

  • を、私はあなたが今だけでなく、Webサービスを追加したとして、クライアントを呼び出すウェブサービス技術は、実用的ではないと思いますそれを呼び出すクライアントドライバとして機能し、個々のWebロールインスタンスに接続する機能はありません。ロードバランサは個々のインスタンスをユーザから隠します。
  • キャッシュにデータを格納することはできますが、データを「今すぐ」に更新する唯一の方法は、キャッシュ内のアイテムを期限切れにすることです。よく知られているキーを持つ単一のキャッシュ項目にすべてのデータがある場合は、期限切れになります。複数のキーにまたがっている場合は、より複雑なタスクがあり、アイテム全体をアトミックに期限切れにすることはできません(キャッシュ全体をクリアしない限り)。さらに、キャッシュはそれ自身で期限切れになります。キャッシュが発生した場合は、再ロードする必要があります。
  • blob(多分単一のzipファイル)を検索し、idが変更されたときにzipをローカルストレージにコピーする、あなたのロールインスタンスでバックグラウンドスレッドを使うことができます。メタデータなど)。それでは、定期的にチェックすることができます(毎分?)。
  • 再起動のアイデアは良い面と悪い面があります。良い面では、ロールインスタンスが実行中のときにローカルコンテンツを変更することによる副作用を避けることになります。悪い点は、再起動時にロールインスタンスが数分間オフラインになることです。

スチュアートが設定を使用することの提案は良いものです。アプリを壊さずにファイルを更新できることを確認してください。これを安全に行うことができない場合は、Changingイベントを処理しないでください。ロールインスタンスをリサイクルさせてください。

3

これは、構成設定で設定(タイムスタンプなど)を使用することです。プログラムによって構成を更新し、すべての変更を監視するためにRoleEnvironment.Changingイベントを使用することができますあなたのインスタンス - http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.serviceruntime.roleenvironment.changing.aspx

これを行う場合は、すべての役割でイベントをインターセプトし、変更を解析して(Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironmentConfigurationSettingChangeを探して)、Cancelパラメータにfalseを返して、インスタンスが再起動されないようにします。スチュアートの答えに追加

+0

設定をプログラムでどのように更新しますか?私はAzure APIを呼び出す以外の比較的簡単な方法は見つけられないようです。 – Piedone