🌐
Distributed Systems
分散システム
アーキテクチャの進化
📦
Monolith
App
DB
単一プロセス
→
🔗
Distributed
App
App
DB
DB
複数ノード
→
🧩
Microservices
Svc A
Svc B
Svc C
Svc D
独立サービス
スケール限界→
分散の複雑性→
運用の複雑性
アーキテクチャ比較
| 観点 | Monolith | Distributed | Microservices |
|---|---|---|---|
| デプロイ | 全体一括 | ノード単位 | サービス単位 |
| スケール | 垂直のみ | 水平可能 | サービス単位で最適化 |
| 障害影響 | 全体停止 | 部分的影響 | 局所的 |
| データ整合性 | 容易(単一DB) | 要設計 | 困難(結果整合性) |
| 複雑性 | コード内 | インフラ | 分散 + 運用 |
| チーム | 単一チーム | 複数チーム可 | サービス単位で独立 |
| 適したフェーズ | 初期 / 小規模 | 中規模 | 大規模 / 組織分割 |
選択の判断基準
Monolithを選ぶ時
- • スタートアップ初期
- • 小規模チーム(〜10人)
- • ドメインが不明確
- • 迅速なイテレーション優先
分散化する時
- • 垂直スケールの限界
- • 高可用性が必要
- • 地理的分散が必要
- • 読み書き負荷の分離
Microservices化する時
- • 大規模組織(複数チーム)
- • 独立したデプロイが必要
- • 異なる技術スタックが必要
- • 明確なドメイン境界
分散システムの8つの誤解(Fallacies)
分散システム設計時にエンジニアが陥りがちな誤った前提。全て誤りである。
1. ネットワークは信頼できる
2. レイテンシはゼロ
3. 帯域幅は無限
4. ネットワークは安全
5. トポロジは変わらない
6. 管理者は一人
7. 転送コストはゼロ
8. ネットワークは均質