🎉

The Worlds of Distributed Systems ― 分散システムの世界観をそろえよう

に公開

The Worlds of Distributed Systems ― 分散システムの世界観をそろえよう

— ロールバックと信頼を「3つの世界」で考えるシリーズ


「分散システムをちゃんと設計したい」と思ったとき、よくこんなことを考えるはめになります

  • ロールバックって、どこまで戻せば「正しい」と言えるんだっけ?
  • サーガだの補償トランザクションだの、本当にそれで十分?
  • 決済や請求を間違えたとき、どこまでがコードの責任で、どこからが組織の責任?

でも現場では、こういう問いはだいたい

「とりあえず動いているからヨシ!」

と棚上げされがちです

このシリーズ 「The Worlds of Distributed Systems」 は、
そういうモヤモヤをいったんテーブルに出して、

分散システムを「3つの世界(RML-1/2/3)」で考えよう

という話をまとめたものです


0. 三つの世界 ― RML-1/2/3 とは?

このシリーズのコアになるのが、次の三つの「世界」です

  • RML-1 — Closed World(閉じた世界)
    まだ何も外に出ていない、安全に失敗できる世界
    メモリと一時ファイルの中だけで完結していて、外部から観測されない領域

  • RML-2 — Dialog World(対話の世界)
    サービス同士やユーザーとの「対話」で帳尻を合わせる世界
    サーガ、補償、リトライ、結果整合性が活躍するゾーン

  • RML-3 — History World(歴史の世界)
    金銭・法務・社会的信頼が絡む、消せない「歴史」の世界
    過去を消すのではなく、返金・訂正・説明を積み上げるしかない領域

ここでいう RML は「Rollback Maturity Level」の略ですが、重要なのは名前ではなく 世界観です

「この処理は、どの世界まで責任を持つんだっけ?」

という問いを、チーム全員が共有できるようにするためのラベルだと思ってください


1. このシリーズでやりたいこと

このシリーズは、分散システムの個別のテクニックというより、

  • 「ロールバックできます」の裏にある前提
  • サーガや結果整合性が本当に解決していること/していないこと
  • 法務・ビジネス・SRE の責任の分かれ目

を、世界観レベルで揃えることを目標にしています

対象読者はだいたいこのあたりです

  • マイクロサービスやイベント駆動システムを触っているバックエンドエンジニア
  • SRE / プラットフォームエンジニア
  • 決済・請求など「やらかしたくない領域」を抱えたプロダクトエンジニア/PM
  • インシデント対応に巻き込まれがちなテックリード

2. シリーズ構成(目次)

大きく 3パート+実務ガイド+エピローグ という構成になっています

Part I: The Worlds of Distributed Systems

― 三つの世界の地図を手に入れる

まずは世界観の話から始めます

第1章

分散システムのロールバックを「3つの世界」で考える — RML-1/2/3メンタルモデル

  • 「ロールバックできます」の危うさ
  • RML-1/2/3 のざっくりしたイメージ
  • 機能ごとに「どの世界に住んでいるか」をラベリングする話
  • 単体記事としても完結する導入編

第2章

RML-1 — Closed World の設計原則:安全に失敗できる部屋を作る

  • RML-1 = 「外部から観測されない一時的な世界」
  • Read-only + Dry Run、Effect Dispatcher などのパターン
  • 本番環境の中に RML-1 を埋め込む(シミュレーション/プレビュー)
  • staging と RML-1 の違い、「ログくらいならいいでしょ」問題

第3章

RML-2 — Dialog World の設計原則:サービス同士の「対話」としてのロールバック

  • 分散システム = 会話のネットワーク、という見方
  • 約束(Promise)/ 実行 / すり合わせ(Reconcile)という3ステップ
  • タイムアウトや「沈黙」も含めた対話のデザイン
  • この「すり合わせ」こそが 結果整合性(Eventual Consistency) の正体

第4章

RML-3 — History World の設計原則:消せない歴史と前向きな修正

  • 決済・請求・医療・公共など、History World になりがちな領域
  • History Hand-off Point(どこから先が “歴史” になるか)
  • Effect Ledger という発想と、「ロールバック = 返金 + 訂正 + 説明」という整理
  • 「やらかした後」に本質が問われる世界

Part II: Dialog World Patterns (RML-2)

― 失敗と再実行を『対話』として設計する

ここからは、RML-2 を中心に「実装寄りの話」に入っていきます

第5章

RML-2の失敗設計と運用パターン — 例外・Observability・ガバナンス

  • world / action / reason を持つ StructuredError
  • 「サーバー側からクライアントに渡す ActionHint」という設計
  • Observability(Datadog / OpenTelemetry)のタグと連携して
    • 「RML-3 のアラートは深夜でも叩き起こす」
    • 「RML-1 は翌朝の Slack でいい」
      みたいな運用ポリシーに直結させる話

第6章

サーガと補償トランザクション — 「やり直し可能な会話」を組み立てる

  • イベント駆動アーキテクチャとサーガのざっくり整理
  • Idempotency Key を「リトライ時の命綱」として扱う話
  • ActionHint の retry-with-backoff と Idempotency Key をセットで設計するルール
  • 「結果整合性」という言葉を、RML-2 → RML-3 の流れと結びつける

第7章

API/クライアント設計 — RMLラベルをどう外部に露出させるか

  • REST API で world / action をどう表現するか
  • Retry-After とエクスポネンシャルバックオフ+ジッター(Thundering Herd 対策)
  • GraphQL の extensions や gRPC の Metadata(Trailers)を使った実装メモ
  • クライアントライブラリで ActionHint 準拠のリトライ戦略を共通化する話

Part III: History World & Governance (RML-3)

― History World の自治とプロダクト戦略

最後のパートは、RML-3 = History World を
「組織とプロダクト戦略」の視点から扱います

第8章

History World の自治 — 法務・ビジネス・SRE の三角形

  • 金銭・法務・ブランドに影響する RML-3 インシデント
  • 法務/ビジネス/SRE の三者で History World をどう管理するか
  • 利用規約(ToS)の補償範囲と RML-3 戦略のリンク
  • RML-3 インシデントが PL(損益計算書)のどこに乗ってくるか、という話

第9章

RML-3 事件簿 — インシデント対応フローの世界観をそろえる

  • Detect / Contain / Diagnose / Decide / Act の5フェーズ
  • Runbook(技術操作) = RML-2、Playbook(組織判断) = RML-3 という対応
  • 「社外向けの説明」テンプレ(技術詳細は RML-2 まで、影響範囲はごまかさない)
  • 事件簿テンプレートで History World をちゃんと記録に残す

第10章

プロダクト戦略としての RML — 信頼を設計する

  • 機能バックログに RML カラムを足す、というシンプルな実務
  • 「この機能は来期 RML-3 に昇格させる?」というロードマップの作り方
  • RML-2/3 とメトリクス(エラー率・返金額・インシデント件数)のつなげ方
  • PL やブランドに効いてくる「History World のコスト」を可視化する

第11章

現場に持ち込むためのレシピ — 小さく始めて育てる RML

  • 明日からできる 5 つの小さな導入
    • 会話の中で world という単語を使ってみる
    • バックログに RML カラムを1列足してみる
    • 新しい例外クラスに world を1個だけ足す
  • ロール別「これだけやる」(App Eng / SRE / PM / 法務)
  • RML キックオフMTGのアジェンダ例
  • 自分たちの現場版 RML-3 事例を3つ書き出す「宿題」

エピローグ

世界観を持ったエンジニアリングへ

  • 「どの世界での話をしているのか?」という一拍を持つこと
  • 正しい答えより、「正しい問い」を共有すること
  • 各社・各現場で「自分たちなりの Worlds of Distributed Systems」を作ってほしい、という話

3. 読み方のガイド

ざっくり、こんな感じで読み進めるのがおすすめです

  • アプリケーションエンジニア

    • 第1〜4章で世界観をつかむ
    • 第5〜7章のパターンを、自分のプロダクトコードに引き寄せて読む
  • SRE / プラットフォームエンジニア

    • 第3章・第5〜7章・第9〜11章あたりが特においしいゾーン
    • Observability やインシデントレスポンスと RML の接続を意識しながら読む
  • PM / テックリード / 法務

    • 第1章 → 第4章 → 第8〜11章だけ拾い読みでも OK
    • 「どこから先が RML-3 か?」をチームで決めるための材料として使う

4. 最後に ― 「それ、どの世界のロールバックですか?」

シリーズ全体を貫いている問いは、たったひとつです

「それ、どの世界のロールバックなんですか?」

  • RML-1 の話なのか
  • RML-2 の対話の話なのか
  • RML-3 の歴史と責任の話なのか

この一拍を挟めるようになれば、
分散システムの設計・運用・インシデント対応は、
今より少しだけマシな方向に転がっていきます

この序章では概要だけざっと眺めました
次の1章から、順番に The Worlds of Distributed Systems を一緒に見ていきましょう

Discussion