Compass Map上級エンジニアの地図

1 つのデータベースの中なら、トランザクションが整合を守ってくれます。
システムや会社をまたぐと、消える・2 回届く・順番が入れ替わる・途中で止まるを前提に、手順で整合を作ります。

なぜ会社の単位で整合を設計するのか

製品と製品、会社と会社(お客さまの給与のシステム・会計ソフト・銀行)をまたぐと、1 つのトランザクションの守りはありません。しばらくの間ずれていて、最後にそろう(結果整合性)ことを前提に、連携ごとに作り方を決めます。

Saga・Outbox・冪等

システムをまたぐ処理を、それぞれの中で完結する小さなトランザクションの列にするのが Saga です。データベースへの書き込みと知らせの送信を 1 つにまとめるのが Outbox(送信箱)、届いた知らせを 1 回分として扱うのが冪等な受け取り(Inbox)です。下の体験で、送信箱がある時・無い時に、知らせが消える・2 回届く様子を見てください。

体験: 送信箱(Outbox)がある時・無い時 考え方のヒント

作り方
起きること

    5 つの作り方 × 4 つの起きること(ますを押すと、左にその流れが出ます)

    順番と重複

    知らせの順番は、決めた仕組みと単位の中でしか守られません。順番を守る仕組みを使うか、受け取る側が版の番号で古い知らせを捨てるかを、連携ごとに決めます。下の練習で、締めの知らせが入れ替わって届いたとき、受け取り方でどうなるかを見てください。

    練習: 締めの知らせが入れ替わって届く 考え方のヒント

      届いた順
      ほかに

      取り消しの手順

      Saga の途中で失敗したら、済んだ手順を、それぞれの業務の決まりで取り消します(補償トランザクション)。ただし、戻れない点(ピボット)を過ぎたら取り消さず、やり直しと前に進む直しで最後まで進めます。下の練習で、失敗の種類ごとに、どう動くかを選んでください。

      練習: Saga を 1 歩ずつ。途中で失敗させて、どう動くかを選ぶ 考え方のヒント

      連携

      失敗

      手順(司令塔が 1 つずつ流す)

        Saga の記録

          決めたことを残す形

          連携の台帳、Saga の手順書、送信箱と受け取りの記録の表の定義です。上の練習で選んだ連携の手順が入ります。そのままコピーして、表計算・文書・データベースのひな形に使えます。

          連携の台帳 考え方のヒント

          Saga の手順書(Markdown) 考え方のヒント

          送信箱と受け取りの記録の表(SQL) 考え方のヒント

          落とし穴

          分散とデータの整合で、よくはまる所です。

          AI 時代の整合(エージェントの取り消しと冪等)

          AI のエージェントは、外の仕組みを呼び、失敗すると自分でやり直します。やり直しは 2 回目の実行になり、取り消しは補償になります。エージェントが触る道具ごとに、冪等か・取り消せるか・人の承認が要るかを決めておきます。

          チェックリスト

          自分の会社のシステムをまたぐ連携を見直したら、チェックを付けてください(この端末にだけ残ります)。考え方のヒント