N-Tierアーキテクチャとは何ですか?
-
10-07-2019 - |
質問
最近、「N-Tierアーキテクチャの経験が必要です」または「N-Tierアプリを開発できる必要があります」というような文章を含む開発者の求人がかなり多く見られます。 ;。
これにより、N-Tierアーキテクチャとは何ですか?どうやって経験を積むのですか?
解決
ソフトウェアエンジニアリングでは、多層 アーキテクチャ(多くの場合、 n層アーキテクチャ)は クライアントサーバーアーキテクチャ、 プレゼンテーション、アプリケーション 処理とデータ管理は 論理的に分離されたプロセス。にとって 例、使用するアプリケーション データ要求を処理するミドルウェア ユーザーとデータベースの間で 多層アーキテクチャ。最も " multi-tierの広範な使用 アーキテクチャ"三層を指す アーキテクチャ。
「ティア」と見なされるものは議論の余地があります。しかし、私の意見では、少なくともプロセスの境界を越える必要があります。または、レイヤーと呼ばれます。ただし、物理的に異なるマシンにある必要はありません。推奨しませんが、同じボックスで論理層とデータベースをホストできます。
編集:1つの意味は、プレゼンテーション層とロジック層(ビジネスロジックレイヤーとも呼ばれる)がマシンの境界を越えて「ネットワークを横断」する必要があることです。信頼性の低い、低速、および/または安全性の低いネットワーク上で時々。これは、データがファイルと同じマシンに存在する単純なデスクトップアプリケーションや、データベースに直接アクセスできるWebアプリケーションとは大きく異なります。
n層プログラミングの場合、「データセット」と呼ばれる何らかのトランスポータブル形式でデータをパッケージ化する必要があります。ワイヤー上で飛ばします。 .NETの DataSet クラスまたは SOAP は、ネットワーク上でオブジェクトを飛ばそうとする試みのいくつかです。
他のヒント
これは、Javascript-ASP.Net-ミドルウェア-データベース層などの通常のWebアーキテクチャのようなものを指す流行語です。これらはそれぞれ「ティア」です。
N層データアプリケーションは、 複数の層。 「分散アプリケーション」とも呼ばれます。および" multitier アプリケーション、" n層アプリケーションは、処理を個別に分離します クライアントとサーバーの間で配布される層。あなたが データにアクセスするアプリケーションを開発するには、明確にする必要があります アプリケーションを構成するさまざまな層の分離。
典型的なn層アプリケーションには、プレゼンテーション層、中間層、 層、およびデータ層。さまざまな層を分離する最も簡単な方法 n層アプリケーションでは、各層に個別のプロジェクトを作成します アプリケーションに含めること。たとえば、 プレゼンテーション層はWindows Formsアプリケーションかもしれませんが、 データアクセスロジックは、中間層にあるクラスライブラリです。 さらに、プレゼンテーション層はデータと通信する場合があります サービスなどのサービスを介して中間層のロジックにアクセスします。 アプリケーションコンポーネントを個別の層に分離すると、 アプリケーションの保守性とスケーラビリティ。これを行う に適用できる新しいテクノロジーを容易に採用できるようにする ソリューション全体を再設計する必要のない単一層。に さらに、n層アプリケーションは通常、機密情報を プレゼンテーション層からの分離を維持する中間層。
Microsoftから取得ウェブサイト。
質問を理解したら、質問者は本当に「OK」と尋ねているように思えるので、3層はよく理解されていますが、誇大広告、混乱、不確実性が混在しているようです層、または一般化するには、N層アーキテクチャを意味します。だから...広く理解され、同意されているN層の定義は何ですか?"
実際にはかなり深い質問です。その理由を説明するために、もう少し詳しく説明する必要があります。我慢してください。
従来の3層アーキテクチャ:データベース、「ビジネスロジック」プレゼンテーションは、懸念の分離の原則を尊重する方法を明確にする良い方法です。つまり、「ビジネス」をどのように変更したいかということです。顧客にサービスを提供したいので、これを行う方法を見つけるためにシステム全体を調べる必要はありません。特に、ビジネスの問題がコード全体に無制限に散らばってはいけません。
現在、このモデルは何十年も機能し、古典的な「クライアント/サーバー」モデルです。クラウドサービスに早送りします。Webブラウザーは、広く物理的に分散されたユーザーセットのユーザーインターフェイスであり、通常は、従来の3層アーキテクチャの一部ではないコンテンツ配信サービスを追加する必要があります(および独自に管理する必要があります)。
この概念は、サービス、マイクロサービス、データと計算の分散方法などに関して一般化します。何かが「層」であるかどうかは、主に、層がその層の背後(または下)にあるサービスにインターフェースと展開モデルを提供するかどうかにかかっています。したがって、コンテンツ配信ネットワークは階層になりますが、認証サービスは階層になりません。
この概念を念頭に置いて、N層アーキテクチャの例の他の説明を読み、読んでみてください。そうすれば、問題を理解し始めるでしょう。他の観点には、ベンダーベースのアプローチ(NGINXなど)、コンテンツ対応ロードバランサー、データ分離およびセキュリティサービス(IBM Datapowerなど)が含まれます。これらはすべて、特定のアーキテクチャに価値を追加するかどうか、展開、ユースケース。
N-Tierは、個別の物理マシンを使用して、ビジネスロジック、クライアントアクセス、およびデータを相互に分離することを理解しています。理論的には、そのうちの1つは他とは独立して更新できるということです。
N層データアプリケーションは、複数の層に分離されたデータアプリケーションです。 「分散アプリケーション」とも呼ばれます。および「多層アプリケーション」 n層アプリケーションは、処理を個別の層に分割し、クライアントとサーバー間で分散します。データにアクセスするアプリケーションを開発する場合、アプリケーションを構成するさまざまな層を明確に分離する必要があります。
通常のMCVを構築するとき(3層アーキテクチャ)、MCVをダブルデッキインターフェースで実装することを決定できます。実際には、特定の層を変更することなく、特定の層を置き換えることができます。 1行のコード。
この利点はよく見られます。たとえば、複数のデータベースを使用できるようにしたい場合(この場合、コントロールとデータの間に二重のインターフェースがあり、レイヤー)。
View-layerに配置する場合(プレゼンテーション)、USERインターフェースを別のマシンに置き換えることができます(!!)。これにより、実際の入力を自動化できます(!!!)-ユーザーは何度も何度も同じものをタップ、再タップ、再タップすることなく、退屈なユーザビリティテストを何千回も実行できます。
4層または 5層アーキテクチャとして、1つまたは2つの二重インターフェースを持つ 3層アーキテクチャを暗に暗示するものもありますダブルインターフェース。
その他の場合には、データベースシステムの半または完全に複製された場合、実際にはデータベースの1つを「マスター」とみなすことができるという事実が含まれますが、これに限定されません。マスターで構成される層とスレーブデータベースで構成される別の層があります。
モバイルの例
そのため、マルチティア-またはNティア-確かにいくつかの解釈がありますが、3ティア+間に挟まれた薄いインターフェイスディスクで構成される追加ティアに確実に固執します上記のティアスワップを有効にし、テスト(特にモバイルデバイスで使用)の観点から、制御ロジックが区別できない方法でユーザータップをシミュレートすることで、実際のソフトウェアでユーザーテストを実行できるようになりました実際のユーザータップから。これは、実際のユーザーテストのシミュレーションで最も重要です。ユーザーOTAからのすべての入力を記録し、回帰テストを行うときに同じ入力を再利用できるからです。
Tierとは、一般に物理プロセス(メモリスペースが異なる)のことです。
したがって、アプリケーションのレイヤーが異なるプロセスにデプロイされる場合、それらの異なるプロセスは異なる層になります。
たとえば、3層アプリケーションでは、ビジネス層はメインフレームと通信し(別個のプロセス)、Reporting Serviceと通信します(別個のプロセス)、そのアプリケーションは5層になります。
したがって、一般名はn層です。
https:// docsから。 microsoft.com/en-us/azure/architecture/guide/architecture-styles/n-tier
N層アーキテクチャは、アプリケーションタイヤを主に論理タイヤと物理層に分割し、それらはサブパーツに分割されます。
レイヤーは、責任を分離し、依存関係を管理する方法です。各層には特定の責任があります。上位層は下位層のサービスを使用できますが、その逆はできません。
階層は物理的に分離され、別々のマシンで実行されます。層は別の層を直接呼び出すか、非同期メッセージング(メッセージキュー)を使用できます。各レイヤーは独自の層でホストされる場合がありますが、必須ではありません。複数のレイヤーが同じ層でホストされる場合があります。階層を物理的に分離すると、スケーラビリティと復元力が向上しますが、追加のネットワーク通信からの遅延も追加されます。
従来の3層アプリケーションには、プレゼンテーション層、中間層、およびデータベース層があります。中間層はオプションです。より複雑なアプリケーションには、3つ以上の層を含めることができます。上の図は、機能の異なる領域をカプセル化する2つの中間層を持つアプリケーションを示しています。
N層アプリケーションは、クローズドレイヤーアーキテクチャまたはオープンレイヤーアーキテクチャを持つことができます。
In a closed layer architecture, a layer can only call the next layer immediately down.
In an open layer architecture, a layer can call any of the layers below it.
クローズドレイヤーアーキテクチャは、レイヤー間の依存関係を制限します。ただし、1つのレイヤーが単にリクエストを次のレイヤーに渡す場合、不必要なネットワークトラフィックが発生する可能性があります。
Martin Fowlerが明確に示しています:
レイヤリングは、ソフトウェア設計者が使用する最も一般的な手法の1つです。 複雑なソフトウェアシステムを分解します。マシンアーキテクチャで見ます。 レイヤーは、オペレーティングシステムコールを使用してプログラミング言語から派生します デバイスドライバーとCPU命令セット、およびチップ内の論理ゲートに。 ネットワーキングでは、IPの上にあるTCPの上にFTPが階層化されています。 イーサネットのトップ。
レイヤーの観点からシステムを考えるとき、あなたは主要なサブシステムを想像します レイヤーケーキの形で配置されたソフトウェアで、各レイヤー 下の層にあります。このスキームでは、上位層はさまざまなサービスを使用します 下位層によって定義されますが、下位層は上位層を認識しません。 さらに、各レイヤーは通常、その下のレイヤーを上のレイヤーから隠します。 レイヤー4は、レイヤー2のサービスを使用するレイヤー3のサービスを使用しますが、レイヤー4 レイヤー2を認識しません(すべてのレイヤーアーキテクチャがこのように不透明ではありませんが、 ほとんどは—またはむしろほとんどはほとんど不透明です。)
システムをレイヤーに分割することには、多くの重要な利点があります。
•知らなくても、単一の層を一貫した全体として理解できます 他の層についての多く。 FTPサービスを構築する方法を理解できます。 イーサネットがどのように機能するかの詳細を知らずにTCPの上で。
•レイヤーを同じものの代替実装で置き換えることができます 基本的なサービス。 FTPサービスは、イーサネット、PPP、 またはケーブル会社が使用するものは何でも。
•レイヤー間の依存関係を最小限に抑えます。ケーブル会社が変わる場合 その物理的な伝送システムは、彼らがIPを機能させるのであれば、私たちはしません FTPサービスを変更する必要があります。
•レイヤーは標準化に適しています。 TCPとIPは標準です レイヤーの動作方法を定義しているためです。
•レイヤーを構築したら、それを多くの高レベルのサービスに使用できます。 したがって、TCP / IPはFTP、telnet、SSH、およびHTTPで使用されます。そうでなければ、これらのすべて 高レベルのプロトコルは、独自の低レベルのプロトコルを作成する必要があります。 カイルジェフリーパサレリ図書館から
レイヤリングは重要な手法ですが、欠点もあります。
•レイヤーは、すべてではありませんが一部をうまくカプセル化します。その結果、時々 カスケード変更を取得します。階層化された企業でのこの典型的な例 アプリケーションは、UIに表示する必要があるフィールドを追加しています。 データベースにあるため、その間のすべてのレイヤーに追加する必要があります。
•余分なレイヤーはパフォーマンスを低下させる可能性があります。すべてのレイヤーで、通常は次のことが必要です ある表現から別の表現に変換されます。ただし、カプセル化 基礎となる機能の多くは、より多くの効率の向上をもたらします 補償するよりも。トランザクションを制御するレイヤーを最適化して、 その後、すべてが高速になります。 しかし、階層化アーキテクチャの最も難しい部分は、どのレイヤーを使用するかを決定することです そして各層の責任はどうあるべきか。