【システム構成】二度届いても動じない!「冪等性(べきとうせい)の担保」|情報処理問題1000本ノック
ネットワークの不安定な環境では、同じリクエストが重複して届くことは珍しくありません。そんな時、システムが二重処理を防ぎ、常に正しい結果を保つための必須概念を攻略しましょう。
1. 問題:重複リクエストへの耐性
【 問題 】 ある操作を1回行っても、失敗したと思って複数回繰り返して行っても、結果が常に同じ(副作用が1回分しか発生しない)ようになる性質を何と呼ぶでしょうか?
ア、一貫性(Consistency) イ、可用性(Availability) ウ、冪等性(Idempotency) エ、原子性(Atomicity)
2. 正解:システム設計・APIに関する正解
正解: ウ、冪等性(べきとうせい)
3. 解説:「何度やっても結果が同じ」という安心感
特に決済システムやメッセージキューを利用した分散システムにおいて、冪等性の担保は設計上の最優先事項の一つです。
【図解:冪等性がある場合とない場合】
■ 冪等性がない例(銀行振込)
・「1万円送金する」という命令を2回送ると、2万円引き落とされる。
・通信エラーで結果が分からない時に再送するのが怖くなる。
■ 冪等性を担保した例
・命令に「リクエストID:A100」を付与する。
・サーバー側で「A100は処理済み」と記録しておけば、2回目が届いても「既に完了しています」と安全に回答できる。
■ 冪等性がない例(銀行振込)
・「1万円送金する」という命令を2回送ると、2万円引き落とされる。
・通信エラーで結果が分からない時に再送するのが怖くなる。
■ 冪等性を担保した例
・命令に「リクエストID:A100」を付与する。
・サーバー側で「A100は処理済み」と記録しておけば、2回目が届いても「既に完了しています」と安全に回答できる。
[ HTTPメソッドと冪等性 ]
★ GET, PUT, DELETE:原則として冪等であるべきとされています(何度消しても、無い状態は変わらない)。
★ POST:原則として冪等ではありません(送るたびに新しいデータが作られる可能性がある)。
★ GET, PUT, DELETE:原則として冪等であるべきとされています(何度消しても、無い状態は変わらない)。
★ POST:原則として冪等ではありません(送るたびに新しいデータが作られる可能性がある)。
1. 理解のコツ: エレベーターの「行先階ボタン」をイメージしてください。1回押しても、連打しても、結局その階に止まるという「結果」は変わりません。これが冪等性です。
2. 試験対策の視点: 「同じデータが複数回届いても正常に処理できる」「ある操作を何度繰り返しても結果が同一」という表現があれば冪等性です。分散システムにおける「リトライ処理」とセットで出題されることが多いです。
4. まとめ
「同じデータが複数回届いても、正常に処理できることを担保する」。これが冪等性(べきとうせい)です。ネットワークの「もしも」を想定し、二重実行によるデータの不整合を防ぐ、堅牢なシステム設計の要(かなめ)です。
PR