LESSON 15分

ストーリー

高橋アーキテクト がホワイトボードに大きなマインドマップを描き始めました。

高橋アーキテクト
ここまでで分散システムの概要がわかったね。ここで一度、これから戦うことになる課題の全体像を整理しよう。この地図が、Month 5の残りの旅のガイドになる

課題の全体マップ

                    分散システムの課題

        ┌────────────────┼────────────────┐
        │                │                │
    通信の課題        データの課題      運用の課題
        │                │                │
   ├─ 同期 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データ読み書きの性能差CQRSStep 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分