Her Şeyi Tek Sunucuda Kurmak
Tek sunucu kurulumu, tüm ortamın tek bir sunucuda bulunduğu zamandır. Tipik bir web uygulaması için buna web sunucusu, uygulama sunucusu ve veritabanı sunucusu dahildir. Bu kurulumun yaygın bir varyasyonu, tek bir sunucuda L inux, A pache, M ySQL ve P HP anlamına gelen LAMP yığınıdır . Bunun için örnek bir kullanım durumu, hızlı bir şekilde bir uygulama kurmak istediğiniz zamandır. Bunun gibi temel bir kurulum, bir fikri test etmek veya basit bir web sayfasını çalışır duruma getirmek için kullanılabilir.
Ne yazık ki, bu ölçeklenebilirlik ve bileşen izolasyonu açısından çok az şey sunuyor. Ek olarak, uygulama ve veritabanı, CPU, Bellek, G/Ç ve daha fazlası gibi aynı sunucu kaynaklarını kullanır. Sonuç olarak, bu muhtemelen düşük performansa neden olabilir ve temel nedeni belirlemeyi zorlaştırabilir. Aşağıda, tek bir sunucu kullanmanın görsel bir temsili yer almaktadır:
Ayrı Bir Veritabanı Sunucusu Kurma
Veritabanı yönetim sistemi (DBMS) , uygulama ile veritabanı arasındaki kaynak çekişmesini ortadan kaldırmak ve veritabanını DMZ’den veya halka açık internetten kaldırarak güvenliği artırmak için ortamın geri kalanından ayrılabilir .
Örnek bir kullanım durumu, bunun uygulamanızın hızlı bir şekilde kurulmasını sağlayabilmesi ve uygulama ile veritabanının aynı sistem kaynakları için savaşmasını önlemesidir. Ayrıca her uygulamayı ve veritabanı katmanını ayrı ayrı dikey olarak ölçeklendirebilirsiniz. Bu, daha fazla kapasiteye ihtiyaç duyan sunucuya daha fazla kaynak ekleyerek mümkündür. Kurulumunuza bağlı olarak bu, veritabanınızı DMZ’den kaldırarak güvenliği de artırabilir.
Bu kurulum, tek bir sunucudan biraz daha karmaşıktır. İki sunucu arasındaki ağ bağlantısı coğrafi olarak birbirinden uzaksa, yüksek gecikme süresi gibi performans sorunları ortaya çıkabilir. Bant genişliği aktarılan veri miktarı için çok düşükse performans sorunları da olabilir. MySQL ile Site Performansını Optimize Etmek İçin Uzak Veritabanı Nasıl Kurulur hakkında daha fazla bilgi edinebilirsiniz . Aşağıda, ayrı bir veritabanı sunucusu kullanmanın görsel bir temsili yer almaktadır:
Yük Dengeleyici (Ters Proxy) Ayarlama
İş yükünü birden çok sunucuya dağıtarak performansı ve güvenilirliği artırmak için bir sunucu ortamına yük dengeleyiciler eklenebilir. Yük dengeli sunuculardan biri arızalanırsa, arızalı sunucu tekrar sağlıklı hale gelene kadar diğer sunucular gelen trafiği yönetir. Katman 7 uygulama katmanı ters proxy kullanılarak aynı etki alanı ve bağlantı noktası üzerinden birden çok uygulamaya hizmet vermek için de kullanılabilir . Ters proxy yük dengeleme yapabilen birkaç yazılım türü HAProxy, Nginx ve Varnish’tir.
Örnek bir kullanım durumu, yatay ölçeklendirme olarak da bilinen daha fazla sunucu ekleyerek ölçeklendirme gerektiren bir ortamdır . Bir yük dengeleyici kurduğunuzda, daha fazla sunucu eklenerek ölçeklenebilen bir ortam kapasitesi sağlar. Ayrıca, istemci bağlantılarını makul bir miktar ve sıklıkla sınırlayarak DDOS saldırılarına karşı da koruma sağlayabilir.
Bir yük dengeleyicinin ayarlanması, yük dengeleyicinin yeterli kaynağa sahip olmaması veya kötü yapılandırılmış olması durumunda performans darboğazına neden olabilir. Ayrıca, SSL sonlandırmasının nerede gerçekleştirileceği ve sabit oturumlar gerektiren uygulamaların nasıl ele alınacağı gibi ek değerlendirme gerektiren karmaşıklıklar da sunabilir. Ek olarak, yük dengeleyici tek bir arıza noktasıdır, bu, çökmesi durumunda tüm hizmetinizin düşebileceği anlamına gelir. Yüksek kullanılabilirlik (HA) kurulumu, tek bir arıza noktası olmayan bir altyapıdır. Aşağıda, bir yük dengeleyici kurmanın görsel bir temsili yer almaktadır:
HTTP Hızlandırıcı Kurma (Ters Proxy’yi Önbelleğe Alma)
Bir HTTP hızlandırıcı veya önbelleğe alma HTTP ters proxy’si, çeşitli tekniklerle bir kullanıcıya içerik sunmak için gereken süreyi azaltmak için kullanılabilir. Bir HTTP hızlandırıcı ile kullanılan ana teknik, bir web veya uygulama sunucusundan gelen yanıtları bellekte önbelleğe almaktır, böylece aynı içerik için gelecekteki istekler, web veya uygulama sunucularıyla daha az gereksiz etkileşimle hızlı bir şekilde sunulabilir. HTTP hızlandırma yapabilen birkaç yazılım örneği Varnish, Squid, Nginx’tir. Örnek bir kullanım durumu, yoğun içerikli dinamik web uygulamalarının veya yaygın olarak erişilen birçok dosyanın bulunduğu bir ortamdır.
HTTP hızlandırması, önbelleğe alma ve sıkıştırma yoluyla bir web sunucusundaki CPU yükünü azaltarak ve böylece kullanıcı kapasitesini artırarak site performansını artırabilir. Ters proxy yük dengesi olarak da kullanılabilir ve bazı önbelleğe alma yazılımları DDOS saldırılarına karşı bile koruma sağlayabilir. Ne yazık ki, önbelleğe isabet oranı düşükse performansı düşürebilir ve ondan en iyi performansı elde etmek için ayar yapılması gerekir. Aşağıda, bir HTTP Hızlandırıcı kurmanın görsel bir temsili yer almaktadır:
Birincil çoğaltma Veritabanı Çoğaltma Kurulumu
CMS gibi yazmaya kıyasla çok sayıda okuma gerçekleştiren bir veritabanı sisteminin performansını artırmanın bir yolu, birincil çoğaltma veritabanı eşlemesini kullanmaktır. Çoğaltma, bir birincil düğüm ve bir veya daha fazla çoğaltma düğümü gerektirir. Bu kurulumda, tüm güncellemeler birincil düğüme gönderilir ve okumalar tüm düğümlere dağıtılabilir. Örnek bir kullanım durumu, bir uygulamanın veritabanı katmanının okuma performansını artırmaktır. Bir birincil kopya veritabanı çoğaltması ayarlamak, okumaları eşlemelere yayarak veritabanı okuma performansını artırır ve okuma isteklerini sunmak için zaman harcanmadan yalnızca güncellemeler için kullanarak yazma performansını artırır.
Birincil çoğaltma veritabanı çoğaltmasının eksilerinden bazıları, veritabanına erişen uygulamanın hangi veritabanı düğümlerine güncelleme ve okuma istekleri göndermesi gerektiğini belirleyen bir mekanizmaya sahip olması gerektiğidir. Ayrıca, birincil başarısız olursa, sorun düzeltilene kadar veritabanında hiçbir güncelleme gerçekleştirilemez. Ayrıca, birincil düğümün arızalanması durumunda yerleşik yük devretme özelliği yoktur. Aşağıda, tek bir eşleme düğümüyle bir birincil eşleme çoğaltma kurulumunun görsel bir temsili yer almaktadır:
Kavramları Birleştirmek
Uygulama sunucularına ek olarak önbellek sunucularını yük dengelemek ve veritabanı replikasyonunu tek bir ortamda kullanmak mümkündür. Bu teknikleri birleştirmenin amacı, çok fazla sorun veya karmaşıklık yaratmadan her birinin faydalarından yararlanmaktır. İşte bu tür sunucu ortamı kurulumunun örnek bir şeması:
Örneğin, yük dengeleyicinin statik istekleri (resimler, CSS, JavaScript vb.) tanıyacak ve bu istekleri doğrudan önbelleğe alma sunucularına gönderecek ve diğer istekleri uygulama sunucularına gönderecek şekilde yapılandırıldığı bir senaryo hayal edin.
Bir kullanıcı dinamik içerik için istek gönderdiğinde sürecin dökümü aşağıda verilmiştir:
- Kullanıcı, http:// adresinden dinamik içerik ister.örnek.com/ (yük dengeleyici)
- Yük dengeleyici, isteği uygulama arka ucuna gönderir
- Uygulama arka ucu veritabanından okur ve istenen içeriği yük dengeleyiciye döndürür
- Yük dengeleyici, istenen verileri kullanıcıya döndürür
Bir kullanıcı statik içerik istediğinde aşağıdaki süreç uygulanır:
- Yük dengeleyici, istenen içeriğin önbelleğe alınıp (cache-hit) alınıp alınmadığını (cache-miss) doğrulamak için önbellek arka ucunu kontrol eder.
- İçerik önbelleğe alınırsa, bu, istenen içeriği yük dengeleyiciye döndüreceği ve süreçteki son adıma atlayacağı ve verileri kullanıcıya döndüreceği anlamına gelir. İçerik önbelleği özlüyorsa, önbellek sunucusu isteği yük dengeleyici aracılığıyla uygulama arka ucuna iletir
- Yük dengeleyici, isteği uygulama arka ucuna iletir
- Uygulama arka ucu veritabanından okur ve istenen içeriği yük dengeleyiciye döndürür
- Yük dengeleyici, yanıtı önbellek arka ucuna iletir
- Önbellek arka ucu, içeriği önbelleğe alır ve yük dengeleyiciye geri döndürür
- Yük dengeleyici, istenen verileri kullanıcıya döndürür
Bu ortamda hala iki tek hata noktası vardır, yük dengeleyici ve birincil veritabanı sunucusu, ancak önceki bölümlerde açıklanan diğer tüm güvenilirlik ve performans avantajlarını sağlar.