今日学んだこと:アーキテクチャに関して
概要
今日はアーキテクチャの種類について学んだ。
レイヤードアーキテクチャ
レイヤードアーキテクチャは、n層アーキテクチャとしても知られており、最も一般的なアーキテクチャスタイルの1つだ。 このスタイルのアーキテクチャは、シンプルさや親しみやすさ、 コストの低さから、ほとんどのアプリケーションにとってのデファクトスタンダードとなっている。 また、このスタイルは、システムを設計する組織にとって、 とても自然な形でアプリケーションを開発できる形でもある。 それは、組織はそのコミュニケーション構造をコピーしたシステムを設計するように制約されているという、 コンウェイの法則が働くからだ。
ほとんどのレイヤードアーキテクチャは、 プレゼンテーション層、ビジネス層、永続化層、 データベース層の4つの標準的なレイヤーで構成されている。 特に、永続化ロジック(SQLやHSQLなど) がビジネス層のコンポーネントに組み込まれている場合は、 永続化層はビジネス層に統合される。 小規模なアプリケーションではレイヤーは3つのこともあるが、 大規模で複雑なビジネスアプリケーションではレイヤーは5つ以上になる場合もある。
パイプラインアーキテクチャ
ソフトウェアアーキテクチャの歴史に繰り返し登場する基本的なアーキテクチャスタイルの1つに、 パイプラインアーキテクチャがある (このスタイルは、「パイプとフィルター」 アーキテクチャとしても知られている)。 開発者やアーキテクトが機能を個別のパーツに分割することに決めると、すぐにこのパターンが登場する。 ほとんどの開発者は、BashやZshといった Unixターミナルシェル言語の背後にある基本原則として、 このアーキテクチャに親しんでいる。
パイプラインアーキテクチャのトポロジーは、パイプとフィルターから構成される。
マイクロカーネルアーキテクチャ
マイクロカーネルアーキテクチャ(プラグインアーキテクチャとも呼ばれる)は数十年前に登場し、 現在でも広く使われているアーキテクチャスタイルだ。 このアーキテクチャスタイルは、製品ベースのアプリケーション (パッケージ化され、単一のモノリシックなデプロイメントとして ダウンロードしてインストールできるようになっており、 通常はサードパーティ製品として顧客側の環境に インストールされるようなアプリケーション) にうまくフィットしており、 カスタムビジネスアプリケーションでも広く使用されている。
マイクロカーネルアーキテクチャは、コアシステムとプラグインの2つの コンポーネントで構成される比較的シンプルな モノリシックアーキテクチャだ。 アプリケーションロジックは、 独立したプラグインコンポーネントと 基本的なコアシステムに分かれており、 それによってアプリケーション機能やカスタム処理ロジックの拡張性、 適応性、分離性を実現している。
サービスベースアーキテクチャ
サービスベースアーキテクチャは、 マイクロサービスアーキテクチャのハイブリッドであり、 その柔軟性の高さから、 最も実用的なアーキテクチャスタイルの1つと考えられている。 サービスベースアーキテクチャは分散アーキテクチャだが、 マイクロサービスやイベント駆動アーキテクチャなどの 分散アーキテクチャのような複雑さやコストはなく、 多くのビジネスアプリケーションにとても人気の選択肢となっている。
サービスベースアーキテクチャは、 分散型のマクロなレイヤード構造をとり、 個別にデプロイされたユーザーインターフェイス、 個別にデプロイされた粒度の粗いリモートサービス、 そしてモノリシックなデータベースから編成される。
イベント駆動アーキテクチャ
イベント駆動アーキテクチャは、 高度にスケーラブルで高パフォーマンスなアプリケーションを 実現するために用いられる分散非同期型のアーキテクチャスタイルだ。 このアーキテクチャスタイルは適応性に優れており、 小規模なアプリケーションにも大規模で複雑なアプリケーションにも 用いることが可能だ。 イベント駆動アーキテクチャは、 非同期的にイベントを受信して処理する、 分離されたイベント処理コンポーネントで構成される。 このアーキテクチャスタイルは、 単体のアーキテクチャスタイルとしても使用できるし、 他のアーキテクチャスタイル (イベント駆動マイクロサービスアーキテクチャなど)に 組み込む形でも使用できる。
ほとんどのアプリケーションは、イベントベースモデルではなく、 リクエストベースモデルと呼ばれるモデルを採用している。 このモデルでは、ある種のアクションを実行するための システムへのリクエストが、 リクエストオーケストレーターへと送られる。 リクエストオーケストレーターは一般的には ユーザーインターフェイスとなるが、 API層やエンタープライズサービスバスとして実装することもできる。 リクエストオーケストレーターの役割は、 リクエストをさまざまなリクエストプロセッサーに一義的 かつ同期的に導くことだ。 リクエストプロセッサーは、 データベースの情報を取得・更新して、リクエストを処理する。