$30 off During Our Annual Pro Sale. View Details »

形式手法による分散システムの検証 〜S3 の一貫性モデルを例として〜 #ourdevday2023 / Our DevDay 2023

形式手法による分散システムの検証 〜S3 の一貫性モデルを例として〜 #ourdevday2023 / Our DevDay 2023

俺たちの本当にやりたかった DevDay で使用したスライドです。

AWS Dev Day 2023 Tokyo の RejectCon としての位置付けで、以下は本家 AWS DevDay の CFP 応募時のプロポーザルです。講演時間が 45 分から 20 分に短縮されたことに伴い、一部内容を変更しています。

みなさん、分散システムを「正しく」開発してますか? 2020 年、Amazon S3 の一貫性モデルが見直され、オブジェクトに対する更新がラグなしに読み取れるようになりました。この際、巨大な分散システムである S3 に対して新しい同期プロトコルの「正しさ」を保証するために選ばれたツールこそが、形式手法の一種、P 言語です。本講演では、分散システムを愛しそして苦しむ全てのエンジニアのために、S3 を単純化したトイモデルを段階的に設計・検証する流れを追体験し、形式手法の威力と魅力を感じてもらいます。

イベント概要:https://connpass.com/event/282059/
プロポーザル:https://github.com/aws-events/aws-dev-day-tokyo-2023-cfp/issues/107

y_taka_23

June 21, 2023
Tweet

More Decks by y_taka_23

Other Decks in Technology

Transcript

  1. #ourdevday2023
    形式手法による分散システムの検証
    〜S3 の一貫性モデルを例として〜
    チェシャ猫 (@y_taka_23)
    俺たちの本当にやりたかった DevDay (21st Jun. 2023)

    View Slide

  2. #ourdevday2023
    99.999999999 %

    View Slide

  3. #ourdevday2023
    Client A
    AZ
    AZ
    AZ
    S3

    View Slide

  4. #ourdevday2023
    Read-After-Write (Dec. 2020)

    View Slide

  5. #ourdevday2023
    Client A
    v1
    AZ
    v1
    AZ
    v1
    AZ
    v1
    S3
    Client B
    v2

    View Slide

  6. #ourdevday2023
    Client A
    Client B
    S3
    PUT v1
    PUT v2
    Get = v2
    Get = v2

    View Slide

  7. #ourdevday2023
    Client A
    Client B
    S3
    PUT v1
    PUT v2
    Get = v2
    Get = v2

    View Slide

  8. #ourdevday2023
    Client A
    Client B
    S3
    PUT v1
    PUT v2
    Get = v1
    Get = v2

    View Slide

  9. #ourdevday2023
    Client A
    Client B
    S3
    PUT v1
    PUT v2
    Get = v2
    Get = v2

    View Slide

  10. #ourdevday2023
    Client A
    Client B
    S3
    PUT v1
    PUT v2
    Get = v1
    Get = v1

    View Slide

  11. #ourdevday2023
    2-クライアントの PUT → GET のパターンは?

    View Slide

  12. #ourdevday2023
    8C4 = 70 通り

    View Slide

  13. #ourdevday2023
    カオス
    エンジニアリング
    Shift-right
    Shift-left
    ?
    開発
    設計 運用

    View Slide

  14. #ourdevday2023
    #ourdevday2023
    形式手法

    View Slide

  15. #ourdevday2023
    #ourdevday2023
    “システマティックな探索”

    View Slide

  16. #ourdevday2023
    2 1
    4 1 2 3
    4 3
    2
    4
    1
    3
    =
    ×
    仕様:◯ >= □ グラフ探索に帰着




    View Slide

  17. #ourdevday2023
    P

    View Slide

  18. #ourdevday2023
    アクターモデル

    View Slide

  19. #ourdevday2023
    メッセージ
    キュー 状態

    View Slide

  20. #ourdevday2023
    0
    incr
    decr
    1
    decr
    send "decr"
    send "incr"
    状態の更新
    他のアクターたち

    View Slide

  21. #ourdevday2023
    machine Counter {
    var localCount: int;
    state WaitForOpration {
    on eIncrReq do (req: tIncrReq) {
    localCount += req.count;
    assert localCount > 0, "count should be positive!";
    goto WaitForOperation;
    }
    on eDecrReq do (req: tDecrReq) {...}
    }
    }

    View Slide

  22. #ourdevday2023
    安全性 (safety):悪いことが決して起こらない
    活性 (liveness):良いことがいつか起こる

    View Slide

  23. #ourdevday2023
    0
    3
    1
    2
    活性仕様:1 の後にはいつか 3 が来る
    Msg 1
    Msg 2
    Msg 3
    Msg 0
    cold
    Msg 0
    hot
    Msg 1
    Msg 3

    View Slide

  24. #ourdevday2023
    From “Probably” Correct to “Provably” Correct!
    Presented by チェシャ猫 (@y_taka_23)

    View Slide