Co to jest architektura N-Tier?


193

Ostatnio widziałem sporo ofert pracy dla programistów, które brzmią mniej więcej tak: „Musi mieć doświadczenie w architekturze N-Tier” lub „Musi być w stanie tworzyć aplikacje N-Tier”.

To prowadzi mnie do pytania, czym jest architektura N-Tier? Jak zdobywa się doświadczenie?


2
Ciekawe, że ten drugi post również pyta, czym jest architektura N-Tier, ale odpowiedzi są zupełnie inne. stackoverflow.com/questions/7271165/… . Wydaje się, że istnieje architektura N-Tier dla oprogramowania i architektura N-Tier dla sprzętu.
Noremac

Odpowiedzi:


247

Wikipedia :

W inżynierii oprogramowania architektura wielowarstwowa (często nazywana architekturą n-warstwową) to architektura klient-serwer, w której prezentacja, przetwarzanie aplikacji i zarządzanie danymi są logicznie oddzielnymi procesami. Na przykład aplikacja wykorzystująca oprogramowanie pośrednie do obsługi żądań danych między użytkownikiem a bazą danych wykorzystuje architekturę wielowarstwową. Najbardziej rozpowszechnione zastosowanie „architektury wielopoziomowej” odnosi się do architektury trójwarstwowej.

Dyskusyjne jest to, co liczy się jako „poziomy”, ale moim zdaniem musi ono przynajmniej przekroczyć granicę procesu. Albo nazywa się to warstwami. Ale nie musi znajdować się na fizycznie różnych maszynach. Chociaż nie jest to zalecane, to może obsługiwać logiczną Poziom i bazy danych na tym samym polu.

alternatywny tekst

Edycja : Jedną z implikacji jest to, że warstwa prezentacji i warstwa logiki (czasem nazywana warstwą logiki biznesowej) musi przekraczać granice komputera „w poprzek”, czasem przez zawodną, ​​powolną i / lub niepewną sieć. Różni się to bardzo od prostej aplikacji komputerowej, w której dane znajdują się na tym samym komputerze co pliki lub aplikacji sieci Web, w której można bezpośrednio trafić do bazy danych.

W przypadku programowania wielopoziomowego musisz spakować dane w jakiejś formie przenośnej zwanej „zestawem danych” i przelecieć je nad drutem. Klasa DataSet .NET lub protokół Web Services, taki jak SOAP, to tylko kilka takich prób latania obiektów nad drutem.


6
„3 poziomy” i „poziomy N” czy jest jakaś różnica?
czakryt

7
Zależy to od tego, jak liczyć „poziomy” (logiczne, fizyczne itp.), Ale możesz łatwo zaangażować więcej niż 3 procesy do napisania aplikacji. Interfejs użytkownika, platforma interfejsu użytkownika (jak Eclipse RCP), usługi sieciowe, BLL, DAL, baza danych, usługi uwierzytelniania, usługi raportowania, usługi analityczne ...
Eugene Yokota

6
@chakrit: W moim czasie (jestem stary) więcej niż 2 warstwy (klient-serwer) automatycznie odnosiły się do warstwy n.
Eduardo Molteni,

@EugeneYokota - mówi się, że warstwy mają reprezentować fizyczne sekcje w architekturze (które mogą, ale nie muszą być dalej opatentowane, np. W klastrze), a warstwy będą odnosić się do logicznego grupowania komponentów aplikacji.
Eliran Malka

Powiedziano mi coś, co wygląda bardzo podobnie, ale z warstwami będącymi warstwą prezentacji - warstwą usług - warstwą integracji / danych. Czy wiesz, czy są to tylko inne słowa na to samo co architektura pokazana powyżej, czy coś innego? O ile mi wiadomo, wydają się takie same, ale chciałbym się upewnić.
KayleighArianna,

20

Opiera się na tym, jak oddzielić warstwę prezentacji od podstawowej logiki biznesowej i dostępu do danych ( Wikipedia )

  • 3 poziomy oznacza Warstwa prezentacji + warstwa komponentu + warstwa dostępu do danych.
  • Warstwa N ma miejsce, gdy dodatkowe warstwy są dodawane poza nimi, zwykle w celu dodatkowej modułowości, konfigurowalności lub interoperacyjności z innymi systemami.

12
w rzeczywistości, jeśli jeden z tych poziomów jest hostowany przez stronę zdalną, na przykład procesor płatności, ten poziom może nie być tak „niepotrzebny”
Zak.

1
Hmm Istnieje ogromna różnica między „warstwami” a „usługami”. N-Tier jest zwykle używany do wskazania, że ​​dla danego poziomu wszystko powyżej musi przejść przez niego, aby uzyskać dostęp do usług niższego poziomu. Jeśli są one równoległe, nazwałbym je raczej usługami niż poziomami.
Dak

Podczas konstruowania zwykłego MCV (architektura 3-warstwowa) można zdecydować się na wdrożenie MCV z interfejsami dwupokładowymi, tak że w rzeczywistości można zastąpić określoną warstwę bez konieczności modyfikowania nawet jednego wiersza kodu. Często widzimy korzyści z tego, na przykład w scenariuszach, w których chcesz mieć możliwość korzystania z więcej niż jednej bazy danych (w którym to przypadku masz podwójny interfejs między warstwą kontrolną a warstwami danych). Po umieszczeniu go w warstwie widoku (prezentacja), możesz (poczekaj !!) zastąpić interfejs USER inną maszyną, tym samym zautomatyzować PRAWDZIWE wprowadzanie (!!!)
David Svarrer

15

To modne hasło, które odnosi się do takich rzeczy jak normalna architektura sieciowa z np. JavaScript - ASP.Net - Middleware - warstwa bazy danych. Każda z tych rzeczy jest „poziomem”.


4

Aplikacje danych warstwy N to aplikacje danych podzielone na wiele warstw. Nazywane również „aplikacjami rozproszonymi” i „aplikacjami wielowarstwowymi”, aplikacje n-warstwowe oddzielają przetwarzanie na odrębne warstwy, które są dystrybuowane między klientem a serwerem. Podczas opracowywania aplikacji uzyskujących dostęp do danych należy wyraźnie rozdzielić poszczególne warstwy tworzące aplikację.

Typowa aplikacja n-warstwowa obejmuje warstwę prezentacji, warstwę środkową i warstwę danych. Najłatwiejszym sposobem oddzielenia różnych warstw w aplikacji n-warstwowej jest utworzenie dyskretnych projektów dla każdej warstwy, którą chcesz uwzględnić w aplikacji. Na przykład warstwą prezentacji może być aplikacja Windows Forms, natomiast logiką dostępu do danych może być biblioteka klas znajdująca się w warstwie środkowej. Ponadto warstwa prezentacji może komunikować się z logiką dostępu do danych na środkowej warstwie za pośrednictwem usługi, takiej jak usługa. Rozdzielenie komponentów aplikacji na osobne warstwy zwiększa łatwość konserwacji i skalowalność aplikacji. Robi to, umożliwiając łatwiejsze wdrażanie nowych technologii, które można zastosować na jednym poziomie, bez konieczności przeprojektowywania całego rozwiązania. Dodatkowo,

Pobrane ze strony Microsoft .


4

Jeśli rozumiem pytanie, wydaje mi się, że pytający naprawdę pyta „OK, więc 3-poziom jest dobrze zrozumiany, ale wydaje się, że istnieje mieszanka szumu, zamieszania i niepewności wokół tego, co 4-poziom lub uogólnienia, architektury N-warstwy oznaczają. Więc ... jaka jest definicja N-warstwy, która jest szeroko rozumiana i uzgodniona? "

To właściwie dość głębokie pytanie. Aby wyjaśnić dlaczego, muszę pójść trochę głębiej. Zrób ze mną.

Klasyczna architektura trójwarstwowa: baza danych, „logika biznesowa” i prezentacja to dobry sposób na wyjaśnienie, w jaki sposób przestrzegać zasady rozdzielenia problemów. Innymi słowy, jeśli chcę zmienić sposób, w jaki „firma” chce obsługiwać klientów, nie powinienem być zmuszony do przeglądania całego systemu, aby dowiedzieć się, jak to zrobić, aw szczególności nie należy rozpraszać decyzji biznesowych chcąc nie chcąc przez kod.

Ten model służył dobrze przez dziesięciolecia i jest klasycznym modelem „klient-serwer”. Szybkie przejście do ofert w chmurze, w których przeglądarki internetowe są interfejsem użytkownika dla szerokiego i fizycznie rozproszonego zestawu użytkowników, a zwykle trzeba dodać usługi dystrybucji treści, które nie są częścią klasycznej architektury 3-warstwowej (i które muszą być zarządzane samodzielnie).

Koncepcja uogólnia, jeśli chodzi o usługi, mikrousługi, sposób dystrybucji danych i obliczeń itd. To, czy coś jest „warstwą”, w dużej mierze sprowadza się do tego, czy warstwa ta zapewnia interfejs i model wdrażania dla usług znajdujących się za (lub poniżej) warstwą. Sieć dystrybucji treści byłaby więc warstwą, ale usługa uwierzytelniania nie.

Teraz idź i przeczytaj inne opisy przykładów architektury warstwy N z myślą o tej koncepcji, a zaczniesz rozumieć problem. Inne perspektywy obejmują podejścia oparte na dostawcy (np. NGINX), równoważenie obciążenia z uwzględnieniem zawartości, izolowanie danych i usługi bezpieczeństwa (np. IBM Datapower), z których wszystkie mogą, ale nie muszą, stanowić wartość dodaną dla danej architektury, wdrożenia i przypadków użycia.


3

Rozumiem, że N-Tier oddziela logikę biznesową, dostęp klienta i dane od siebie za pomocą oddzielnych fizycznych maszyn. Teoria jest taka, że ​​jedną z nich można aktualizować niezależnie od innych.


3

Aplikacje danych warstwy N to aplikacje danych podzielone na wiele warstw. Nazywane również „aplikacjami rozproszonymi” i „aplikacjami wielowarstwowymi”, aplikacje n-warstwowe oddzielają przetwarzanie na odrębne warstwy, które są dystrybuowane między klientem a serwerem. Podczas opracowywania aplikacji uzyskujących dostęp do danych należy wyraźnie rozdzielić poszczególne warstwy tworzące aplikację.

I tak dalej w http://msdn.microsoft.com/en-us/library/bb384398.aspx


3

Podczas konstruowania zwykłego MCV (architektura 3-warstwowa) można zdecydować się na wdrożenie MCV z interfejsami dwupokładowymi, tak że w rzeczywistości można zastąpić określoną warstwę bez konieczności modyfikowania nawet jednego wiersza kodu.

Często widzimy korzyści z tego , na przykład w scenariuszach, w których chcesz mieć możliwość korzystania z więcej niż jednej bazy danych (w którym to przypadku masz podwójny interfejs między warstwą kontrolną a warstwami danych).

Po umieszczeniu go w warstwie widoku (prezentacji), możesz (poczekaj !!) zamienić interfejs USER na inną maszynę, tym samym zautomatyzować PRAWDZIWE wprowadzanie (!!!) - i dzięki temu możesz przeprowadzić żmudne testy użyteczności tysięcy razy bez konieczności dotykania i ponownego dotykania przez użytkownika tych samych elementów w kółko.

Niektórzy opisują taką architekturę 3-warstwową z 1 lub 2 podwójnymi interfejsami jako architekturę 4-warstwową lub 5-warstwową , co domyślnie implikuje podwójne interfejsy.

Inne przypadki obejmują (ale nie wyłącznie) fakt, że ty - w przypadku częściowo lub całkowicie zreplikowanych systemów baz danych - praktycznie byłbyś w stanie uznać jedną z baz danych za „master”, a tym samym miałbyś poziom składający się z master i inny składający się z niewolniczej bazy danych.

Przykład mobilny

Dlatego też wielopoziomowy - lub N-poziomowy - rzeczywiście ma kilka interpretacji, podczas gdy na pewno trzymałbym się 3-poziomowych + dodatkowych poziomów składających się z cienkich dysków interfejsu wklęsłych między nimi, aby umożliwić wspomniane zamiany poziomów, i pod względem testowanie (szczególnie używane na urządzeniach mobilnych), możesz teraz uruchamiać testy użytkownika na prawdziwym oprogramowaniu, symulując stukanie użytkowników w sposób, którego logika sterowania nie może odróżnić od rzeczywistego stukania użytkownika. Jest to prawie nadrzędne w symulacji rzeczywistych testów użytkowników , ponieważ można zarejestrować wszystkie dane wejściowe od użytkowników OTA, a następnie ponownie użyć tych samych danych wejściowych podczas testów regresji.


2

Kiedy mówimy o poziomach, zwykle mówimy o procesach fizycznych (o różnej przestrzeni pamięci).

Dlatego w przypadku, gdy warstwy aplikacji zostaną wdrożone w różnych procesach, te różne procesy będą miały różne poziomy.

Np. W aplikacji 3-poziomowej warstwa biznesowa komunikuje się z komputerami mainframe (oddzielny proces) i komunikuje się z usługą raportowania (oddzielny proces), wówczas aplikacja będzie miała 5 poziomów.

Dlatego ogólna nazwa to n-tier.


2

from https://docs.microsoft.com/en-us/azure/architecture/guide/architecture-styles/n-tier

Architektura N-warstwowa dzieli opony aplikacyjne głównie na opony logiczne i fizyczne, a ich podziały na części. wprowadź opis zdjęcia tutaj

Warstwy są sposobem na rozdzielenie obowiązków i zarządzanie zależnościami. Każda warstwa ma określoną odpowiedzialność. Wyższa warstwa może korzystać z usług na niższej warstwie, ale nie na odwrót.

Poziomy są fizycznie oddzielone, działające na osobnych maszynach. Warstwa może wywoływać bezpośrednio do innej warstwy lub korzystać z asynchronicznego przesyłania komunikatów (kolejki komunikatów). Chociaż każda warstwa może być hostowana na osobnym poziomie, nie jest to wymagane. Kilka warstw może być hostowanych na tym samym poziomie. Fizyczne oddzielenie warstw poprawia skalowalność i odporność, ale także opóźnia dodatkową komunikację sieciową.

Tradycyjna aplikacja trójwarstwowa ma warstwę prezentacji, warstwę środkową i warstwę bazy danych. Środkowy poziom jest opcjonalny. Bardziej złożone aplikacje mogą mieć więcej niż trzy poziomy. Powyższy schemat pokazuje aplikację z dwiema środkowymi warstwami, obejmującymi różne obszary funkcjonalności.

Aplikacja warstwy N może mieć architekturę zamkniętą lub otwartą:

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.

Architektura warstw zamkniętych ogranicza zależności między warstwami. Może to jednak powodować niepotrzebny ruch sieciowy, jeśli jedna warstwa po prostu przekaże żądania do następnej warstwy.


1

Aplikacja N-tier to aplikacja, która obejmuje więcej niż trzy komponenty. Jakie są te elementy?

  • Pamięć podręczna
  • Kolejki komunikatów dla zachowania asynchronicznego
  • Równoważenie obciążenia
  • Przeszukuj serwery, aby przeszukiwać ogromne ilości danych
  • Komponenty zaangażowane w przetwarzanie ogromnych ilości danych
  • Komponenty wykorzystujące heterogeniczne technologie powszechnie znane jako usługi sieciowe itp.

Wszystkie aplikacje społecznościowe, takie jak Instagram, Facebook, usługi na dużą skalę, takie jak Uber, Airbnb, masowe gry online dla wielu graczy, takie jak Pokemon Go, aplikacje z fantazyjnymi funkcjami są aplikacjami n-tier.


0

Martin Fowler wyraźnie demonstruje:

Nakładanie warstw jest jedną z najczęstszych technik stosowanych przez projektantów oprogramowania w celu rozbicia skomplikowanego systemu oprogramowania. Widać to w architekturach maszyn, w których warstwy schodzą z języka programowania z wywołaniami systemu operacyjnego do sterowników urządzeń i zestawów instrukcji procesora oraz do bramek logicznych wewnątrz układów. Sieć ma FTP z warstwami na TCP, który jest na IP, który jest na Ethernet.

Myśląc o systemie w kategoriach warstw, wyobrażasz sobie główne podsystemy w oprogramowaniu ułożone w jakiejś formie warstwowego ciasta, gdzie każda warstwa spoczywa na dolnej warstwie. W tym schemacie wyższa warstwa korzysta z różnych usług zdefiniowanych przez niższą warstwę, ale niższa warstwa nie jest świadoma wyższej warstwy. Ponadto każda warstwa zwykle ukrywa swoje dolne warstwy przed warstwami powyżej, więc warstwa 4 korzysta z usług warstwy 3, która korzysta z usług warstwy 2, ale warstwa 4 nie zna warstwy 2. (Nie wszystkie architektury warstw są nieprzezroczyste , ale większość jest - a raczej większość jest w większości nieprzezroczysta).

Podział systemu na warstwy ma wiele ważnych zalet.

• Możesz zrozumieć pojedynczą warstwę jako spójną całość, nie wiedząc wiele o innych warstwach. Możesz zrozumieć, jak zbudować usługę FTP na TCP, nie znając szczegółów działania Ethernetu.

• Możesz zastąpić warstwy alternatywnymi implementacjami tych samych podstawowych usług. Usługa FTP może działać bez zmian przez Ethernet, PPP lub cokolwiek, z czego korzysta firma kablowa.

• Minimalizujesz zależności między warstwami. Jeśli firma kablowa zmieni swój fizyczny system transmisji, pod warunkiem, że sprawi, że IP będzie działać, nie musimy zmieniać naszej usługi FTP.

• Warstwy stanowią dobre miejsce do standaryzacji. TCP i IP są standardami, ponieważ określają sposób działania ich warstw.

• Po zbudowaniu warstwy można jej używać do wielu usług wyższego poziomu. Dlatego TCP / IP jest używany przez FTP, telnet, SSH i HTTP. W przeciwnym razie wszystkie te protokoły wyższego poziomu musiałyby pisać własne protokoły niższego poziomu. Z biblioteki Kyle Geoffrey Passarelli

Warstwowanie jest ważną techniką, ale ma swoje wady.

• Warstwy dobrze uwzględniają niektóre, ale nie wszystkie, rzeczy. W rezultacie czasami pojawiają się zmiany kaskadowe. Klasycznym przykładem tego w warstwowej aplikacji korporacyjnej jest dodanie pola, które musi być wyświetlane w interfejsie użytkownika, musi znajdować się w bazie danych, a zatem musi być dodane do każdej warstwy pomiędzy nimi.

• Dodatkowe warstwy mogą zaszkodzić wydajności. Na każdej warstwie rzeczy zwykle trzeba przekształcić z jednej reprezentacji do drugiej. Jednak hermetyzacja podstawowej funkcji często zapewnia przyrost wydajności, który z nadwyżką kompensuje. Warstwa kontrolująca transakcje może zostać zoptymalizowana, a następnie przyspieszy wszystko. Ale najtrudniejsza część architektury warstwowej decyduje, jakie warstwy mieć i jaka powinna być odpowiedzialność każdej warstwy.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.