モノリシックとは?
モノリシック(Monolithic)の語源であるモノリス(Monolith)とは、単一の岩や石から成る地学的な特徴を指します。一枚岩(いちまいいわ)という際に指す単語です。反対に、モノリシックの対義語は「小さな」「微小な」という意味のマイクロです。
モノリシックとは単一の塊で構成されている設計構成を指します。簡単にいえば、システムやソフトウェアが1つのモジュールでできており、分割されていない設計のことです。
モノリシックの設計構成は巨大なものであったり、安全で堅牢な構造であったりします。以下にいくつかの例を挙げてみましょう。
モノリシックカーネルとは?
カーネルとはオペレーティングシステム(OS)の機能で、メモリー管理やCPU管理あるいはI/O管理等をプロセッサの特権を使って効率的に制御する機能を指します。ユーザはシステムコールによりカーネルへ要求を発行し、処理を依頼します。
カーネルはユーザのプログラムをプロセスとして管理し、要求に応じてシステム資源を割り当て、ファイルやI/Oのアクセス要求を受け付けます。カーネルの設計には信頼性を高めたり、処理能力を最大限に発揮させたりするためにプロセッサの特権やハードウェアの特定の処理を実行します。信頼性を高めるために不正アクセスを防止する機能を実装し、システム障害耐性を高めています。
また処理能力向上のため、カーネル内部のモジュールをスレッド化し一塊のプログラムとして動作させる方式となります。それを「モノリシックカーネル」と言います。代表的なOSはLinuxやFreeBSD等があります。
一方近年OSの保全性を高めるために、必要最小限の機能のみをカーネル空間に割り当てて、それ以外のサーバ機能群をユーザ空間で実行させる仕組みが実装されています。そのカーネル構造を「マイクロカーネル」と言います。代表的なOSはAIXやMacOS等があります。
マイクロカーネルは保全性が高いのですが、ユーザ空間とカーネル空間のやり取り(コンテキストスイッチ)が多発するため、性能効率は若干低下すると見られています。
モノリシックドライバとは?
ドライバとはOSに組み込まれているモジュールの1つで、接続されるインターフェイスを制御するインターフェイスドライバと、その先に接続されている周辺装置を制御するデバイスドライバで構成されています。ドライバの代表的な機能は装置固有の機能をOS提供のAPIからアクセス可能で、標準的な手続きでの利用方法を提供することです。
ハードウェア固有の設定や手続きはドライバ内部で吸収するため、利用ユーザはハードウェアの詳細な仕様を知らなくても機器が利用可能です。
通常のドライバは上位ドライバと下位ドライバがやり取りをして処理をしますが、あえて階層化せずに一塊のドライバとしてハードウェアの性能を最大限発揮する方法があります。そのドライバを「モノリシックドライバ」と言います。
モノリシックICとは?
モノリシックICとは、集積回路のチップに抵抗器・トランジスタ・ダイオード等の回路素子を形成し、数ミリから十数ミリ角に切り出した集積回路を指します。
ハイブリッドICとは、個別の部品や集積回路を高密度に実装し一体化した部品を指します。近年、部品製造では多層基板へのプリント技術が向上しています。そのためモノリシックICのプリント基板とハイブリッドICの多層化製品の境目はあいまいになりつつあります。
モノリシックカーネルのメリット・デメリット
ここでは、モノリシックカーネルのメリット・デメリットをそれぞれ挙げていきます。
モノリシックカーネルのメリット
モノリシックカーネルのメリットは、単一で全ての処理が完結するため、プロセス間の通信が不要で全体の処理が高速になることです。カーネル自体はカーネルアドレス空間に存在するため、カーネル開発者にとっては全体のデバッグがしやすく、全体の堅牢性を高めることができます。
モノリシックカーネルのデメリット
モノリシックカーネルのデメリットは、1つの大きな塊のため不要なサービスを含めた全体の機能が組み込まれることで、メモリー使用量が大きいことが挙げられます。また、カーネルの障害発生時はシステムダウンが発生するため、品質が安定しない場合は影響が非常に大きくなります。同様に、カーネル開発者以外はメンテナンスしにくい点も挙げられます。
モノリシックアプリケーションとは?
モノリシックアプリケーションとは、従来型アプリケーション開発の手法に基づいて設計されたアプリケーションです。従来のアプリケーションは、単一のプロセスにモジュールを一体化し処理を行っています。モノリシックアプリケーションは堅牢ですがシステム資源を均等に消費するため、特定の処理に負荷が集中する場合には適切な処理平準化ができませんでした。
マイクロサービスとは?
マイクロサービスとは、ソフトウェアを個々のサービスの集合体として個別に割り当てし、実行する設計手法を指します。マイクロサービスの一例としてWebアプリケーションを挙げましょう。近年のアプリケーションはWebアプリケーションが多くなっています。
Webアプリケーションでは複数の要求をサーバで処理するため、負荷の高い要求をサービスとして分割していく手法が考え出されました。アプリケーション内部ではアカウント管理や受注管理・発注管理・在庫管理等の機能に分かれているため、各処理単位を個々のマイクロサービスとして定義し開発します。
マイクロサービスアーキテクチャとは?
マイクロサービスアーキテクチャとはアプリケーションをマイクロサービスに分解し、設計する手法を指します。マイクロサービスでは各サービスを疎結合し、データの送受信や共有を行います。近年仮想マシンやコンテナ上でアプリケーションを稼働させるケースが増えています。
その場合必要とされるサービスをマイクロサービス化し起動することで、システム資源の効率的な活用が可能となるでしょう。
マイクロサービスのメリット
マイクロサービスは仮想マシンやコンテナによるプラットフォーム利用が増加し、注目されている方法です。またクラウドサービスの中にはマイクロサービス用APIを提供し、クラウド・ネイティブ・アプリケーションとして推進しています。クラウド上で稼働しやすいアプリケーションを増やすことで、自社クラウドサービスへの誘導を促進しています。
マイクロサービスの具体的なメリットについて以下で解説します。
影響の局所化
アプリケーションをマイクロサービス化することで各提供サービスを小さい単位に定義し、疎結合で利用します。そのため個々の提供サービスに問題が生じても、その影響は他のサービスへ伝搬しにくい構造をとっています。
システム資源(リソース)の有効活用
システム資源(リソース)は有限のため、効率的な利用が望まれます。マイクロサービスでは個々のモジュールを最小化し必要な処理量に応じてシステム資源を利用します。そのため実際の負荷状況に応じてインスタンスを起動し、システム資源が割り当てられます。これにより効率的なシステム資源の利用が可能です。
新技術などのスピーディな採用
個々の機能はマイクロサービスで提供されるために、個々のマイクロサービスの置き換えが他のマイクロサービスへ影響しません。そのため、新技術等による機能更新や評価が必要とされる場合においてもスピーディなモジュール開発が可能で、動作検証やデプロイ(配布)が容易になります。
変更へのスピーディな対応
個々のマイクロサービスにおいて不具合等の問題が発生した際にも、マイクロサービス単位での評価・検証が可能です。同様に修正モジュールの配布も該当マイクロサービスの修正モジュールのみをデプロイし更新することが可能となります。
マイクロサービスのデメリット
従来のモノリシックアプリケーションもまだ利用が多いですが、理由はなぜでしょうか。マイクロサービスにおいても、やはり従来型モノリシックアプリケーションに劣る部分やリスクが存在します。ここではマイクロサービスのデメリットについて触れていきましょう。
パフォーマンスの劣化
モノリシックアプリケーションでは、一体型の1つのプロセスとしてアプリケーションが設計されています。そのためにアプリケーション内部での通信や情報共有は、単一プロセス内で実行されるのでオーバーヘッドがほとんど生じません。
一方マイクロサービスでは各機能がマイクロサービスとして疎結合されているため、データのやりとりや共有時には通信が発生します。そのためアプリケーションとシステムのオーバーヘッドが増加すると予測されます。
全体の一貫性にかける
モノリシックアプリケーションでは全体のモジュールを全体最適に設計します。一方、マイクロサービスでは個々のモジュールをマイクロサービスとして設計するため、単一マイクロサービスとしては最適化されていますが、全体のモジュールとしては過不足や処理の重複が生じることがあります。
これによりモジュールの一貫性が低い場合は実際の運用時に問題が発生したり、切り分けに時間を要することも予想されます。
設計にスキルを要する
マイクロサービスでは機能分割の粒度を正しく設計しないと、サービス全体のシステム資源の適切性が図れなくなったり、想定した性能が発揮されなかったりする恐れがあります。同様に複数のインスタンスを起動した場合に所定の動作がされないことなど、不具合が発生しやすくなります。そのため、設計には専門知識と経験が求められるでしょう。
モノリシックの特徴を理解しシステム設計を最適化しよう
モノリシックは単一の塊で構成されているモジュールなため、カーネルやドライバあるいは集積回路の設計等で一般的な手法です。一方、近年仮想マシンやコンテナ等によるアプリケーションサービスが増えてきておりマイクロサービスも活用されています。それぞれの特徴を理解し、最適な手法に基づいてシステム設計を行っていきましょう。
この知識は増加が見込まれるクラウドサービスの利用時にも活用できるため準備をおすすめします。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから