
ソフトウェアエンジニアリングにおいて、マルチティアアーキテクチャ( n層アーキテクチャまたは階層型アーキテクチャとも呼ばれる)は、ソフトウェアアーキテクチャのさまざまなレベルが物理的に分離されたクライアント/サーバアーキテクチャです。マルチティアアーキテクチャの最も一般的な使用例は、プレゼンテーション、アプリケーション処理、データ管理機能を分離する3層アーキテクチャであり、Ciscoの階層型インターネットワーキングモデルなどがこれに該当します。その他の分離層としては、サービス層、ビジネス層、データアクセス層、永続化層などが挙げられます。
N層アプリケーション アーキテクチャは、開発者がアプリケーション全体を再構築するのではなく、ソフトウェア開発プロセスの特定の層を変更または追加できるモデルを提供します。そのシンプルさと低コストのため、小規模でシンプルなアプリケーションによく使用されます。 [ 1 ] [ 2 ] Web 開発では、静的コンテンツとキャッシュされた動的コンテンツを提供するフロントエンドWeb サーバー、動的コンテンツの処理と生成を行う中間アプリケーション サーバー、およびバックエンドデータベースまたはデータ ストアで構成されるWeb サイトを説明するために、3 層アーキテクチャがよく使用されます。
厳密な階層システムでは、各レイヤーは下位のレイヤーに依存し、上位のレイヤーがなくても存在できます。緩和された階層システムでは、レイヤーは下位のすべてのレイヤーにも依存することができ、レイヤー間の結合が増加します。[ 3 ]一部のマルチティアアーキテクチャでは、一部のレイヤーが厳密で、他のレイヤーが緩和されているハイブリッドアプローチが使用されています。[ 4 ] [ 5 ] N層アーキテクチャは、モデル-ビュー-プレゼンターパターンで実装することもできます。
レイヤーとティアという用語はしばしば同義語として使われますが、レイヤーは概念的なソフトウェアロジックの構造化メカニズムを指す場合があり、ティアはシステムインフラストラクチャの物理的なハードウェア構造化メカニズムを指す場合があります。[ 6 ] [ 7 ]この用法では、 RDBMSのみのアーキテクチャと呼ばれるデータベース中心のアーキテクチャやパーソナルワークステーションの場合のように、3層ソリューションを単一のティアに展開することができます。 [ 8 ] [ 9 ]
オブジェクト指向設計の情報システムの論理的な多層アーキテクチャでは、次の4つが最も一般的です。[ 3 ]
より一般的な慣習としては、アプリケーション層(またはサービス層)はビジネス層のサブレイヤーとみなされ、通常はサポートされるビジネス機能を公開するアプリケーションプログラミングインターフェイス(API)定義をカプセル化します。アプリケーション層/ビジネス層は、実際には、異なる責任を持つ追加のサブレイヤーを強調するために、さらに細分化することができます。たとえば、モデル・ビュー・プレゼンターパターンを使用する場合、プレゼンターサブレイヤーは、ユーザーインターフェイス層とビジネス/アプリケーション層(モデルサブレイヤーで表される)の間の追加のレイヤーとして使用されることがあります。アプリケーションアーキテクチャでビジネス層とプレゼンテーション層が明確に区別されていない場合(つまり、プレゼンテーション層がビジネス層の一部とみなされている場合)、従来のクライアント/サーバー(2層)モデルが実装されています。
ビジネス層とインフラストラクチャ層の間に、ビジネスインフラストラクチャ層(BI)と呼ばれる別の層が存在すると定義する人もいます。これは「低レベルビジネス層」または「ビジネスサービス層」と呼ばれることもあります。この層は非常に汎用的で、複数のアプリケーション層(例:通貨換算器)で使用できます。[ 13 ]
インフラストラクチャ層は、異なるレベル(高レベルまたは低レベルの技術サービス)に分割できます。[ 13 ]開発者はインフラストラクチャ層の永続性(データアクセス)機能に焦点を当てることが多く、そのため、インフラストラクチャ層や技術サービス層ではなく、永続性層またはデータアクセス層についてのみ言及します。言い換えれば、他の種類の技術サービスは、特定の層の一部として明示的に考えられているとは限りません。データアクセス層には通常、データアクセスオブジェクト(DAO)と呼ばれるオブジェクトが含まれています。
厳密な階層システムでは、各レイヤーは下のレイヤーに依存し、上のレイヤーがなくても存在できます。緩和された階層システムでは、レイヤーは直下のレイヤーだけでなく、その下のすべてのレイヤーにも依存できます。[ 3 ]緩和された階層システムは結合が多く、変更が難しくなります。一部のマルチティアアーキテクチャでは、一部のレイヤーは厳密で、他のレイヤーは緩和されているハイブリッドアプローチが採用されています。[ 4 ] [ 5 ]
3層アーキテクチャは、ユーザーインターフェース(プレゼンテーション)、機能的なプロセスロジック(「ビジネスルール」)、コンピュータデータストレージ、データアクセスが独立したモジュールとして開発および保守されるクライアント/サーバソフトウェアアーキテクチャパターンであり、多くの場合、別々のプラットフォーム上で開発および保守されます。[ 14 ]これは、マサチューセッツ州ケンブリッジでジョン・J・ドノバンが設立したツール会社であるオープン環境コーポレーション(OEC)で開発されました。
明確に定義されたインターフェースを備えたモジュール型ソフトウェアの一般的な利点に加えて、3 層アーキテクチャは、要件や技術の変化に応じて、3 つの層のいずれも独立してアップグレードまたは交換できるようにすることを目的としています。たとえば、プレゼンテーション層のオペレーティングシステムの変更は、ユーザー インターフェイス コードにのみ影響します。通常、ユーザー インターフェイスはデスクトップPCまたはワークステーションで実行され、標準的なグラフィカル ユーザー インターフェイス、ワークステーションまたはアプリケーション サーバーで実行される 1 つ以上の独立したモジュールで構成される機能的な処理ロジック、およびコンピュータ データ ストレージ ロジックを含むデータベース サーバーまたはメインフレーム上のRDBMS を使用します。中間層自体がマルチ ティアになる場合もあります (この場合、全体のアーキテクチャは「n層アーキテクチャ」と呼ばれます)。[ 15 ]
ウェブ開発の分野では、3層構造とは、一般的に電子商取引サイトなど、3つの層を使用して構築されたウェブサイトを指す場合によく使われます。
階層間のデータ転送はアーキテクチャの一部です。使用されるプロトコルには、SNMP、CORBA、Java RMI、.NET Remoting、Windows Communication Foundation、ソケット、UDP、Webサービス、その他の標準プロトコルまたは独自プロトコルの1つ以上が含まれる場合があります。多くの場合、ミドルウェアを使用して各階層を接続します。各階層は多くの場合(必ずしもそうとは限りませんが)、別々の物理サーバー上で動作し、各階層自体がクラスタ上で動作する場合があります。
アプリケーション応答測定では、パフォーマンスを測定し、階層間のトランザクションを関連付けるための概念とAPIを定義します。
一般的に、「階層」という用語は、システムの構成要素を別々のサーバー、コンピューター、またはネットワーク(処理ノード)に物理的に分散させることを指します。したがって、3層アーキテクチャでは、3つの処理ノードが存在します。「レイヤー」という用語は、構成要素の論理的なグループ分けを指し、これらのグループは物理的に1つの処理ノード上に配置されている場合も、そうでない場合もあります。