読者です 読者をやめる 読者になる 読者になる

【アーキテクチャパターン】POSA Vol.1のMicrokernel(マイクロカーネル)

Microkernelアーキテクチャパターンは,変更されるシステム要件への適合が必要なシステムに用いられる.
その際,システムの核となる最小限の機能を,拡張機能や顧客依存部分から分離する.
また様々な拡張機能を組み込んだり,その拡張機能が強調して動作できるような調停機能を提供したりする,一種のソケットとしての役割も果たす.

前提

同一の中核機能を利用して,類似したプログラミングインターフェースを有するアプリケーションを複数開発する.

課題

変更への対処

  • アプリケーションプラットフォームは,ハードウェアの進化とソフトウェアの進化に対処する必要がある
  • 新技術を容易に取り込めるように移植性・拡張性・適合性を持つ必要がある

既存の標準に合わせて開発された過去のアプリも実行できる必要がある

  • アプリケーション群が,複数のアプリケーションプラットフォーム上で稼働する必要がある
  • ドメインのアプリケーション群を,稼働するアプリケーションプラットフォームでグループ化する

  • アプリケーションプラットフォームの中核機能は最小限に抑える.

解決策

アプリケーションプラットフォームが提供するサービスのうち,基礎となるサービスをマイクロカーネルコンポーネントカプセル化する.

マイクロカーネルシステムは「複数のアプリケーションプラットフォームを統合するアプリケーションプラットフォーム」である.

静的側面

マイクロカーネルパターンでは5種類のコンポーネントが定義される.

  • Internal server
  • External server
  • Adapter
  • Client
  • Microkernel

マイクロカーネル

このパターンの中心となるコンポーネント. 下記機能をもつ.

  • 通信機能
  • リソース管理機能
  • ハードへの依存性をカプセル化

マイクルカーネルが提供するサービスのことを以下では「メカニズム」と呼び, その上で動く高度な機能軍を「ポリシー」と呼ぶ.

f:id:yusuke_ujitoko:20161119101126p:plain:w400

内部サーバ

マイクロカーネルの機能を拡張するコンポーネント. (サブシステムとも呼ばれる) 内部サーバの機能は,マイクロカーネルだけが使う.

f:id:yusuke_ujitoko:20161119101323p:plain:w400f:id:yusuke_ujitoko:20161119102047p:plain

外部サーバ

マイクロカーネルを利用してアプリケーションドメインのビューを実現するコンポーネント. (パーソナリティとも呼ばれる)

外部サーバはインターフェースを提供し,その機能を公開する.

f:id:yusuke_ujitoko:20161119101503p:plain:w400

クライアント

ちょうど一つの外部サーバと関連を持つ. クライアントがアクセスするのは,その外部サーバのインターフェースだけ.

そのアクセスのための通信機能をクライアントに提供するのが以下のアダプターである.

アダプタ

クライアントと外部サーバ間にインターフェースを導入することで,クライアントが外部サーバに依存性を持たないようにする. f:id:yusuke_ujitoko:20161119102400p:plain

f:id:yusuke_ujitoko:20161119102657p:plain

動的側面

シナリオ1

クライアントが外部サーバを呼び出すときの振る舞い

f:id:yusuke_ujitoko:20161119102947p:plain

シナリオ2

外部サーバが内部サーバの提供する機能を要求した際の,マイクロカーネルの振る舞い.f:id:yusuke_ujitoko:20161119104125p:plain

実装

  1. アプリケーションドメインを分析する
  2. 外部サーバを分析する
  3. サービスをカテゴリに分類する
  4. カテゴリを分割する
  5. カテゴリに対する操作と抽象を見つける
  6. リクエストの送信と結果の受信の戦略を決定する
  7. マイクロコンポーネントを構造化する
  8. マイクロカーネルコンポーネントのプログラミングインターフェースを定義する
  9. システムリソースの管理
  10. 内部サーバコンポーネントを設計し実装する
  11. 外部サーバコンポーネントを実装する
  12. アダプタコンポーネントを実装する
  13. クライアントとなるアプリケーションを開発する

バリエーション

結論

Microkernelパターンの欠点

  • 移植性
    • 新しいソフトorハード環境に移植する場合に,外部サーバやクライアントアプリケーションを移植する必要がない
  • 柔軟性と拡張性
    • 新しいビューを実装する場合には,外部サーバを追加するだけでよい
    • 機能追加したい場合には,内部サーバを追加あるいは拡張するだけでよい
  • ポリシーとメカニズムの分離
  • スケーラビリティ
  • 信頼性
  • 透過性

Microkernelパターンの欠点

  • パフォーマンス
  • 設計と実装の複雑さ

yusuke-ujitoko.hatenablog.com