N katmanlı mimari stili

Azure Storage
Azure Cloud Services
Azure Virtual Machines

N katmanlı bir mimari bir uygulamayı mantıksal katmanlara ve fiziksel katmanlara ayırır.

N katmanlı mimari stilinin mantıksal diyagramı

Katmanlar sorumlulukların ayrılması ve bağımlılıkların yönetilmesi için kullanılan bir yöntemdir. Her katmanın belirli bir sorumluluğu vardır. Daha yüksek bir katman, hizmetleri daha düşük bir katmanda kullanabilir ancak daha düşük bir katman, hizmetleri daha yüksek bir katmanda kullanamaz.

Katmanlar fiziksel olarak ayrılmıştır ve ayrı makineler üzerinde çalışır. Bir katman doğrudan başka bir katmana çağrı yapabilir veya bir ileti kuyruğu aracılığıyla Zaman Uyumsuz mesajlaşma düzenlerini kullanabilir. Her katman kendi katmanında barındırılıyor olsa da bu, zorunlu değildir. Aynı katmanda birden fazla katman barındırılabilir. Katmanların fiziksel olarak ayrılması ölçeklenebilirliği ve esnekliği artırır, ancak ek ağ iletişiminden gecikmeye de neden olur.

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

N katmanlı bir uygulama, kapalı katman mimarisine veya açık katman mimarisine sahip olabilir:

  • Kapalı katman mimarisinde bir katman yalnızca sonraki katmanı hemen aşağıya çağırabilir.
  • Açık katman mimarisinde bir katman kendi altındaki katmanlardan herhangi birini çağırabilir.

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

Bu mimarinin kullanılacağı durumlar

N katmanlı mimariler genellikle, her katmanın ayrı bir VM kümesinde çalıştığı hizmet olarak altyapı (IaaS) uygulamaları olarak kullanılır. Ancak N katmanlı bir uygulamanın salt IaaS olması gerekmez. Mimarinin bazı kısımları için yönetilen hizmetlerin (önbelleğe alma, mesajlaşma ve veri depolama) kullanılması genellikle avantajlıdır.

Aşağıdakiler için N katmanlı mimariyi kullanmayı deneyebilirsiniz:

  • Basit web uygulamaları.
  • Şirket içi bir uygulamayı, mümkün olduğunca az yeniden düzenleme gereksinimiyle Azure’a geçirme.
  • Şirket içi uygulamaları ve bulut uygulamalarını birlikte geliştirme.

N katmanlı mimariler geleneksel şirket içi uygulamalarda oldukça yaygındır; bu nedenle, mevcut iş yüklerinin Azure’a geçirilmesine son derece uygun bir kullanımdır.

Sosyal haklar

  • Bulut uygulamaları ile şirket içi uygulamalar arasında ve bulut platformları arasında taşınabilirlik.
  • Çoğu geliştirici için daha az öğrenme eğrisi.
  • Geleneksel uygulama modelinden doğal bir değişim süreci.
  • Heterojen ortama (Windows/Linux) açıklık

Zorluklar

  • Yalnızca veritabanında CRUD işlemleri gerçekleştiren, faydalı bir iş yapmadan ek gecikme sürelerine neden olan bir orta katman elde etmek son derece mümkündür.
  • Tek yapılı tasarım, özelliklerin bağımsız olarak dağıtılmasını önler.
  • Bir IaaS uygulamasını yönetmek, yalnızca yönetilen hizmetleri kullanan bir uygulamayı yönetmekten daha zahmetlidir.
  • Büyük bir sistemde ağ güvenliğini yönetmek zor olabilir.

En iyi yöntemler

  • Yükteki değişiklikleri yönetmek için otomatik ölçeklendirmeyi kullanın. Bkz. En iyi uygulamaları otomatik olarak ölçeklendirme.
  • Katmanları ayrıştırmak için zaman uyumsuz mesajlaşma kullanın.
  • Yarıstatik verileri önbelleğe alma. Bkz. Önbelleğe alma ile ilgili en iyi uygulamalar.
  • SQL Server Always On kullanılabilirlik grupları gibi bir çözüm kullanarak veritabanı katmanını yüksek kullanılabilirlik için yapılandırın.
  • Ön uç ile İnternet arasına bir web uygulaması güvenlik duvarı (WAF) yerleştirin.
  • Her bir katmanı kendi alt ağına yerleştirin ve alt ağları bir güvenlik sınırı olarak kullanın.
  • Erişimi veri katmanı ile kısıtlayarak yalnızca orta katmanlardan gelen isteklere izin verin.

Sanal makinelerde N katmanlı mimari

Bu bölümde, VM'ler üzerinde çalışan, önerilen bir N katmanlı mimari açıklanmaktadır.

N katmanlı mimarinin fiziksel diyagramı

Her katman, kullanılabilirlik kümesine veya sanal makine ölçek kümesine yerleştirilmiş iki veya daha fazla VM'den oluşur. Birden çok VM, bir VM’nin başarısız olması durumunda esneklik sağlar. İsteklerin bir katmandaki VM’lere dağıtılması için yük dengeleyiciler kullanılır. Bir katman, havuza daha fazla VM eklenerek yatay yönde ölçeklendirilebilir.

Her katman aynı zamanda kendi alt ağının içine yerleştirilir; bu da, katmanın iç IP adreslerinin aynı adres aralığına denk geleceği anlamına gelir. Bu, ağ güvenlik grubu kurallarını uygulamayı ve tabloları tek tek katmanlara yönlendirmeyi kolaylaştırır.

Web ve iş katmanlarında durum bilgisi bulunmaz. Söz konusu katman için bir isteği herhangi bir VM işleyebilir. Veri katmanı, çoğaltılmış bir veritabanı içermelidir. Windows için, yüksek kullanılabilirlik için Always On kullanılabilirlik gruplarını kullanarak SQL Server'ı kullanmanızı öneririz. Linux için, Apache Cassandra gibi çoğaltmayı destekleyen bir veritabanı seçin.

Ağ güvenlik grupları her katmana erişimi kısıtlar. Örneğin, veritabanı katmanı yalnızca iş katmanından erişime izin verir.

Not

Başvuru diyagramımızda "İş Katmanı" olarak etiketlenen katman, iş mantığı katmanının bir adıdır. Benzer şekilde, sunu katmanını da "Web Katmanı" olarak adlandırıyoruz. Örneğimizde bu bir web uygulamasıdır, ancak çok katmanlı mimariler diğer topolojiler için de kullanılabilir (masaüstü uygulamaları gibi). Katmanlarınıza ekibinizin uygulamanızda bu mantıksal ve/veya fiziksel katmanın amacını iletmesi için en uygun adı verin. Hatta bu adlandırmayı, bu katmanı temsil etmeyi seçtiğiniz kaynaklarda da ifade edebilirsiniz (örn. vmss-appName-business-layer).

Dikkat edilecek diğer noktalar

  • N katmanlı mimariler üç katmanla sınırlı değildir. Daha karmaşık uygulamalar için genellikle daha fazla katman bulundurulur. Bu durumda, istekleri belirli bir katmana yönlendirmek için katman 7 yönlendirmesini kullanmayı deneyin.

  • Katmanlar, ölçeklenebilirlik, güvenilirlik ve güvenlik sınırı niteliği taşır. Bu alanlarda farklı gereksinimleri olan hizmetler için ayrı katmanların bulundurulması daha uygundur.

  • Otomatik ölçeklendirme için sanal makine ölçek kümelerini kullanın.

  • Mimaride, yönetilen bir hizmeti büyük ölçüde yeniden düzenleme yapmadan kullanabileceğiniz yerler bulun. Özellikle önbelleğe alma, mesajlaşma, depolama ve veritabanı etkenlerine dikkat edin.

  • Daha yüksek düzeyde güvenlik için uygulamanın önüne bir ağ DMZ’si ekleyin. DMZ, güvenlik duvarları ve paket incelemesi gibi güvenlik işlevlerini uygulayan ağ sanal gereçlerini (NVA’lar) içerir. Daha fazla bilgi için bkz. Ağ DMZ’si başvuru mimarisi.

  • Yüksek kullanılabilirlik için, İnternet isteklerini örneklerde dağıtmak için bir dış yük dengeleyici ile birlikte bir kullanılabilirlik kümesine iki veya daha fazla NVA ekleyin. Daha fazla bilgi için bkz. Yüksek oranda kullanılabilir ağ sanal gereçleri dağıtma ve IaaS uygulamaları için yüksek kullanılabilirlik ve olağanüstü durum kurtarma örneği.

  • Uygulama kodu çalıştıran VM’ler için doğrudan RDP veya SSH erişimine izin vermeyin. Bunun yerine; işleçler, savunma ana bilgisayarı olarak da adlandırılan bir sıçrama kutusunda oturum açmalıdır. Bu, yöneticilerin diğer VM'lere bağlanmak için kullandığı, ağ üzerindeki bir VM’dir. Sıçrama kutusu yalnızca onaylanan genel IP adreslerinden RDP veya SSH'ye izin veren bir ağ güvenlik grubuna sahiptir.

  • Siteden siteye sanal özel ağ (VPN) veya Azure ExpressRoute kullanarak Azure sanal ağını şirket içi ağınıza genişletebilirsiniz. Daha fazla bilgi için bkz. Hibrit ağ başvuru mimarisi.

  • Kuruluşunuz kimlik yönetimi için Active Directory’yi kullanıyorsa Active Directory ortamınızı Azure Sanal Ağı’na genişletmek isteyebilirsiniz. Daha fazla bilgi için bkz. Kimlik yönetimi başvuru mimarisi.

  • VM’ler için Azure SLA’nın sağladığından daha yüksek kullanılabilirliğe ihtiyacınız varsa uygulamayı iki bölgede çoğaltın ve yük devretme işlemi için Azure Traffic Manager’ı kullanın. Daha fazla bilgi için bkz Birden çok bölgede Windows VM’lerini çalıştırma veya Birden çok bölgede Linux VM'lerini çalıştırma.