🌐

Distributed Systems

分散システム

アーキテクチャの進化

📦

Monolith

App
DB

単一プロセス

🔗

Distributed

App
App
DB
DB

複数ノード

🧩

Microservices

Svc A
Svc B
Svc C
Svc D

独立サービス

スケール限界
分散の複雑性
運用の複雑性

アーキテクチャ比較

観点MonolithDistributedMicroservices
デプロイ全体一括ノード単位サービス単位
スケール垂直のみ水平可能サービス単位で最適化
障害影響全体停止部分的影響局所的
データ整合性容易(単一DB)要設計困難(結果整合性)
複雑性コード内インフラ分散 + 運用
チーム単一チーム複数チーム可サービス単位で独立
適したフェーズ初期 / 小規模中規模大規模 / 組織分割

選択の判断基準

Monolithを選ぶ時

  • • スタートアップ初期
  • • 小規模チーム(〜10人)
  • • ドメインが不明確
  • • 迅速なイテレーション優先

分散化する時

  • • 垂直スケールの限界
  • • 高可用性が必要
  • • 地理的分散が必要
  • • 読み書き負荷の分離

Microservices化する時

  • • 大規模組織(複数チーム)
  • • 独立したデプロイが必要
  • • 異なる技術スタックが必要
  • • 明確なドメイン境界

分散システムの8つの誤解(Fallacies)

分散システム設計時にエンジニアが陥りがちな誤った前提。全て誤りである。

1. ネットワークは信頼できる
2. レイテンシはゼロ
3. 帯域幅は無限
4. ネットワークは安全
5. トポロジは変わらない
6. 管理者は一人
7. 転送コストはゼロ
8. ネットワークは均質

詳細トピック