Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Amazon S3 の一貫性モデル超入門 #ハードル激低LT大会 / Low-hurdle L...

y_taka_23
April 20, 2023

Amazon S3 の一貫性モデル超入門 #ハードル激低LT大会 / Low-hurdle LT Meetup 2nd

ハードル激低LT大会ッ! #02 で使用したスライドです。

Amazon S3 の強い Read-after-write 一貫性と、その同期プロトコルの検証に使用された形式手法の一種、P 言語のさわりを紹介しています。

イベント概要:https://smarthr.connpass.com/event/278899/

y_taka_23

April 20, 2023
Tweet

More Decks by y_taka_23

Other Decks in Technology

Transcript

  1. #ハードル激低LT大会 S3 の一貫性モデル (Consistency Model) • S3 オブジェクトの「見え方」は一筋縄ではいかない ◦ 複数の

    AZ にレプリケーションが行われる関係で「時差」がある • 2020 年 11 月以前の更新・削除は結果整合性(結果一貫性) ◦ つまり「消せば(すぐ)消える」は自明どころか間違いだった • 2020 年 12 月以降は更新・削除も Read-After-Write 一貫性に ◦ 更新・削除の後、そのデータ(の不在)が即座に読み取り可能 ◦ オブジェクトのタグや ACL も対象だが、Bucket 自体の設定は対象外 ◦ ちなみに新規作成は以前から read-after-write 一貫性だった https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html#ConsistencyModel
  2. #ハードル激低LT大会 パターン 1:書き込み完了後に読み込み開始 • クライアント A と B がほぼ同時に README.md

    を書き換える ◦ A は Hello に、B は GoodBye に中身を更新したい • 書き込みリクエスト完了後に読み込みリクエストが到着 ◦ この場合、読み込み結果は後から書いた GoodBye で確定 Client A Client B S3 PUT(Hello) GET => GoodBye GET => GoodBye PUT(GoodBye)
  3. #ハードル激低LT大会 パターン 2:読み込み開始が書き込み完了に先行 • B の書き込み終了より前に A が読み込みを開始 • 読み込み結果はリクエスト到着順やレプリケーション速度に依存

    ◦ A から見ると Hello になる場合と GoodBye になる場合の両方がある ◦ B から見ると自分が書き込んだ GoodBye は確定して見える Client A Client B S3 PUT(Hello) GET => GoodBye GET => GoodBye PUT(GoodBye)
  4. #ハードル激低LT大会 パターン 2:読み込み開始が書き込み完了に先行 • B の書き込み終了より前に A が読み込みを開始 • 読み込み結果はリクエスト到着順やレプリケーション速度に依存

    ◦ A から見ると Hello になる場合と GoodBye になる場合の両方がある ◦ B から見ると自分が書き込んだ GoodBye は確定して見える Client A Client B S3 PUT(Hello) GET => Hello GET => GoodBye PUT(GoodBye)
  5. #ハードル激低LT大会 パターン 3:別の書き込み開始が書き込み完了に先行 • A の書き込み完了前に B が書き込みを開始 • 読み込み結果はやはりリクエストの到着順に依存

    ◦ 実際には後から来た書き込みが有効になる ◦ 先ほどと違って十分な時間待っても最終結果がどちらかは分からない Client A Client B S3 PUT(Hello) GET => GoodBye GET => GoodBye PUT(GoodBye)
  6. #ハードル激低LT大会 パターン 3:別の書き込み開始が書き込み完了に先行 • A の書き込み完了前に B が書き込みを開始 • 読み込み結果はやはりリクエストの到着順に依存

    ◦ 実際には後から来た書き込みが有効になる ◦ 先ほどと違って十分な時間待っても最終結果がどちらかは分からない Client A Client B S3 PUT(Hello) GET => Hello GET => Hello PUT(GoodBye)
  7. #ハードル激低LT大会 AWS Storage 開発チームによる P 言語の活用 • 形式手法と呼ばれるツール群の一つ ◦ システムの動作と仕様を数学的に厳密に記述し理論的に検査

    • 各プロセス(クライアント・サーバ等)を状態機械で表現 ◦ 分散システムで起こり得るタイミング問題を静的・系統的に探索 • AWS の S3 開発チームでも使用されている ◦ 一貫性の性質を変更する際にバグがないかを P 言語で設計・検査 ◦ S3 のスケールは大きいので、十億回に一回のバグでも日に何度か起きる ◦ P 言語を用いることで、レアケースでももれなく検知できる https://www.youtube.com/watch?v=B0yXz6EeCaA