web-dev-qa-db-ja.com

N-Tierアーキテクチャとは何ですか?

「N-Tierアーキテクチャの経験が必要」または「N-Tierアプリを開発できる必要があります」のような文章を含む開発者の求人が最近見られます。

N-Tierアーキテクチャとは何ですか?どうやって経験を積むのですか?

186
Joshua Carmody

ウィキペディア

ソフトウェアエンジニアリングでは、多層アーキテクチャ(n層アーキテクチャとも呼ばれます)は、プレゼンテーション、アプリケーション処理、およびデータ管理が論理的に別個のプロセスであるクライアントサーバーアーキテクチャです。たとえば、ミドルウェアを使用してユーザーとデータベース間のデータ要求を処理するアプリケーションは、多層アーキテクチャを採用しています。 「多層アーキテクチャ」の最も普及している使用法は、3層アーキテクチャを指します。

「ティア」と見なされるものは議論の余地がありますが、私の意見では、少なくともプロセスの境界を越える必要があります。または、レイヤーと呼ばれます。ただし、物理的に異なるマシンにある必要はありません。推奨しませんが、同じボックスで論理層とデータベースをホストできます

alt text

Edit:1つの意味は、プレゼンテーション層とロジック層(ビジネスロジック層と呼ばれることもある)が、「信頼性の低い」ネットワーク上でマシンの境界を越える必要があることです。 、低速、および/または安全でないネットワーク。これは、データがファイルと同じマシンに存在する単純なデスクトップアプリケーションや、データベースに直接アクセスできるWebアプリケーションとは大きく異なります。

N層プログラミングの場合、データを「データセット」と呼ばれる何らかのトランスポータブル形式でパッケージ化し、それらをネットワーク上で飛行させる必要があります。 .NETの DataSet クラスまたは SOAP のようなWebサービスプロトコルは、オブジェクトをネットワーク上で飛行させるこのような試みのいくつかです。

242
Eugene Yokota

これは、プレゼンテーション層をコアビジネスロジックとデータアクセスから分離する方法に基づいています( Wikipedia

-tier は、プレゼンテーション層+コンポーネント層+データアクセス層を意味します。 N層は、これらの3つを超える不要なレイヤーが追加され、流行語でラベル付けされているため、あなたの建築家が一群のクラックモンキーであるようには見えません。これは、私が作業しなければならないN層アーキテクチャに基づいています。

22
tsilb

これは、Javascript-ASP.Net-ミドルウェア-データベース層などの通常のWebアーキテクチャのようなものを指す流行語です。これらはそれぞれ「層」です。

16

質問を理解したら、質問者は本当に「OK、3層は十分に理解されているが、4層に誇大広告、混乱、不確実性が混在している、または一般化すると、N層アーキテクチャが意味します。それで...広く理解され、合意されているN層の定義は何ですか?」

実際にはかなり深い質問です。その理由を説明するには、もう少し深くする必要があります。我慢してください。

古典的な3層アーキテクチャ:データベース、「ビジネスロジック」、およびプレゼンテーションは、関心の分離の原則を尊重する方法を明確にする良い方法です。つまり、「ビジネス」が顧客にサービスを提供する方法を変更する場合、これを行う方法を見つけるためにシステム全体を調べる必要はありません。特に、ビジネスの問題を分散させるべきではありませんコードを自由に使用できます。

現在、このモデルは何十年も機能し、従来の「クライアント/サーバー」モデルです。クラウドサービスに早送りします。Webブラウザーは、広く物理的に分散されたユーザーセットのユーザーインターフェイスであり、通常は、従来の3層アーキテクチャの一部ではないコンテンツ配信サービスを追加する必要があります(および独自に管理する必要があります)。

この概念は、サービス、マイクロサービス、データと計算の分散方法などに関して一般化します。何かが「層」であるかどうかは、主に、層がその層の背後(または下)にあるサービスにインターフェースと展開モデルを提供するかどうかにかかっています。したがって、コンテンツ配信ネットワークは階層になりますが、認証サービスは階層になりません。

ここで、この概念を念頭に置いて、N層アーキテクチャの例の他の説明を読んで、問題を理解し始めます。他の観点には、ベンダーベースのアプローチ(NGINXなど)、コンテンツ対応ロードバランサー、データ分離およびセキュリティサービス(IBM Datapowerなど)があり、そのすべてが価値を追加する場合としない場合があります特定のアーキテクチャ、展開、およびユースケースに対応。

4
Dak

N層データアプリケーションは、複数の層に分離されたデータアプリケーションです。 「分散アプリケーション」および「多層アプリケーション」とも呼ばれるn層アプリケーションは、クライアントとサーバーの間で分散される個別の層に処理を分離します。データにアクセスするアプリケーションを開発する場合、アプリケーションを構成するさまざまな層を明確に分離する必要があります。

典型的なn層アプリケーションには、プレゼンテーション層、中間層、およびデータ層が含まれます。 n層アプリケーションでさまざまな層を分離する最も簡単な方法は、アプリケーションに含める各層に個別のプロジェクトを作成することです。たとえば、プレゼンテーション層はWindows Formsアプリケーションであり、データアクセスロジックは中間層にあるクラスライブラリです。さらに、プレゼンテーション層は、サービスなどのサービスを介して中間層のデータアクセスロジックと通信する場合があります。アプリケーションコンポーネントを別々の層に分離すると、アプリケーションの保守性とスケーラビリティが向上します。これは、ソリューション全体を再設計する必要なしに、単一の層に適用できる新しいテクノロジーを簡単に採用できるようにすることで実現します。さらに、n層アプリケーションは通常、機密情報を中間層に格納し、プレゼンテーション層からの分離を維持します。

Microsoftから取得 ウェブサイト

4
Robert Rocha

通常のMCVを構築する場合(3層アーキテクチャ)、MCVをダブルデッキインターフェイスで実装することを決定できます。実際には、1行も変更することなく特定の層を置き換えることができます。コード。

これの利点はよく見られます、たとえば、複数のデータベースを使用できるようにしたい場合(この場合、コントロール層とデータ層の間に二重インターフェースがあります)。

View-layerに配置したとき(プレゼンテーション)、USERインターフェースを別のマシンに置き換えることができます(!!)。これにより、実際の入力を自動化できます(!!!)-そしてこれにより、ユーザーは何度も何度も同じものをタップ、再タップ、再タップすることなく、退屈なユーザビリティテストを数千回実行できます。

そのような-tierアーキテクチャを、1つまたは2つのdouble-interfaceで4-tierまたは5-tierアーキテクチャと記述し、暗黙的にdouble-インターフェース。

他のケースには、データベースシステムの半または完全に複製された場合、データベースの1つを実質的に「マスター」とみなすことができるという事実が含まれますが、これに限定されません。マスターで構成され、スレーブデータベースで構成されます。

モバイルの例

したがって、多層-またはN層-実際、いくつかの解釈がありますが、3層+層を有効にするために間に挟まれた薄いインターフェイスディスクで構成される追加の層に固執します-swaps、およびテスト(特にモバイルデバイスで使用)の観点から、ユーザーのタップをシミュレートによって制御ロジックが実際のソフトウェアと区別できない方法で、実際のソフトウェアでユーザーテストを実行できるようになりましたユーザーのタップ。これは、実際のユーザーテストのシミュレーションで最も重要です。ユーザーOTAからのすべての入力を記録し、回帰テストを行うときに同じ入力を再利用できるからです。

3
David Svarrer

N層データアプリケーションは、複数の層に分離されたデータアプリケーションです。 「分散アプリケーション」および「多層アプリケーション」とも呼ばれるn層アプリケーションは、クライアントとサーバーの間で分散される個別の層に処理を分離します。データにアクセスするアプリケーションを開発する場合、アプリケーションを構成するさまざまな層を明確に分離する必要があります。

など http://msdn.Microsoft.com/en-us/library/bb384398.aspx

3
olyv

N-Tierは、個別の物理マシンを使用して、ビジネスロジック、クライアントアクセス、およびデータを互いに分離していると理解しています。理論的には、それらの1つは他とは独立して更新できるということです。

3
GregD

階層について話すとき、一般的に物理プロセス(異なるメモリ空間を持つ)について話します。

したがって、アプリケーションのレイヤーが異なるプロセスにデプロイされる場合、それらの異なるプロセスは異なる層になります。

たとえば、3層アプリケーションでは、ビジネス層はMainframesと通信し(別個のプロセス)、Reporting Serviceと通信します(別個のプロセス)、そのアプリケーションは5層になります。

したがって、一般名はn層です。

2
Sandeep Jindal

from https://docs.Microsoft.com/en-us/Azure/architecture/guide/architecture-styles/n-tier

N層アーキテクチャは、アプリケーションタイヤ論理タイヤおよび物理層が主であり、サブパートに分割されています。 enter image description here

レイヤーは、責任を分離し、依存関係を管理する方法です。各層には特定の責任があります。上位層は下位層のサービスを使用できますが、その逆はできません。

層は物理的に分離され、別々のマシンで実行されます。層は別の層を直接呼び出すか、非同期メッセージング(メッセージキュー)を使用できます。各レイヤーは独自の層でホストされる場合がありますが、必須ではありません。複数のレイヤーが同じ層でホストされる場合があります。階層を物理的に分離すると、スケーラビリティと復元力が向上しますが、追加のネットワーク通信からの遅延も増加します。

従来の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つのレイヤーが単にリクエストを次のレイヤーに渡す場合、不必要なネットワークトラフィックが発生する可能性があります。

2

マーティン・ファウラーが明確に示しています:

レイヤー化は、ソフトウェア設計者が複雑なソフトウェアシステムを分解するために使用する最も一般的な手法の1つです。マシンアーキテクチャで見ることができます。レイヤーでは、オペレーティングシステムがデバイスドライバーとCPU命令セット、およびチップ内の論理ゲートを呼び出すプログラミング言語から派生しています。ネットワーキングには、TCPの上にFTPが階層化されており、TCPはIPの上にあり、IPはイーサネットの上にあります。

システムをレイヤーの観点から考えると、ソフトウェアの主要なサブシステムがレイヤーケーキの形で配置され、各レイヤーが下位レイヤーに置かれることを想像します。このスキームでは、上位層は下位層で定義されたさまざまなサービスを使用しますが、下位層は上位層を認識しません。さらに、各レイヤーは通常、その下のレイヤーを上のレイヤーから隠すため、レイヤー4はレイヤー2のサービスを使用するレイヤー3のサービスを使用しますが、レイヤー4はレイヤー2を認識しません(すべてのレイヤーアーキテクチャがこのように不透明ではありません、しかしほとんどはそうです-むしろほとんどはほとんど不透明です。)

システムをレイヤーに分割することには、多くの重要な利点があります。

•他のレイヤーについてあまり知らなくても、単一のレイヤーを一貫した全体として理解できます。イーサネットの仕組みの詳細を知らなくても、TCPの上にFTPサービスを構築する方法を理解できます。

•レイヤーを同じ基本サービスの代替実装で置き換えることができます。 FTPサービスは、イーサネット、PPP、またはケーブル会社が使用するものを変更することなく実行できます。

•レイヤー間の依存関係を最小限に抑えます。ケーブル会社が物理的な伝送システムを変更し、IPが機能するようになった場合、FTPサービスを変更する必要はありません。

•レイヤーは標準化に適した場所です。 TCPおよびIPは、レイヤーの動作方法を定義するため、標準です。

•レイヤーを構築したら、それを多くの高レベルのサービスに使用できます。したがって、TCP/IPはFTP、telnet、SSH、およびHTTPで使用されます。そうでなければ、これらの高レベルのプロトコルはすべて、独自の低レベルのプロトコルを作成する必要があります。カイルジェフリーパサレリ図書館から

レイヤー化は重要な手法ですが、欠点もあります。

•レイヤーは、すべてではなく一部をうまくカプセル化します。その結果、カスケードの変更が発生する場合があります。階層化されたエンタープライズアプリケーションでのこの典型的な例は、UIに表示する必要があるフィールドを追加することであり、データベース内にある必要があるため、その間のすべてのレイヤーに追加する必要があります。

•余分なレイヤーはパフォーマンスを低下させる可能性があります。通常、すべてのレイヤーで、ある表現から別の表現に変換する必要があります。ただし、基礎となる関数をカプセル化すると、多くの場合、それ以上の効率向上が得られます。トランザクションを制御するレイヤーを最適化すると、すべてが高速になります。しかし、階層化アーキテクチャの最も難しい部分は、どの層を持ち、各層の責任をどのようにすべきかを決定することです。

0
marven