冪等(べきとう)について
2021/11/17 02:00
冪等(べきとう)について、システム開発で利用する際の具体例を出しながら「実際にこういうところで使うんだよ」という話をお伝えしました。基本的な概念の話に続いてジョブ・キューや、Webhookの例が登場します。20分強の動画です。
冪等(べきとう)とは
何度呼んでも結果が同じであることを冪等と言います。話者は少し転じた表現も使っていて「何回処理を行っても状態が無駄に変化しない」というような伝え方もしていました。
冪等が使われる例
HTTPのGET
大抵のGETのURLは、冪等を期待して作られています(作法なのでこれを破ることもできます)。これによって、データをキャッシュしたりすることがやりやすくなるなどのメリットがあります。RESTの文脈でよく出てくる話です。
ジョブキュー(Job Queue)
Webのシステムでは、いち早くレスポンスを返した上で非同期に処理を行いたい場合によくジョブキューを利用します。ジョブキューは処理の塊を定義しておき、それを順番に処理していく仕組みです。例えば
- RubyのSidekiq
- JSのBull
- AWSのSQS(Simple Queue Service)
などがジョブキューです。
ジョブキューの多くは「少なくとも一回成功」の実装で行われており、つまり例えジョブが成功した場合においても同じジョブがもう一度送信されてしまうことはあり得るものです。
その為、ジョブキューのジョブは冪等に作ることが基本的な考え方です。一度処理して成功した内容を重ねて処理してしまわないようにジョブの冒頭で状態をチェックするなどします。これを怠ると、正常な処理が複数回呼ばれてしまう事故が起きたりします。
ウェブフック(Webhook)
Webhookで公開されているURLへのリクエストが、必ずしも同期的に起こるとは限らないと考えて、冪等に作る例を挙げています。大抵は何かのIDが振られたデータを処理するので「この処理は既に処理したデータか」を判断して冪等に仕上げることが多いでしょう。