Closed5

POST を冪等にする仕組みについて調べる

nissy-devnissy-dev

クライアントはサーバー側の要求通りに毎回 unique なキーを header に付与してリクエストするだけみたいだ。サーバー側は、色々細かい処理が必要になる。

  • key のユニーク性の検証 (key の使い回しは 422, key がそもそもない場合は400)
  • key の有効期限の検証
  • 最初のリクエストが終わる前に次のリクエストが来たら 409 を返す

key は有効期限があるので、半永続化する必要がある。RDB での保存例は次のスライドがわかりやすい。

https://speakerdeck.com/ohbarye/my-favorite-protocol-idempotency-key-header?slide=58

キーの保存と他の処理が atomic でないといけないのは、なるほどなー
https://speakerdeck.com/ohbarye/my-favorite-protocol-idempotency-key-header?slide=62

nissy-devnissy-dev

リトライの話で、Exponential Backoff が紹介されていた。Exponential Backoff とは、時間を指数的に増加させながらリトライする手法のこと。一定間隔のリトライと比較して、サーバーへの負荷を減らすことができる。

https://qiita.com/po3rin/items/c80dea298f16a2625dbe

nissy-devnissy-dev

キーの保存と他の処理が atomic でないといけないのは、なるほどなー

こういうのほかの処理が別サービスになると分散トランザクションになるよなー
今の副業でも分散トランザクション考えなくていいのかみたいなことを思うことも多いんだけど、分散トランザクションの方法について少しみてみる。Saga パターンを聞いたことがあるので、それをまず調べてみる。

ここら辺が参考になった

https://engineering.mercari.com/blog/entry/20230614-distributed-transaction/

https://techblog.gmo-ap.jp/2023/10/20/microservice_saga/

このスクラップは2024/07/16にクローズされました