「最終的整合性と分散の基本(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の判断」を“実装できる設計”まで落とす🎓✨