ストーリー
高橋アーキテクト がホワイトボードに大きなマインドマップを描き始めました。
課題の全体マップ
分散システムの課題
│
┌────────────────┼────────────────┐
│ │ │
通信の課題 データの課題 運用の課題
│ │ │
├─ 同期 vs 非同期 ├─ データ一貫性 ├─ サービスディスカバリ
├─ プロトコル選択 ├─ 分散TX ├─ 設定管理
├─ タイムアウト ├─ CQRS/ES ├─ 分散トレーシング
├─ リトライ ├─ 冪等性 ├─ 集中ログ
└─ サーキットブレーカー └─ 結果整合性 └─ カオスエンジニアリング
課題一覧と解決策の対応
| # | 課題カテゴリ | 具体的な問題 | 解決策 | 学習Step |
|---|---|---|---|---|
| 1 | 通信 | 同期呼び出しの連鎖 | イベント駆動、非同期メッセージング | Step 2, 3 |
| 2 | 通信 | サービス間の結合 | API Gateway、サービスメッシュ | Step 2 |
| 3 | 通信 | 障害の伝播 | サーキットブレーカー、バルクヘッド | Step 2 |
| 4 | データ | 分散トランザクション | Sagaパターン | Step 4 |
| 5 | データ | データの一貫性 | 結果整合性、Outboxパターン | Step 4, 5 |
| 6 | データ | 読み書きの性能差 | CQRS | Step 5 |
| 7 | データ | イベントの冪等性 | 冪等キー、デデュプリケーション | Step 3 |
| 8 | 運用 | サービスの発見 | サービスディスカバリ | Step 2 |
| 9 | 運用 | 設定の分散管理 | 分散設定管理 | Step 2 |
| 10 | 運用 | 障害の原因特定 | 分散トレーシング、テスト戦略 | Step 5 |
各課題の概要
通信の課題
// サービスAがB、C、Dを順番に呼ぶ場合
// レイテンシ = A + B + C + D(加算される)
async function processRequest() {
const b = await callServiceB(); // 50ms
const c = await callServiceC(); // 30ms
const d = await callServiceD(); // 40ms
// 合計: 120ms + ネットワーク遅延
}
// さらに、BがダウンするとA、C、Dも機能しなくなる
// → これが「障害の連鎖」
データの課題
// 注文処理で「在庫確認」「決済」「配送手配」が別サービスの場合
// 決済は成功したが配送手配で失敗したら?
// → 決済を取り消す「補償トランザクション」が必要
// → これがSagaパターンの動機
運用の課題
// 20個のサービスがあると......
// ・1つのリクエストが5サービスを通過
// ・ログが5箇所に分散
// ・どこでエラーが起きたか特定困難
// → 分散トレーシング(Correlation ID)が必要
この先の学習ロードマップ
Step 2: マイクロサービスの設計原則
→ 通信、ゲートウェイ、ディスカバリ、設定管理
Step 3: イベント駆動アーキテクチャ
→ メッセージング、ブローカー、冪等性
Step 4: Sagaパターンと分散トランザクション
→ 分散TX、補償、Outbox
Step 5: CQRSと結果整合性
→ Read/Write分離、テスト戦略
Step 6: 最終試験
→ 全スキルを統合した設計チャレンジ
まとめ
| ポイント | 内容 |
|---|---|
| 3つのカテゴリ | 通信、データ、運用 |
| 最も難しい課題 | データの一貫性(Sagaで解決) |
| 全体像を持つ意味 | 個々の技術が何を解決するか理解できる |
チェックリスト
- 分散システムの課題を3カテゴリに分類できる
- 各課題に対する解決策を大まかに把握した
- Step 2〜6で何を学ぶか見通しが立った
次のステップへ
課題の全体像を把握したところで、Step 1の理解度チェックに進みましょう。ここまでの学びを確認します。
推定読了時間: 15分