1

Azure操作、特にテーブルストレージに対するべき等操作を設計するパターンを知っている人はいますか? より一般的なアプローチは、id 操作を生成し、それをキャッシュして新しい実行を検証することですが、操作を処理するワーカーが多数ある場合、このアプローチはより複雑になります。:-))

ありがとう

4

2 に答える 2

1

わかりましたので、 nightpfhorcodingoutloudから要求されたように、例を提供していません。とはいえ、べき等操作に対処するための非常に一般的な方法の 1 つは、必要なアクションを Windows Azure キューにプッシュすることです。次に、worker ロール インスタンスの数に関係なく、一度に 1 つのインスタンスのみが特定のキュー アイテムで動作します。キュー メッセージがキューから読み取られると、指定した時間の間非表示になります。

現在: そのメッセージの処理中にいくつかのことが発生する可能性があります。

  • タイムアウト期間後に処理を完了します。メッセージを削除しようとすると、例外が発生します。
  • 時間がなくなっていることに気付いたので、キュー メッセージのタイムアウトを増やします (現在、これを行うには REST API を呼び出す必要があります。いずれ SDK に組み込まれる予定です)。
  • 何か問題が発生し、メッセージを削除する前にコードで例外が発生します。最終的に、メッセージは再びキューに表示されるようになります (指定された非表示タイムアウト期間の後)。
  • タイムアウト前に処理を完了し、メッセージを正常に削除します。

それは並行性を扱います。べき等性については、副作用なしで操作を繰り返すことができるかどうかはあなた次第です。たとえば、誰かの週給を計算し、印刷ジョブをキューに入れ、週給を Table 行に格納します。何らかの理由でエラーが発生し、メッセージを削除しないか、メッセージを削除する前にコードが中止されます。

時間を早送りすると、別のワーカー インスタンス (または同じインスタンス) がこのメッセージを再読み取りします。この時点で、理論的には、必要なアクションを簡単に再実行できるはずです。あなたのケースでこれが実際に不可能な場合、べき等操作はありません。ただし、これを回避するために自由に使用できるメカニズムがいくつかあります。

  • 各キュー メッセージには DequeueCount があります。これを使用して、キュー メッセージが以前に処理されているかどうかを判断し、処理されている場合は、適切なアクションを実行できます (たとえば、その従業員のテーブル行を調べます)。
  • 処理パイプラインには、繰り返すことができない段階があるかもしれません。その場合:キュー メッセージがまだ他のユーザーに表示されておらず、自分で処理している間に、キュー メッセージの内容を変更できるようになりました。したがって、|SalaryServiceCalledのようなものを追加することを想像してください。その後、|PrintJobQueuedなどを追加します。これで、パイプラインに障害が発生した場合、次にメッセージを読んだときに中断した場所を把握できます。

それが役立つことを願っています。あなたが達成しようとしていることについて詳しく知らずに、ここで暗闇の中で撮影するようなものです.

編集: 冪等性とテーブル ストレージの間の接続が表示されないことに言及する必要があると思います。Table Storage、SQL Azure、またはその他のストレージ コンテナーを使用するかどうかにかかわらず、冪等性に対処する必要があるため、これは同時実行の問題だと思います。

于 2011-11-05T01:15:10.613 に答える
0

この問題を解決するには、返信ログの保存方法を使用できると思います

于 2012-01-12T01:16:07.443 に答える