N-Katman mimarisi nedir?


193

Kısa bir süre önce, aşağıdaki gibi az ya da çok okunan bir cümle içeren birkaç geliştirici iş ilanı gördüm: "N-Tier mimarisi ile deneyime sahip olmalı" veya "N-Tier uygulamaları geliştirebilmeli".

Bu bana N-Katman mimarisi nedir? Kişi onunla nasıl deneyim kazanır?


2
Bu diğer gönderinin de N-Tier mimarisinin ne olduğunu sorması ilginçtir, ancak cevaplar tamamen farklıdır. stackoverflow.com/questions/7271165/… . Yazılım için N-Tier mimarisi ve donanım için N-Tier mimarisi var gibi görünüyor.
Noremac

Yanıtlar:


247

Wikipedia :

Yazılım mühendisliğinde, çok katmanlı mimari (genellikle n katmanlı mimari olarak adlandırılır), sunum, uygulama işleme ve veri yönetiminin mantıksal olarak ayrı işlemler olduğu bir istemci-sunucu mimarisidir. Örneğin, kullanıcı ve veritabanı arasındaki veri isteklerine hizmet vermek için ara katman yazılımı kullanan bir uygulama çok katmanlı mimari kullanır. "Çok katmanlı mimari" nin en yaygın kullanımı, üç katmanlı mimariyi ifade eder.

"Katmanlar" olarak sayılan şey tartışmalıdır, ancak bence en azından süreç sınırını aşması gerekiyor. Ya da buna katmanlar denir. Ancak, fiziksel olarak farklı makinelerde olması gerekmez. Ben tavsiye etmiyorum rağmen, olabilir aynı kutu üzerinde mantıksal katman ve veritabanı barındırabilir.

alternatif metin

Düzenleme : Bir ima sunum katmanı ve mantık katmanı (bazen Business Logic Layer denir) bazen güvenilmez, yavaş ve / veya güvensiz ağ üzerinden "tel boyunca" makine sınırlarını geçmesi gerekiyor olmasıdır. Bu, verilerin dosyalarla aynı makinede yaşadığı basit Masaüstü uygulamasından veya veritabanına doğrudan vurabileceğiniz Web Uygulamasından çok farklıdır.

N katmanlı programlama için, verileri "veri kümesi" adı verilen bir tür taşınabilir biçimde paketlemeniz ve bunları tel üzerinden uçurmanız gerekir. .NET'in DataSet sınıfı veya SOAP gibi Web Hizmetleri protokolü , nesneleri kablo üzerinden uçurma girişimlerinden birkaçıdır.


6
"3 katlı" ve "N katlı" bir fark var mı?
chakrit

7
"Katmanları" (mantıksal, fiziksel vb.) Nasıl saydığınıza bağlıdır, ancak bir uygulama yazmak için kolayca 3'ten fazla sürece sahip olabilirsiniz. Kullanıcı Arayüzü, Kullanıcı Arayüzü platformu (Eclipse RCP gibi), Web Hizmetleri, BLL, DAL, Veritabanı, Kimlik Doğrulama Hizmetleri, Raporlama Hizmetleri, Analitik Hizmetler ...
Eugene Yokota

6
@chakrit: Benim zamanımda (yaşlıyım) 2-katmandan (istemci-sunucu) otomatik olarak n-katmana atıfta bulunuluyordu.
Eduardo Molteni

@EugeneYokota - katmanların mimarideki fiziksel bölümleri temsil etmesi gerektiği söylenir (bunlar örneğin bir kümede daha fazla yerleştirilebilir veya edilmeyebilir) ve katmanlar uygulama bileşenlerinin mantıksal gruplandırmasına atıfta bulunacaktır .
Eliran Malka

Bana çok benzeyen bir şey söylendi ama katmanlar sunum katmanı - hizmet katmanı - entegrasyon / veri katmanı. Bunların yukarıda gösterilen mimari ile aynı veya farklı bir şey için farklı kelimeler olup olmadığını biliyor musunuz? Bildiğim kadarıyla aynı görünüyorlar ama emin olmak istiyorum.
KayleighArianna

20

Sunum katmanını temel iş mantığından ve veri erişiminden nasıl ayırdığınıza dayanır ( Wikipedia )

  • 3 katmanlı Sunum katmanı + Bileşen katmanı + Veri erişim katmanı anlamına gelir.
  • N katmanı, bunların ötesinde, genellikle ek modülerlik, yapılandırılabilirlik veya diğer sistemlerle birlikte çalışabilirlik için ek katmanlar eklendiğinde ortaya çıkar.

12
aslında bu katmanlardan biri uzak bir taraf, örneğin bir ödeme işlemcisi tarafından barındırılıyorsa, bu katman çok "gereksiz" olmayabilir
Zak

1
Hmm. 'Katmanlar' ve 'hizmetler' arasında büyük bir fark vardır. N-Tier genellikle belirli bir katman için, üst düzeydeki herhangi bir şeyin alt düzey hizmetlere erişmek için içinden geçmesi gerektiğini belirtmek için kullanılır. Paralel olmaları halinde, onlara katmanlardan ziyade hizmet diyorum.
Dak

Her zamanki MCV'yi (3 katmanlı bir mimari) oluştururken, MCV'yi çift katlı arayüzlerle uygulamaya karar verebilir, böylece aslında bir kod satırını bile değiştirmek zorunda kalmadan belirli bir katmanı değiştirebilirsiniz. Bunun yararlarını sık sık görüyoruz, örneğin birden fazla veritabanı kullanmak istediğiniz senaryolarda (bu durumda kontrol ve veri katmanları arasında çift arabiriminiz vardır). Görünüm katmanına (sunu) koyduğunuzda, USER arayüzünü başka bir makine ile değiştirebilir (bekleyebilirsiniz !!), böylece REAL girişini otomatikleştirebilirsiniz (!!!)
David Svarrer

15

Javascript - ASP.Net - Middleware - Veritabanı katmanı ile normal Web mimarisi gibi şeyleri ifade eden bir terimdir. Bunların her biri bir "katman" dır.


4

N katmanlı veri uygulamaları, birden çok katmana ayrılmış veri uygulamalarıdır. "Dağıtılmış uygulamalar" ve "çok katmanlı uygulamalar" olarak da adlandırılan n katmanlı uygulamalar, işlemeyi istemci ve sunucu arasında dağıtılan ayrı katmanlara ayırır. Verilere erişen uygulamalar geliştirirken, uygulamayı oluşturan çeşitli katmanlar arasında açık bir ayrımınız olmalıdır.

Tipik bir n katmanlı uygulama bir sunum katmanı, bir orta katman ve bir veri katmanı içerir. Bir n katmanlı uygulamadaki çeşitli katmanları ayırmanın en kolay yolu, uygulamanıza dahil etmek istediğiniz her katman için ayrı projeler oluşturmaktır. Örneğin, sunum katmanı bir Windows Forms uygulaması olabilir, oysa veri erişim mantığı orta katmanda bulunan bir sınıf kütüphanesi olabilir. Ayrıca, sunum katmanı, hizmet gibi bir hizmet aracılığıyla orta katmandaki veri erişim mantığı ile iletişim kurabilir. Uygulama bileşenlerini ayrı katmanlara ayırmak uygulamanın sürdürülebilirliğini ve ölçeklenebilirliğini artırır. Bunu, tüm çözümü yeniden tasarlama gerekliliği olmadan tek bir katmana uygulanabilecek yeni teknolojilerin daha kolay benimsenmesini sağlayarak yapar. Ek olarak,

Microsoft web sitesinden alınmıştır .


4

Soruyu anlarsam, soru soran bana gerçekten "Tamam, bu yüzden 3 katmanlı iyi anlaşılmış, ancak 4 katmanlı ya da 4 katmanlı bir şeyin hype, karışıklık ve belirsizliğin bir karışımı olduğu anlaşılıyor. genelleme, N katmanlı mimariler demek… Peki ... yaygın olarak anlaşılan ve üzerinde anlaşılan N katmanlı tanım nedir? ”

Aslında oldukça derin bir soru ve nedenini açıklamak için biraz daha derinlere gitmem gerekiyor. Benimle ayı.

Klasik 3 katmanlı mimari: veritabanı, "iş mantığı" ve sunum, endişelerin ayrılması ilkesinin nasıl onurlandırılacağını açıklığa kavuşturmanın iyi bir yoludur. Yani, "iş" in müşterilere nasıl hizmet etmek istediğini değiştirmek istersem, bunun nasıl yapılacağını anlamak için tüm sistemi incelemek zorunda olmamalıyım ve özellikle de iş sorunlarının dağılmaması gereken kararlar willy-nilly kod aracılığıyla.

Şimdi, bu model onlarca yıl boyunca iyi hizmet etti ve klasik 'istemci-sunucu' modelidir. Web tarayıcılarının geniş ve fiziksel olarak dağıtılmış bir kullanıcı grubu için kullanıcı arabirimi olduğu ve genellikle 3 katmanlı klasik mimarinin bir parçası olmayan içerik dağıtım hizmetleri (ve kendi başlarına yönetilmesi gereken).

Kavram, hizmetler, mikro hizmetler, veri ve hesaplamanın nasıl dağıtıldığı vb. Bir şeyin 'katman' olup olmadığı büyük ölçüde katmanın, katmanın arkasında (veya altında) hizmetlere bir arayüz ve dağıtım modeli sağlayıp sağlamadığıyla ilgilidir. Dolayısıyla bir içerik dağıtım ağı katman olur, ancak bir kimlik doğrulama hizmeti olmaz.

Şimdi, bu kavram göz önünde bulundurularak N katmanlı mimarilerin örneklerinin diğer açıklamalarını okuyun ve sorunu anlamaya başlayacaksınız. Diğer perspektifler, hepsi belirli bir mimariye, konuşlandırmaya ve kullanım senaryolarına değer katabilen veya katmayabilen satıcı tabanlı yaklaşımları (örn. NGINX), içeriğe duyarlı yük dengeleyicileri, veri izolasyonunu ve güvenlik hizmetlerini (örn. IBM Datapower) içerir .


3

Anladığım kadarıyla, N-Tier iş mantığını, istemci erişimini ve verileri ayrı fiziksel makineler kullanarak birbirinden ayırıyor. Teori, bunlardan birinin diğerlerinden bağımsız olarak güncellenebilmesidir.


3

N katmanlı veri uygulamaları, birden çok katmana ayrılmış veri uygulamalarıdır. "Dağıtılmış uygulamalar" ve "çok katmanlı uygulamalar" olarak da adlandırılan n katmanlı uygulamalar, işlemeyi istemci ve sunucu arasında dağıtılan ayrı katmanlara ayırır. Verilere erişen uygulamalar geliştirirken, uygulamayı oluşturan çeşitli katmanlar arasında açık bir ayrımınız olmalıdır.

Ve benzeri http://msdn.microsoft.com/en-us/library/bb384398.aspx


3

Her zamanki MCV'yi (3 katmanlı bir mimari) oluştururken, MCV'yi çift katlı arayüzlerle uygulamaya karar verebilir, böylece aslında bir kod satırını bile değiştirmek zorunda kalmadan belirli bir katmanı değiştirebilirsiniz.

Bunun yararlarını sık sık görüyoruz, örneğin birden fazla veritabanı kullanmak istediğiniz senaryolarda (bu durumda kontrol ve veri katmanları arasında çift arabiriminiz vardır).

Görünüm katmanına (sunu) koyduğunuzda , USER arayüzünü başka bir makine ile değiştirebilir (beklemeye !!), böylece GERÇEK girişi (!!!) otomatikleştirebilirsiniz ve böylece binlerce kullanılabilir sıkıcı kullanılabilirlik testi yapabilirsiniz. herhangi bir kullanıcının aynı şeylere tekrar tekrar dokunması ve yeniden dokunması gerekmeden.

Bazıları, bu tür 3 katmanlı mimariyi , 1 veya 2 çift arabirimli, 4 katmanlı veya 5 katmanlı mimari olarak tanımlar ve dolaylı olarak çift arabirimleri ima eder.

Diğer durumlar arasında, ancak bunlarla sınırlı olmamak üzere, yarı veya tamamen çoğaltılmış veritabanı sistemleri durumunda, veritabanlarından birini "ana" olarak değerlendirebileceğiniz ve böylece bir katmanınız olacağı ( master ve diğeri köle veritabanından oluşur.

Mobil örnek

Bu nedenle, çok katmanlı - veya N katmanlı - gerçekten de birkaç yorum vardır, ancak söz konusu katman değişimlerini etkinleştirmek için aralarında sıkışmış ince arabirim disklerinden oluşan 3 katmanlı + ekstra katmanlara kesinlikle bağlı kalacağım. test (özellikle mobil cihazlarda kullanılır), artık kontrol mantığının gerçek bir kullanıcı dokunuşundan ayırt edemeyeceği şekilde dokunarak bir kullanıcıyı simüle ederek gerçek yazılım üzerinde kullanıcı testleri gerçekleştirebilirsiniz . Bu, gerçek kullanıcı testlerini simüle etmede çok önemlidir , çünkü OTA kullanıcılarından tüm girdileri kaydedebilir ve daha sonra regresyon testleri yaparken aynı girişi yeniden kullanabilirsiniz.


2

Katmanlardan bahsederken, genellikle Fiziksel Süreçlerden (farklı bellek alanlarına sahip) bahsediyoruz.

Bu nedenle, bir uygulamanın Katmanları farklı işlemlere yerleştirilirse, bu farklı işlemler farklı katmanlar olacaktır.

Örneğin, 3 katmanlı bir uygulamada, iş katmanı Mainframes (ayrı işlem) ve Reporting Service (ayrı işlem) ile görüşürse, bu uygulama 5 katmanlı olur.

Bu nedenle, genel ad n-katmandır.


2

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

Bir N katman mimarisi, uygulama lastiklerini mantıksal lastiklere ve fiziksel katmanlara ayırır ve alt parçalara ayrılır . resim açıklamasını buraya girin

Katmanlar sorumlulukları ayırmanın ve bağımlılıkları yönetmenin bir yoludur. Her katmanın kendine özgü bir sorumluluğu vardır. Daha yüksek bir katman, hizmetleri daha düşük bir katmanda kullanabilir, ancak tam tersi şekilde kullanamaz.

Katmanlar fiziksel olarak ayrılır, ayrı makinelerde çalışır. Bir katman doğrudan başka bir katmanı arayabilir veya eşzamansız mesajları (mesaj kuyruğu) kullanabilir. Her katman kendi katmanında barındırılabilse de, bu gerekli değildir. Aynı katmanda birkaç katman barındırılabilir. Katmanları fiziksel olarak ayırmak ölçeklenebilirliği ve esnekliği arttırır, ancak ek ağ iletişiminden gecikme de sağlar.

Geleneksel üç katmanlı bir uygulamada bir sunum katmanı, bir orta katman ve bir veritabanı katmanı bulunur. Orta katman isteğe bağlıdır. Daha karmaşık uygulamaların üçten fazla katmanı olabilir. Yukarıdaki şema, farklı işlevsellik alanlarını kapsayan iki orta katmana sahip bir uygulamayı göstermektedir.

N katmanlı bir uygulamanın kapalı bir katman mimarisi veya açık bir katman mimarisi olabilir:

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.

Kapalı katman mimarisi katmanlar arasındaki bağımlılıkları sınırlar. Ancak, bir katman istekleri bir sonraki katmana iletirse, gereksiz ağ trafiği oluşturabilir.


1

Bir N katmanlı uygulama, üçten fazla bileşeni içeren bir uygulamadır. Bu bileşenler nelerdir?

  • Önbellek
  • Eşzamansız davranış için mesaj kuyrukları
  • Yük dengeleyiciler
  • Çok miktarda veriyi aramak için arama sunucuları
  • Çok miktarda veri işlemeye katılan bileşenler
  • Genellikle web hizmetleri vb. Olarak bilinen heterojen teknoloji kullanan bileşenler.

Instagram, Facebook gibi tüm sosyal uygulamalar, Uber, Airbnb gibi büyük ölçekli endüstri hizmetleri, Pokemon Go gibi çevrimiçi devasa çok oyunculu oyunlar, fantezi özelliklere sahip uygulamalar n katmanlı uygulamalardır.


0

Martin Fowler açıkça gösteriyor:

Katmanlama, yazılım tasarımcılarının karmaşık bir yazılım sistemini ayırmak için kullandığı en yaygın tekniklerden biridir. Bunu, işletim sistemi ile katmanların bir programlama dilinden indiği makine mimarilerinde aygıt sürücülerine ve CPU komut setlerine ve yongaların içindeki mantık kapılarına bakın. Ağ üzerinde, Ethernet'in üstünde bulunan IP'nin üstünde olan TCP'nin üstünde FTP katmanı vardır.

Bir sistemi katmanlar olarak düşünürken, yazılımdaki temel alt sistemlerin, her katmanın bir alt katmana dayandığı katman kek biçiminde düzenlenmiş olduğunu hayal edersiniz. Bu şemada, üst katman, alt katman tarafından tanımlanan çeşitli hizmetleri kullanır, ancak alt katman, üst katmandan habersizdir. Ayrıca, her katman genellikle alt katmanlarını yukarıdaki katmanlardan gizler, bu nedenle katman 4, katman 2'nin hizmetlerini kullanan katman 3'ün hizmetlerini kullanır, ancak katman 4, katman 2'den habersizdir. (Tüm katman mimarileri böyle opak değildir. , ancak çoğu - ya da çoğu çoğunlukla opaktır.)

Bir sistemi katmanlara ayırmanın birçok önemli faydası vardır.

• Tek bir katmanı, diğer katmanlar hakkında fazla bir şey bilmeden tutarlı bir bütün olarak anlayabilirsiniz. Ethernet'in nasıl çalıştığının ayrıntılarını bilmeden TCP'nin üstünde bir FTP hizmetinin nasıl oluşturulacağını anlayabilirsiniz.

• Katmanları, aynı temel hizmetlerin alternatif uygulamalarıyla değiştirebilirsiniz. Bir FTP hizmeti, ethernet, PPP veya bir kablo şirketinin kullandığı her şey üzerinde değişiklik yapmadan çalışabilir.

• Katmanlar arasındaki bağımlılıkları en aza indirirsiniz. Kablo şirketi IP iletimini yapmaları koşuluyla fiziksel iletim sistemini değiştirirse, FTP hizmetimizi değiştirmek zorunda değiliz.

• Katmanlar standardizasyon için iyi yerlerdir. TCP ve IP standartlardır çünkü katmanlarının nasıl çalışması gerektiğini tanımlarlar.

• Bir katman oluşturulduktan sonra, birçok üst düzey hizmet için kullanabilirsiniz. Böylece, TCP / IP FTP, telnet, SSH ve HTTP tarafından kullanılır. Aksi takdirde, tüm bu üst düzey protokollerin kendi alt düzey protokollerini yazmaları gerekir. Kyle Geoffrey Passarelli Kütüphanesi'nden

Katmanlama önemli bir tekniktir, ancak dezavantajları vardır.

• Katmanlar bazı şeyleri, ancak hepsini değil, iyi bir şekilde kapsar. Sonuç olarak, bazen basamaklı değişiklikler elde edersiniz. Katmanlı bir kurumsal uygulamada bunun klasik örneği, kullanıcı arayüzünde görüntülenmesi gereken bir alan eklemektir, veritabanında olmalı ve bu nedenle aradaki her katmana eklenmelidir.

• Ek katmanlar performansa zarar verebilir. Her katmanda işler tipik olarak bir gösterimden diğerine dönüştürülmelidir. Bununla birlikte, altta yatan bir fonksiyonun kapsüllenmesi genellikle size telafi etmekten daha fazla verimlilik kazancı sağlar. İşlemleri kontrol eden bir katman optimize edilebilir ve her şeyi daha hızlı hale getirir. Ancak katmanlı bir mimarinin en zor kısmı, hangi katmanlara sahip olacağınıza ve her katmanın sorumluluğunun ne olacağına karar vermektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.