N katmanlı mimari stiliN-tier architecture style

N katmanlı bir mimari bir uygulamayı mantıksal katmanlara ve fiziksel katmanlara ayırır.An N-tier architecture divides an application into logical layers and physical tiers.

N katmanlı mimari stili mantıksal diyagramı

Katmanlar sorumlulukların ayrılması ve bağımlılıkların yönetilmesi için kullanılan bir yöntemdir.Layers are a way to separate responsibilities and manage dependencies. Her katmanın belirli bir sorumluluğu vardır.Each layer has a specific responsibility. 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.A higher layer can use services in a lower layer, but not the other way around.

Katmanlar fiziksel olarak ayrılmıştır ve ayrı makineler üzerinde çalışır.Tiers are physically separated, running on separate machines. Bir katman başka bir katmanı doğrudan çağırabilir veya zaman uyumsuz mesajlaşmayı (ileti kuyruğu) kullanabilir.A tier can call to another tier directly, or use asynchronous messaging (message queue). Her katman kendi katmanında barındırılıyor olsa da bu, zorunlu değildir.Although each layer might be hosted in its own tier, that's not required. Aynı katmanda birden fazla katman barındırılabilir.Several layers might be hosted on the same tier. Katmanların fiziksel olarak ayrılması ölçeklenebilirliği ve esnekliği artırır, ancak ek ağ iletişiminden gecikmeye de neden olur.Physically separating the tiers improves scalability and resiliency, but also adds latency from the additional network communication.

Geleneksel bir üç katmanlı uygulamanın bir sunum katmanı, orta katmanı ve veritabanı katmanı bulunur.A traditional three-tier application has a presentation tier, a middle tier, and a database tier. Orta katman isteğe bağlıdır.The middle tier is optional. Daha karmaşık uygulamalar üçten fazla katmana sahip olabilir.More complex applications can have more than three tiers. Yukarıdaki diyagramda, farklı işlev alanlarını kapsayan iki orta katmanlı bir uygulama gösterilmektedir.The diagram above shows an application with two middle tiers, encapsulating different areas of functionality.

N katmanlı bir uygulama, kapalı katman mimarisine veya açık katman mimarisine sahip olabilir:An N-tier application can have a closed layer architecture or an open layer architecture:

  • Kapalı katman mimarisinde bir katman yalnızca sonraki katmanı hemen aşağıya çağırabilir.In a closed layer architecture, a layer can only call the next layer immediately down.
  • Açık katman mimarisinde bir katman kendi altındaki katmanlardan herhangi birini çağırabilir.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.A closed layer architecture limits the dependencies between layers. Ancak bir katman, istekleri bir sonraki katmana iletirse bu, gereksiz bir ağ trafiği oluşturabilir.However, it might create unnecessary network traffic, if one layer simply passes requests along to the next layer.

Bu mimarinin kullanılacağı durumlarWhen to use this architecture

N katmanlı mimariler genellikle, her katmanın ayrı bir VM kümesinde çalıştığı hizmet olarak altyapı (IaaS) uygulamaları olarak kullanılır.N-tier architectures are typically implemented as infrastructure-as-service (IaaS) applications, with each tier running on a separate set of VMs. Ancak N katmanlı bir uygulamanın salt IaaS olması gerekmez.However, an N-tier application doesn't need to be pure IaaS. Mimarinin bazı kısımları için yönetilen hizmetlerin (önbelleğe alma, mesajlaşma ve veri depolama) kullanılması genellikle avantajlıdır.Often, it's advantageous to use managed services for some parts of the architecture, particularly caching, messaging, and data storage.

Aşağıdakiler için N katmanlı mimariyi kullanmayı deneyebilirsiniz:Consider an N-tier architecture for:

  • Basit web uygulamaları.Simple web applications.
  • Şirket içi bir uygulamayı, mümkün olduğunca az yeniden düzenleme gereksinimiyle Azure’a geçirme.Migrating an on-premises application to Azure with minimal refactoring.
  • Şirket içi uygulamaları ve bulut uygulamalarını birlikte geliştirme.Unified development of on-premises and cloud applications.

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.N-tier architectures are very common in traditional on-premises applications, so it's a natural fit for migrating existing workloads to Azure.

AvantajlarBenefits

  • Bulut uygulamaları ile şirket içi uygulamalar arasında ve bulut platformları arasında taşınabilirlik.Portability between cloud and on-premises, and between cloud platforms.
  • Çoğu geliştirici için daha az öğrenme eğrisi.Less learning curve for most developers.
  • Geleneksel uygulama modelinden doğal bir değişim süreci.Natural evolution from the traditional application model.
  • Heterojen ortama (Windows/Linux) açıklıkOpen to heterogeneous environment (Windows/Linux)

ZorluklarChallenges

  • 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.It's easy to end up with a middle tier that just does CRUD operations on the database, adding extra latency without doing any useful work.
  • Tek yapılı tasarım, özelliklerin bağımsız olarak dağıtılmasını önler.Monolithic design prevents independent deployment of features.
  • Bir IaaS uygulamasını yönetmek, yalnızca yönetilen hizmetleri kullanan bir uygulamayı yönetmekten daha zahmetlidir.Managing an IaaS application is more work than an application that uses only managed services.
  • Büyük bir sistemde ağ güvenliğini yönetmek zor olabilir.It can be difficult to manage network security in a large system.

En iyi yöntemlerBest practices

  • Yükteki değişiklikleri yönetmek için otomatik ölçeklendirmeyi kullanın.Use autoscaling to handle changes in load. Bkz. En iyi uygulamaları otomatik olarak ölçeklendirme.See Autoscaling best practices.
  • Katmanları ayırmak için zaman uyumsuz mesajlaşmayı kullanın.Use asynchronous messaging to decouple tiers.
  • Semistatic veri önbelleği.Cache semistatic data. Bkz. Önbelleğe alma ile ilgili en iyi uygulamalar.See Caching best practices.
  • Veritabanı katmanı gibi bir çözüm kullanarak yüksek kullanılabilirlik için yapılandırma SQL Server Always On kullanılabilirlik grupları.Configure the database tier for high availability, using a solution such as SQL Server Always On availability groups.
  • Ön uç ile İnternet arasına bir web uygulaması güvenlik duvarı (WAF) yerleştirin.Place a web application firewall (WAF) between the front end and the Internet.
  • Her bir katmanı kendi alt ağına yerleştirin ve alt ağları bir güvenlik sınırı olarak kullanın.Place each tier in its own subnet, and use subnets as a security boundary.
  • Erişimi veri katmanı ile kısıtlayarak yalnızca orta katmanlardan gelen isteklere izin verin.Restrict access to the data tier, by allowing requests only from the middle tier(s).

Sanal makinelerde N katmanlı mimariN-tier architecture on virtual machines

Bu bölümde, VM'ler üzerinde çalışan, önerilen bir N katmanlı mimari açıklanmaktadır.This section describes a recommended N-tier architecture running on VMs.

Fiziksel bir N katmanlı mimari diyagramı

Her katman, bir kullanılabilirlik kümesinde veya sanal makine ölçek kümesine yerleştirilmiş iki veya daha fazla VM oluşur.Each tier consists of two or more VMs, placed in an availability set or virtual machine scale set. Birden çok VM, bir VM’nin başarısız olması durumunda esneklik sağlar.Multiple VMs provide resiliency in case one VM fails. İsteklerin bir katmandaki VM’lere dağıtılması için yük dengeleyiciler kullanılır.Load balancers are used to distribute requests across the VMs in a tier. Bir katman, havuza daha fazla VM eklenerek yatay yönde ölçeklendirilebilir.A tier can be scaled horizontally by adding more VMs to the pool.

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.Each tier is also placed inside its own subnet, meaning their internal IP addresses fall within the same address range. Bu, ağ güvenlik grubu kuralları uygulamak ve ayrı ayrı katmanlara tabloları yönlendirmek kolaylaştırır.That makes it easy to apply network security group rules and route tables to individual tiers.

Web ve iş katmanlarında durum bilgisi bulunmaz.The web and business tiers are stateless. Söz konusu katman için bir isteği herhangi bir VM işleyebilir.Any VM can handle any request for that tier. Veri katmanı, çoğaltılmış bir veritabanı içermelidir.The data tier should consist of a replicated database. Windows için SQL Server Always On kullanılabilirlik gruplarını kullanarak yüksek kullanılabilirlik için öneririz.For Windows, we recommend SQL Server, using Always On availability groups for high availability. Linux için, Apache Cassandra gibi çoğaltmayı destekleyen bir veritabanı seçin.For Linux, choose a database that supports replication, such as Apache Cassandra.

Ağ güvenlik grupları, her katman için erişimi kısıtlayın.Network security groups restrict access to each tier. Örneğin, veritabanı katmanı yalnızca iş katmanından erişime izin verir.For example, the database tier only allows access from the business tier.

Azure'da N katmanlı uygulamaları çalıştırma hakkında daha fazla bilgi için:For more information about running N-tier applications on Azure:

Diğer konularAdditional considerations

  • N katmanlı mimariler üç katmanla sınırlı değildir.N-tier architectures are not restricted to three tiers. Daha karmaşık uygulamalar için genellikle daha fazla katman bulundurulur.For more complex applications, it is common to have more tiers. Bu durumda, istekleri belirli bir katmana yönlendirmek için katman 7 yönlendirmesini kullanmayı deneyin.In that case, consider using layer-7 routing to route requests to a particular tier.

  • Katmanlar, ölçeklenebilirlik, güvenilirlik ve güvenlik sınırı niteliği taşır.Tiers are the boundary of scalability, reliability, and security. Bu alanlarda farklı gereksinimleri olan hizmetler için ayrı katmanların bulundurulması daha uygundur.Consider having separate tiers for services with different requirements in those areas.

  • Otomatik ölçeklendirme için kullanım sanal makine ölçek kümeleri.Use virtual machine scale sets for autoscaling.

  • Mimaride, yönetilen bir hizmeti büyük ölçüde yeniden düzenleme yapmadan kullanabileceğiniz yerler bulun.Look for places in the architecture where you can use a managed service without significant refactoring. Özellikle önbelleğe alma, mesajlaşma, depolama ve veritabanı etkenlerine dikkat edin.In particular, look at caching, messaging, storage, and databases.

  • Daha yüksek düzeyde güvenlik için uygulamanın önüne bir ağ DMZ’si ekleyin.For higher security, place a network DMZ in front of the application. DMZ, güvenlik duvarları ve paket incelemesi gibi güvenlik işlevlerini uygulayan ağ sanal gereçlerini (NVA’lar) içerir.The DMZ includes network virtual appliances (NVAs) that implement security functionality such as firewalls and packet inspection. Daha fazla bilgi için bkz. Ağ DMZ’si başvuru mimarisi.For more information, see Network DMZ reference architecture.

  • 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.For high availability, place two or more NVAs in an availability set, with an external load balancer to distribute Internet requests across the instances. Daha fazla bilgi için bkz. Yüksek düzeyde kullanılabilir ağ sanal gereçlerini dağıtma.For more information, see Deploy highly available network virtual appliances.

  • Uygulama kodu çalıştıran VM’ler için doğrudan RDP veya SSH erişimine izin vermeyin.Do not allow direct RDP or SSH access to VMs that are running application code. Bunun yerine; işleçler, savunma ana bilgisayarı olarak da adlandırılan bir sıçrama kutusunda oturum açmalıdır.Instead, operators should log into a jumpbox, also called a bastion host. Bu, yöneticilerin diğer Vm'lere bağlanmak için kullandıkları ağ üzerindeki bir vm'dir.This is a VM on the network that administrators use to connect to the other VMs. Sıçrama kutusu yalnızca onaylı genel IP adreslerinden RDP veya SSH sağlayan bir ağ güvenlik grubu vardır.The jumpbox has a network security group that allows RDP or SSH only from approved public IP addresses.

  • Siteden siteye sanal özel ağ (VPN) veya Azure ExpressRoute kullanarak Azure sanal ağını şirket içi ağınıza genişletebilirsiniz.You can extend the Azure virtual network to your on-premises network using a site-to-site virtual private network (VPN) or Azure ExpressRoute. Daha fazla bilgi için bkz. Hibrit ağ başvuru mimarisi.For more information, see Hybrid network reference architecture.

  • Kuruluşunuz kimlik yönetimi için Active Directory’yi kullanıyorsa Active Directory ortamınızı Azure Sanal Ağı’na genişletmek isteyebilirsiniz.If your organization uses Active Directory to manage identity, you may want to extend your Active Directory environment to the Azure VNet. Daha fazla bilgi için bkz. Kimlik yönetimi başvuru mimarisi.For more information, see Identity management reference architecture.

  • VM’ler için Azure SLA’nın sağladığından daha yüksek düzeyde kullanılabilirliğe ihtiyacınız varsa uygulamayı iki bölgede de çoğaltıp, yük devretme için Azure Traffic Manager’ı kullanabilirsiniz.If you need higher availability than the Azure SLA for VMs provides, replicate the application across two regions and use Azure Traffic Manager for failover. 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.For more information, see Run Windows VMs in multiple regions or Run Linux VMs in multiple regions.