冪等レシーバ
クライアントからの要求が一意に特定され、クライアントが再試行する際に重複要求を無視できるようにする
課題
クライアントはサーバーにリクエストを送信しますが、必ずしも応答が得られるわけではありません。クライアントがリクエストを処理する前に、応答が失われたのか、サーバーがクラッシュしたのかを知ることは不可能です。クライアントは、リクエストが確実に処理されるようにするために、リクエストを再送信する必要があります。
サーバーがすでにリクエストを処理してその後クラッシュしていた場合、サーバーは再実行時にクライアントから重複要求を受け取ります。
解決策
各クライアントに一意の ID を割り当てることで、クライアントが一意に識別されます。
サーバーはリクエストを受け取ると、同じクライアントからの指定されたリクエスト番号を含むリクエストが処理されているかどうかを確認します。保存された応答が見つかった場合、リクエストを再度処理せずに、同じ応答をクライアントに返します。
詳細については、oreilly.com のオンライン電子書籍の 第 15 章 を参照してください。
このパターンは Patterns of Distributed Systems の一部です。
2023 年 11 月 23 日