テックキャンプ卒の弱々エンジニア日記

エンジニアとして働く中での学びをちょっとでも記録していきます。

マイクロカーネルアーキテクチャ (ソフトウェアアーキテクチャの基礎12章)

こんにちは、Tochiです。 マイクロカーネルアーキテクチャについてまとめていきます。

12章 マイクロカーネルアーキテクチャ

マイクロカーネルアーキテクチャは、プラグインアーキテクチャとも呼ばれ、 パッケージ化され、単一のモノリシックなデプロイメントとしてダウンロードしてインストールできるようになっており、通常はサードパーティ製品として顧客側の環境にインストールされるような製品ベースのアプリケーションにうまくフィットする。

その構成は、コアシステムとプラグインの2つのコンポーネントで構成されている。 これによりアプリケーション機能やカスタム処理のロジックの拡張性・適応性・分離性を実現している。

コアシステムは、必要最低限の機能を形式的に定義したもの。 例えば、Eclipse IDEのコア機能は、「ファイルを開いて、テキストを変更して、ファイルを保存するだけ」という基本的なテキストエディタである。これにプラグインを追加して初めて便利なツールになるのだ。

このように、コアシステムの循環的複雑度を減らしてプラグインコンポーネントを切り出すことで、拡張性と保守性を実現し、テスト容易性を高められる。

コアシステムは、規模や複雑さによってレイヤードアーキテクチャやモジュラーモノリスとして実装できる。

プラグインコンポーネントは、コアシステムを強化・拡張するための特殊処理や追加機能を含む独立したコンポーネントだ。独立していることで保守性やテスト容易性が保たれる。このプラグインコンポーネントは一般にポイントツーポイントで通信するが、RESTやメッセージングを利用して各プラグインスタンドアローンのサービスにするという選択肢もある。

このリモートアクセスアプローチは、コンポーネント全体を疎結合にし、スケーラビリティとスループットを向上させる。一方、この利点がアーキテクチャ全体を分散アーキテクチャに変えてしまい全体的な複雑さとコストを生み出す。

このアーキテクチャは、冒頭に記したEclipseIDEの他ChromeやEdgeといったWebブラウザでも採用されている。 また保険金請求処理を行うようなシステムでは、司法管轄区ごといに規則が異なったりするのでこれらのアーキテクチャを利用する。

たしかにこれは相性よさそう。

まとめ

マイクロアーキテクチャを使うのはカスタマイズ処理とかが必須となるようなシステムの時に採用すると良いのかな??? ただ耐障害性の特性がないという点では、少し採用しづらさを感じる。。