イベントドリブンアーキテクチャとメッセージベースアーキテクチャの現実により、データの整合性とシステムの安定性を維持しながら、同じ要求を受け入れる必要性が決まります。
説明するには、エレベーターの呼び出しボタンを考えてみましょう。 ボタンを押すと点灯し、エレベーターが床に送られます。 しばらくすると、他の誰かがロビーに参加します。 この人は、あなたを笑顔にして、もう一度照らされたボタンを押します。 あなたは笑顔を返し、エレベーターを呼び出すためのコマンドはべき等であることを思い出して独りでクスクス笑いました。
エレベーター呼び出しボタンを 2 回目、3 回目、または 4 回目に押しても、最終的な結果には影響しません。 ボタンを押すと、回数に関係なく、エレベーターがフロアに送られます。 エレベーターのようなべき等システムでは、同じコマンドが何回実行されても、同じ結果が発生します。
アプリケーションの構築に関しては、次のシナリオを検討してください。
- 在庫管理アプリケーションが同じ製品を複数回削除しようとするとどうなりますか?
- 同じユーザーの従業員レコードを作成する要求が複数ある場合、人事アプリケーションはどのように動作しますか?
- あなたの銀行アプリが同じ引き出しを行うために100の要求を受け取った場合、お金はどこに行くのですか?
関数への要求が同じコマンドを受け取る可能性があるコンテキストは多数あります。 状況には次のようなものがあります。
- 同じ要求を何度も送信するポリシーを再試行します。
- キャッシュされたコマンドがアプリケーションに再生されました。
- 複数の同一の要求を送信するアプリケーション エラー。
データの整合性とシステムの正常性を保護するため、冪等性を持つアプリケーションは以下の動作を含むロジックを備えています。
- 削除を実行する前にデータが存在することを確認する。
- 作成アクションを実行する前に、データが既に存在するかどうかを確認します。
- データの最終的な整合性を作成するロジックを調整する。
- 並行処理制御。
- 重複の検出。
- データの鮮度検証。
- 入力データを検証するロジックを保護します。
最終的にべき等性は、特定のアクションが可能であり、1 回だけ実行されることを保証することによって実現されます。
次のステップ
- Azure Functions信頼性の高いイベント処理
- Azure Functions における並行処理
- Azure Functionsエラー処理と再試行