モノリス【monolith】
概要

モノリス型のシステムでは、全機能が同じコードベース上に実装され、まとめてビルドされ、単一のプロセスとして動作する。機能間の連携はプログラム内部の関数呼び出しで完結するため、プロセス間通信や通信ネットワークを介する必要がなく、処理速度や通信効率の面で有利になる場合がある。ソースコードを一つのプロジェクトとして管理できるため、開発初期は全体の構造を把握しやすく、テストや配備も一括して行える。
一方、システムの規模が大きくなるに連れて管理が難しくなる傾向がある。全機能が密に結びついているため、一部を修正した際に予期しない箇所へ影響が波及しやすく、変更のたびにシステム全体を再構築して配備しなければならない場面も生じる。
特定の機能にアクセスが集中してサーバに負荷がかかった場合でも、その機能だけを個別に規模を拡張することは難しく、システム全体のリソースを増強する必要が生じる。開発チームが大規模になると、多数の開発者が同じコードを同時に編集することになり、変更の競合や調整の手間が増える。
こうしたモノリスの課題を背景に、システムを完結した独立性の高い区画に区切る「マイクロサービス」(microservice)という考え方が現れた。この方式では、機能ごとに独立した「サービス」を構築し、それぞれをネットワーク経由で連携させる。「モノリス」という呼び名が広く使われるようになったのは、マイクロサービスが浸透した2010年代以降に旧来の方式を区別する必要からとされる。
もっとも、モノリスが一概に旧式で劣っているというわけでではなく、規模や用途に応じて現在も広く採用されている。モノリスとマイクロサービスの実用的な折衷案として、内部を機能単位で整理しながら単一アプリケーションとして動作させる「モジュラーモノリス」(modular monolith)という構成も考案されている。