ストーリー
これまでの月で、あなたは設計原則、データベース、APIと着実にスキルを積み上げてきました。しかし、ある日チームミーティングで 高橋アーキテクト がこう切り出しました。
こうして、あなたの Month 5 — 分散システムへの旅が始まります。
モノリスとは何か
モノリスとは、すべての機能が1つのデプロイ単位に含まれるアーキテクチャです。
// モノリスの例:すべてが1つのアプリケーション
class ECommerceApp {
// ユーザー管理
async createUser(data: UserData): Promise<User> { /* ... */ }
// 商品管理
async listProducts(filter: Filter): Promise<Product[]> { /* ... */ }
// 注文処理
async createOrder(order: OrderData): Promise<Order> { /* ... */ }
// 支払い処理
async processPayment(payment: PaymentData): Promise<Receipt> { /* ... */ }
// 通知
async sendNotification(msg: Message): Promise<void> { /* ... */ }
}
モノリスは悪ではありません。小規模なチームやプロジェクト初期では最も効率的な選択です。
なぜマイクロサービスへ移行するのか
モノリスが成長すると、以下の問題が顕在化します。
| 問題 | 具体例 |
|---|---|
| デプロイの遅延 | 小さな修正でも全体をビルド・デプロイ |
| スケーリングの非効率 | 検索だけ負荷が高くても全体をスケール |
| 障害の連鎖 | 支払いモジュールのバグが全システムをダウン |
| チーム間の衝突 | 10チームが1つのコードベースを変更 |
| 技術的負債の蓄積 | モジュール境界が曖昧になり依存が絡まる |
マイクロサービスの基本構造
マイクロサービスは、ビジネスドメインに沿って分割された、独立してデプロイ可能な小さなサービスの集合です。
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ User │ │ Product │ │ Order │
│ Service │ │ Service │ │ Service │
│ │ │ │ │ │
│ [User DB] │ │ [Product DB] │ │ [Order DB] │
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘
│ │ │
└────────┬────────┴────────┬────────┘
│ API Gateway │
└────────┬────────┘
│
Client
各サービスが独自のデータベースを持ち、APIを通じてのみ通信します。
歴史的な流れ
1990s〜: モノリス全盛
│
▼
2000s〜: SOA(Service-Oriented Architecture)
│ → ESBによるサービス連携、しかし複雑すぎた
▼
2010s〜: マイクロサービス
│ → Netflix, Amazon が先駆者
▼
現在: クラウドネイティブ + サーバーレス
→ コンテナ + オーケストレーションが標準に
まとめ
| ポイント | 内容 |
|---|---|
| モノリスとは | すべてが1つのデプロイ単位 |
| 移行の動機 | デプロイ遅延、スケーリング問題、障害連鎖 |
| マイクロサービスとは | ドメインに沿った独立デプロイ可能なサービス群 |
| 注意点 | 万能ではなく、分散特有の課題がある |
チェックリスト
- モノリスの特徴と利点を理解した
- マイクロサービスへ移行する動機を説明できる
- マイクロサービスの基本構造を理解した
次のステップへ
次は分散システムの根幹となる「CAP定理」と「分散コンピューティングの落とし穴」を学びます。理論的な基盤を固めましょう。
推定読了時間: 15分