0

会議室の予約を作成および更新する Web サービスがあるとします。更新により、時間や部屋番号など、予約のさまざまな側面が変更される可能性があります。

サービスへのユーザーのネットワーク接続が信頼できない可能性があり (モバイル ネットワークなど)、2 人のユーザー A と B が同じ予約を順番に更新しようとしているとします。

ユーザー A が会議時間を午後 2 時に変更する POST 要求を送信すると、要求がサーバーに到達し、サーバーが要求を正常に処理しました。ただし、ネットワーク接続が原因でユーザー A への応答が失われ、ユーザー A は要求が失敗したと考えます。

ユーザー A が再試行する前に、ユーザー B が会議時間を午後 2 時 30 分に変更する要求を送信すると、要求は成功し、ユーザー B に正常に応答します。

ここで、ユーザー A が (おそらく自動的に) 同じ要求を再試行すると、今度は要求と応答の両方が問題なく成功します。つまり、会議の時間が午後 2 時に変更されます。

上記の架空のシナリオでは、ユーザー A の重複した要求によってユーザー B の要求が上書きされ、サーバー側で不適切な状態が発生します。

考えられる単純な解決策の 1 つは、クライアントのすべての要求ごとに ID を設定することです。この ID は、要求が単に再試行/再送信されても​​変更されません。次に、サーバー側で、サーバーは受信したリクエスト ID のコレクションを維持し、重複をチェックします。

この問題を解決するためのより良い技術または方法は何ですか?

4

1 に答える 1