0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ソフトウェアアーキテクチャの基礎 【マイクロカーネルアーキテクチャ編】

0
Posted at

はじめに

この記事はソフトウェアアーキテクチャの基礎を勉強したシリーズの第4弾となります。
初回の基礎知識編はこちら

今回はマイクロカーネルアーキテクチャです

トポロジー

コアシステムプラグインの2つのコンポーネントで構成されたモノリシックアーキテクチャ
基本的機能をもったコアシステムと独立した機能をもつプラグインコンポーネントを組み立てることで、拡張性、適応性、分離性を実現している
image.png

コアシステム

システムを実行するのに必要最低限の機能を形式的に定義したもの
VScodeが良い例である。VScode自体は単なるエディタであるが、多くのプラグインが用意されおり、それらを用いることで多くの機能を使用することができる
例えば、持っているクレジットカードの種別によって特典を付与する機能があるとする

def get_benefit(card_tyep: string):
    if (card_type == 'AAA'):
        hoge()
    elif (card_type == 'VVV):
        huga()

上記の機能はクレジットカード種別全てに対応する必要があり、今後も対応する種別は増えるためコアシステムに持たせるべきではなく、プラグインとして持たせておく方がよい

def get_benefit(card_tyep: string):
    card_benefiter = CardBenefit() # これがプラグイン
    card_benefiter(card_tyep)

コアシステムの分割

コアシステムをどのように分割するかも決定する必要がある
技術でも分割できるし、ドメインによって分割することもできる
image.png

ユーザーインターフェースのデプロイ単位

ユーザーインターフェースを組み込む場合はユーザーインターフェースを単一にするか分割するかも選択肢として感がられる
image.png

プラグインコンポーネント

コアシステムを強化・拡張するための特殊な処理や追加機能、カスタムコードなどを含む、独立したコンポーネントである
プラグインコンポーネントは互いに独立し、依存関係がないのが理想的
プラグインコンポーネントには以下の方式がある

  • ランタイムベース
  • コンパイルベース

プラグインコンポーネントの在り方

プラグインコンポーネントは必ずポイントツーポイントでなくてもよく、RESTやメッセージングを使用してもよい
各プラグインをコンテナを使用したスタンドアローンのサービスと定義してもよい
image.png
各プラグインのスケーラビリティは確保や非同期処理が可能とはなるが
オーバーヘッドの増加やプラグインの応答が返ってこない(または、稼働していない)などの問題が発生するためトレードオフではある

データの保存

一般的にはデータベースとのやり取りはコアシステムのみで行い
コアシステムがデータベースが取得したデータをプラグインコンポーネントに渡して処理する流れがよい
理由としては疎結合であり、データベースの変更をコアシステムのみが影響を受けて、各プラグインコンポーネントには影響しないほうがいいからである
image.png
しかし、各プラグインコンポーネントで使用するために独自のデータストアを所有することもできる

事例

ソフトウェア開発やリリースに使用されるツールのほとんどがマイクロカーネルアーキテクチャで実現されている
VSCode, Jira, Chrome, FirefoxなどのWebブラウザもそうである
また、複雑なルールが無数にあり、それらを条件的に処理するようなアプリケーションにも向いている
Ex) 税金のフォームで職業や年収、地域によって、減税率を変化させたい場合

アーキテクチャの評価

  • ドメインによる分割と技術による分割の両方が可能である唯一のアーキテクチャスタイル
  • ユーザーのカスタマイズセイや機能拡張を重視したプロダクトやアプリケーションと相性がいい
  • 機能を独立したプラグインコンポーネントに分割できるため、テスト容易性、デプロイ容易性、信頼性は平均値となる(レイヤードアーキテクチャより高い)
  • 不要な機能はプラグインコンポーネントごと削除すればいいので、モジュール性もある
アーキテクチャ特性 評価
分割タイプ ドメインと技術
量子数 1
デプロイ容易性 ★★★
弾力性
進化性 ★★★
対障害性
モジュール性 ★★★
全体的なコスト ★★★★★
パフォーマンス ★★★
信頼性 ★★★
スケーラビリティ
シンプルさ ★★★★
テスト容易性 ★★★

※★が多いほど評価が高い

自分なりの説明

WioTerminalがいい例かも
基本な機能はあるが、センサーを追加することで、CO2濃度が測定できたりなどの追加機能を得ることができる
image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?