メインコンテンツまでスキップ

「最終的整合性と分散の基本(CAPの肌感覚)」32章アウトライン🧩🌍✨

(題材:学食モバイルオーダー “CampusCafe” ☕🍰📱 注文・在庫・決済・通知が出てくるので、CAP判断の練習にちょうどいいよ〜😊)


第1章:この講座のゴールと“肌感覚”の作り方🎯🧠✨

  • 学ぶこと:CAPを暗記じゃなく「判断」にする/最終的整合性が必要になる場面
  • ミニ演習:身近なアプリ(SNS/EC/予約)を「即時一致必要?遅れてOK?」で仕分け📱🔎
  • AI活用:自分のアプリ案を出して「即時必須/遅延OK」分類を作ってもらう🤖📝

第2章:開発環境の準備(Windows)🧰💻✨

  • 学ぶこと:Visual Studio中心で進める(VS Codeは補助)
  • ミニ演習:Minimal API雛形作成、xUnit導入、GitHubにpush📦✅
  • AI活用:Copilotに「プロジェクト構成のおすすめ」を聞く🤖📁

第3章:題材アプリの全体像(CampusCafe)☕📱🗺️

  • 学ぶこと:注文→在庫→決済→通知の流れ(どこが分散になりやすい?)
  • ミニ演習:要件を文章で書く(“ユーザー体験”を含める)📝✨
  • AI活用:要件を「整合性の要求」に分解してもらう🤖🧩

第4章:分散が難しい理由(まずここで転ぶ)😵‍💫📡

  • 学ぶこと:遅い/切れる/順番が変わる/二重に来る
  • ミニ演習:HTTP呼び出しをわざと遅延・失敗させて挙動を見る⏱️💥
  • AI活用:失敗パターンの“図鑑”を作ってもらう🤖📚

第5章:用語の最低限(C/A/P)📘🧩

  • 学ぶこと:Consistency / Availability / Partition(ざっくりでOK)
  • ミニ演習:例を見て「これはCが欲しい?Aが欲しい?」を口で言う🗣️✨
  • AI活用:自分の言葉で説明→添削してもらう🤖✅

第6章:CAP定理の“正しい入口”(誤解しやすい所)⚠️🚪

  • 学ぶこと:「Pが起きたとき」の話/“全部は同時に満たせない”の意味
  • ミニ演習:2サーバ+1データの簡単図を描いて説明する🖥️🖥️📦
  • AI活用:CAPの説明を“中学生にも伝わる言い方”に変換🤖🌸

第7章:CA/CP/APの肌感覚(ざっくり比較)🎛️😊

  • 学ぶこと:正しさ優先(CP)/止まらない優先(AP)/そもそもPを想定しない(CAっぽい)
  • ミニ演習:題材を「決済はCP寄り」「通知はAP寄り」みたいに分類💳🔔
  • AI活用:各分類の理由を“ユーザー目線”で文章化🤖📝

第8章:あなたのアプリで“P”は起きる?起きる前提?📡😳

  • 学ぶこと:クラウド/別DB/外部APIがあるだけでP候補
  • ミニ演習:CampusCafeの“分断ポイント”を洗い出す🔎🧱
  • AI活用:分断ポイント→対策案を3段階で提案してもらう🤖🧯

第9章:最終的整合性って何?(まずイメージ)🕰️✨

  • 学ぶこと:今ズレてても、いずれ揃う/“揃うまでの時間”も仕様
  • ミニ演習:「いいね数」「在庫数」みたいな例で許容を考える👍📦
  • AI活用:“遅延が許される条件”を文章にしてもらう🤖📄

第10章:整合性の期待は1種類じゃない(やさしめ)🌈📘

  • 学ぶこと:ユーザー単位の整合性(自分の操作が見える等)
  • ミニ演習:画面ごとに「これだけは守りたい」を決める🖥️✅
  • AI活用:要件から“期待する整合性”を抽出🤖🔎

第11章:仕様の書き方(即時必須 / 遅延OK を決める)📝🎯

  • 学ぶこと:CAPは技術じゃなく“仕様+UX”で決まる
  • ミニ演習:CampusCafeの各機能にラベル付け(即時/遅延OK)🏷️✨
  • AI活用:そのラベルの理由を「ユーザー体験」で説明させる🤖💬

第12章:UXで勝つ!遅延の見せ方パターン🎨🕐

  • 学ぶこと:処理中表示/後で反映/取り消し可能/再取得
  • ミニ演習:UI文言案を作る(不安にさせない表現)💬🌸
  • AI活用:文言の候補を10個出してもらう🤖✨

第13章:同期と非同期の分け方(迷ったらここ)🔀📬

  • 学ぶこと:同期=すぐ結果/非同期=後で揃える(でも強い)
  • ミニ演習:注文APIの中で「同期でやる」「非同期でやる」を線引き🧩
  • AI活用:線引きのレビューを依頼🤖✅

第14章:メッセージング基礎+“現実のクセ”予告📨⚠️

  • 学ぶこと:イベント/コマンドの違い、少なくとも1回届く世界観
  • ミニ演習:OrderPlaced(イベント)とPlaceOrder(コマンド)を言い分ける🗣️✨
  • AI活用:命名案をたくさん出してもらう🤖🧠

第15章:現実その①「重複(同じのが2回来る)」📨📨😇

  • 学ぶこと:ネットワーク再送・リトライで“普通に起きる”
  • ミニ演習:同じ注文を2回送った時に壊れる例を作る→壊れ方を見る💥
  • AI活用:重複に強い設計案を3つ出してもらう🤖🧱

第16章:現実その②「順番が前後する」🔀😵‍💫

  • 学ぶこと:後から来たはずが先に処理される
  • ミニ演習:通知イベントを順不同に投入して挙動を見る🔔🔀
  • AI活用:順序制御が必要な場面/不要な場面を整理🤖📋

第17章:現実その③「来ない/遅い(取りこぼし・遅延)」🕳️🐢

  • 学ぶこと:タイムアウト=相手が死んだとは限らない
  • ミニ演習:わざと遅延してタイムアウト→後から成功が来るケースを観察⏱️😳
  • AI活用:タイムアウト時のUXと再試行方針を提案してもらう🤖📝

第18章:冪等性① まず概念(同じ要求でも壊れない)🛡️🔑

  • 学ぶこと:分散の世界は“同じことが複数回起きる”前提
  • ミニ演習:「同じ注文が2回来ても1回分だけ処理」方針を言語化🗣️✅
  • AI活用:冪等性が必要な操作リストを作る🤖📄

第19章:冪等性② 冪等キーと重複排除の基本設計🔑🗃️

  • 学ぶこと:Idempotency-Key/キー保存/期限/衝突の考え方
  • ミニ演習:注文APIに冪等キーを付ける設計(DTO/DB)を考える🧩
  • AI活用:キーの設計レビュー(長さ・生成場所・保存期間)🤖🔍

第20章:冪等性③ 状態遷移(State Machine)で二重適用を防ぐ🚦🧠

  • 学ぶこと:状態と遷移を決めて「二度目は拒否」できるようにする
  • ミニ演習:OrderStatus(Created/Paid/Cancelled…)の遷移表を作る📋✨
  • AI活用:遷移表の漏れをチェックしてもらう🤖✅

第21章:エラー分類(リトライしていい?ダメ?)🚥⚠️

  • 学ぶこと:一時的障害 vs 永続的失敗/ユーザー入力エラー
  • ミニ演習:例外を分類表に入れる(HTTP 408/500/400など)📊
  • AI活用:分類ルールを短いガイドにしてもらう🤖📝

第22章:リトライ設計(バックオフ/ジッター/キャンセル)🔁⏳

  • 学ぶこと:むやみに連打しない/待ち方を設計する
  • ミニ演習:疑似的にリトライ回数と待ち時間を決める🎛️
  • AI活用:推奨パラメータ案を出してもらう(理由つき)🤖📌

第23章:サーキットブレーカの肌感覚(押しつぶさない)🧯🚧

  • 学ぶこと:壊れてる相手に突撃し続けない
  • ミニ演習:失敗率が上がったら一時停止するルールを考える📉⛔
  • AI活用:監視指標(失敗率/遅延)と閾値案を提案してもらう🤖📈

第24章:複製(レプリケーション)と“古い読み”🪞🕰️

  • 学ぶこと:読み取りレプリカ/少し古い値が返る世界
  • ミニ演習:「在庫の表示」と「在庫の確保」は分けるべき?を議論📦🤔
  • AI活用:Readモデル/Writeモデルの分け方を提案🤖🧩

第25章:クォーラムの感覚(どれくらい“正しさ”を取りに行く?)🗳️🎛️

  • 学ぶこと:R/W/Nのイメージ(多数決で揃える)
  • ミニ演習:遅延と正しさのトレードオフを表で考える⚖️🐢
  • AI活用:ケース別のおすすめ(決済/通知/集計)を出してもらう🤖📋

第26章:衝突(コンフリクト)はどう起きる?💥😳

  • 学ぶこと:同時更新、オフライン更新、順不同でズレる
  • ミニ演習:プロフィール更新を例に“上書き事故”を想像する🧑‍💻💦
  • AI活用:衝突が起きるシナリオを10個生成🤖🧠

第27章:衝突の解決(LWW/マージ/手動解決)🧩🔧

  • 学ぶこと:「最後に書いた人勝ち」の危険/業務ルールの大切さ
  • ミニ演習:在庫・予約枠でLWWが危険な理由を説明する📦⚠️
  • AI活用:衝突解決ルールの草案を作ってもらう🤖📝

第28章:イベント駆動の入口(疎結合でつなぐ)📣🔌

  • 学ぶこと:同期連鎖を減らす/“事実”を通知して広げる
  • ミニ演習:OrderPaid/StockReserved/PaymentFailed などイベント設計🧾✨
  • AI活用:イベント名とペイロード案をレビュー🤖🔍

第29章:コンシューマ設計(少なくとも1回届く世界の作法)📬🛡️

  • 学ぶこと:冪等コンシューマ/重複排除/順序が必要なら別工夫
  • ミニ演習:同じイベントを2回処理しても壊れない設計にする📨📨✅
  • AI活用:実装チェックリストを作らせる🤖✅

第30章:Outbox① なぜ必要?(DB更新と送信のズレ問題)📤🧾

  • 学ぶこと:DBだけ成功・送信だけ成功…の地獄を避ける😵‍💫
  • ミニ演習:Outboxテーブルに何を保存する?を決める🗃️
  • AI活用:Outboxスキーマ案を作ってもらう🤖🧱

第31章:Outbox② 運用の肌感覚(再送・掃除・監視)🧹🔁📈

  • 学ぶこと:送信失敗時の再試行/二重送信前提/DLQ的な扱い
  • ミニ演習:Outboxの状態(Pending/Sent/Failed)を設計する🚦
  • AI活用:監視項目(滞留件数・失敗率)を提案してもらう🤖📊

第32章:Sagaの肌感覚+総合演習(CAP判断を“仕様→設計”に落とす)🧯🎓✨

  • 学ぶこと:分散で「途中まで成功」を扱う/補償(キャンセル・払い戻し)

  • ミニ演習(総合)

    • 注文→在庫→決済→通知を、どこをCP寄り/AP寄りにするか決定☕📦💳🔔
    • 失敗時の補償フロー(在庫戻す/決済取り消し/通知やり直し)を設計🧩↩️
    • “ユーザーにどう見せるか”まで書く(UX込み)💬🌸
  • AI活用

    • 「この設計の穴(重複/順不同/遅延/補償漏れ)を指摘して」🤖🔍
    • 「ADR(なぜその判断?)を短く書いて」🤖📝

32章版のポイントまとめ😊✨

  • 重複/順不同/遅延をちゃんと分けたので、分散のリアルが理解しやすい📨🔀🐢
  • 冪等性を3章にして、概念→キー→状態遷移まで段階的に入る🛡️🔑🚦
  • Outboxを2章にして、設計だけじゃなく“運用の肌感覚”まで入れた📤🧹
  • 最後はSaga+総合演習で「CAPの判断」を“実装できる設計”まで落とす🎓✨