モノリス
全機能を 1 つのデプロイ単位にまとめたアーキテクチャで、シンプルだが大規模化で課題が生じる
モノリスとは
モノリスは、全機能を 1 つのデプロイ単位にまとめたアーキテクチャである。シンプルで開発が速いが、大規模化するとデプロイの遅延やチーム間の調整コストが増加する。
モノリス vs マイクロサービス
モノリスとマイクロサービスの違いを以下にまとめる。
| 観点 | モノリス | マイクロサービス |
|---|---|---|
| デプロイ | 全体を一括 | サービスごと |
| スケーリング | 全体をスケール | サービスごと |
| 開発速度 (初期) | 速い | 遅い (インフラ構築) |
| 開発速度 (大規模) | 遅い (調整コスト) | 速い (独立) |
| 運用の複雑さ | 低い | 高い |
| トランザクション | 容易 | 分散トランザクション |
モノリスの問題
モノリスの問題を以下にまとめる。
| 問題 | 説明 |
|---|---|
| デプロイの遅延 | 小さな変更でも全体をデプロイ |
| スケーリングの非効率 | 注文処理だけスケールしたいのに全体をスケール |
| チーム間の調整 | 同じコードベースで衝突 |
| 技術スタックの固定 | 全体が同じ言語・フレームワーク |
モノリスの段階的分割
モノリスの段階的分割を図で示す。
Phase 1: モノリス (1 Lambda)
Phase 2: モジュラーモノリス (内部を分離)
Phase 3: マイクロサービス (Lambda を分割)
いつモノリスを選ぶか
分割するかどうかは規模の大小ではなく、境界を間違えたときにやり直せる余地が残っているかで考える。
| 場面 | 判断 | 理由 |
|---|---|---|
| 新規開発でこれから仕様が動く | モノリスで始める | 境界の引き直しがコードの移動だけで済み、サービス間の通信やデータの分割をやり直す作業が発生しない |
| チームが 1〜5 人 | モノリス | 分割しても並行して開発できる人数が増えるわけではなく、増えるのはデプロイ対象と監視対象の数になる |
| どこで機能を切れるか見えていない | モノリス | 間違った位置で切ると分散トランザクションを抱え込むため、境界が見えるまで 1 つのデプロイ単位に留める |
| チームが 10 人以上で同じコードの変更が衝突する | 分割を検討 | リリースの足並みを揃える調整が重くなり、独立してデプロイできる単位に切る利点が運用の複雑さを上回りはじめる |
より深く学ぶには関連書籍が役立つ。
この記事は役に立ちましたか?
関連用語
モノリスファースト
新規プロジェクトではまずモノリスで構築し、ドメイン理解が深まってからマイクロサービスに分割する戦略
モジュラーモノリス
モノリスの内部をモジュールに分割し、マイクロサービスの利点を取り入れたアーキテクチャ
マイクロサービス
1 つの大きなアプリケーションを複数の小さなサービスに分割し、それぞれが独立してデプロイ / スケール可能な状態で協調動作するアーキテクチャパターン
アーキテクチャ
システム全体の構造設計。コンポーネントの分割と関係を決める最上位の設計判断
認知負荷
開発者がコードを理解 / 変更するために必要な精神的な労力の量
Strangler Fig パターン
レガシーシステムを段階的に新システムへ移行する設計パターン
関連する記事
深夜 3 時のデプロイ前に読み返したい 1 ページ
本番デプロイの直前、最終確認のチェックリストとして技術書の特定のページが役立つことがあります。緊張の場面で頼りになる「お守りの 1 ページ」の見つけ方と活用法。
技術書典と技術同人誌の世界 - 読者として楽しむガイド
技術書典の楽しみ方と技術同人誌の魅力を紹介。商業出版にはないニッチなテーマの深掘りや、著者と直接話せるイベントの活用法を解説します。
エンジニアが最初に読むべき技術書 5 冊の選び方 - ジャンル配分が鍵
新人エンジニアやキャリアチェンジ組が最初に読むべき技術書のジャンル配分と、言語 / 設計 / 運用 / CS 基礎 / ソフトスキルの 5 冊を選ぶチェックリストを紹介。