モノリスアーキテクチャ
単体アプリケーションの構造と限界
モノリスの構造
🌐
Browser
📱
Mobile
↓
Monolith Application
UI Layer
Business Logic
Data Access
↓
🗄️
Single Database
モノリスの特徴
利点
- ✓シンプル: 単一のコードベース、ビルド、デプロイ
- ✓開発効率: IDEサポート、リファクタリング容易
- ✓トランザクション: 単一DBでACID保証
- ✓テスト: E2Eテストが容易
- ✓デバッグ: スタックトレースが追いやすい
欠点
- ✗スケール限界: 垂直スケールのみ
- ✗デプロイリスク: 全体を再デプロイ
- ✗技術固定: 単一技術スタック
- ✗チーム競合: コード変更の衝突
- ✗障害影響: 一部の問題が全体に波及
スケールの限界
垂直スケール(Scale Up)
Server
2 CPU, 4GB RAM
↓ スペックアップ
Server
8 CPU, 32GB RAM
↓ スペックアップ
Server
32 CPU, 128GB RAM
⚠️ 物理的・コスト的限界
水平スケール(Scale Out)
App
App
↓
Single DB
問題:
- • セッション共有
- • DBがボトルネック
- • ステート管理
モノリスを卒業すべきサイン
📈
スケール限界
垂直スケールでは性能要件を満たせない
👥
チームの成長
10人以上でコード競合、コミュニケーションコスト増大
🚀
デプロイ頻度
一部の機能を独立してデプロイしたい
💥
障害の影響範囲
一部の障害が全体に波及し、可用性が低下
Modular Monolith(中間選択肢)
Modular Monolith
Module A
API
Logic
Module B
API
Logic
Module C
API
Logic
Shared Infrastructure
利点
- • モジュール間の境界が明確
- • 将来の分割が容易
- • デプロイは単一のまま
実現方法
- • パッケージ/名前空間で分離
- • モジュール間はAPIで通信
- • DBスキーマもモジュール単位
モノリスのベストプラクティス
モジュラー設計
将来の分割を見越して、モジュール境界を意識
CI/CDの整備
テスト自動化、デプロイ自動化で安全にリリース
ステートレス化
セッションは外部(Redis等)に保存、水平スケール準備
監視・ログ
将来のデバッグのために、構造化ログとメトリクス