Giriş
Teknoloji ve internet; günlük, akademik ve profesyonel hayatımızın merkezinde yer almaya başladı. Bu nedenle, aynı anda var olan web sitelerinin ve uygulamaların sayısının bu kadar fazla olması şaşırtıcı değil. Eğer bir işletmeyseniz, ilişkili bir web platformuna sahip olmak istersiniz. Bir uygulama, hizmetlerinizi hedef müşterilerinize kolayca pazarlamanızı ve sunmanızı sağlar.
Bir web uygulaması oluşturma nedeniniz ne olursa olsun, bunu nasıl oluşturacağınızı belirlemeniz gerekir. Konu en iyi sunucu kurulumunu seçmeye geldiğinde elinizin altında birçok seçenek vardır. Tercih ettiğiniz sunucu mimarisi, ortamınızdaki her şeyi nasıl çalıştıracağınızı ve yöneteceğinizi belirleyecektir. Bu nedenle karar, dikkatli bir değerlendirmeden sonra verilmelidir.
Doğru Sunucu Kurulumu Nasıl Seçilir
Peki, uygulamanız için hangi mimarinin 'doğru' olduğuna nasıl karar vereceksiniz? Bunu yapmak için öncelikle web uygulamanızın gereksinimlerinin neler olduğunu düşünmeniz gerekir. Özel kullanım durumunuz için verimli bir şekilde çalışması için dahil etmeniz gereken belirli özellikler olmalıdır. Örneğin, belki de kolayca ölçeklendirilebilen bir uygulama için çabalıyorsunuzdur. Veya uygulamanızın mobil cihazların yanı sıra tarayıcılarda da sorunsuz çalışmasına ihtiyaç duyuyor olabilirsiniz. Aynı zamanda bütçeniz de birincil endişeniz olabilir.
Gereksinimleriniz ne olursa olsun, uygulamanız için özel bir çözüm oluşturabileceğinizi bilmelisiniz. Bu eğitimde, birçok kişinin web uygulamaları için yaygın olarak kullandığı çeşitli sunucu türlerini inceleyeceğiz. Çeşitli kullanım durumlarından ve belirli bir kurulumun ne zaman kullanılmasının en iyisi olduğundan bahsedeceğiz. Sizin için uygun olup olmadığına karar vermenize yardımcı olmak için her sunucu mimarisinin bazı artılarını ve eksilerini de sunacağız.
1. Her Şey Tek Bir Sunucuda
Adından da anlaşılacağı gibi, tüm ortamı tek bir sunucuya yüklersiniz. Bu ortam; web sunucunuzu, uygulama sunucunuzu ve veritabanı sunucunuzu içerir. Örneğin, Linux, Apache, MySQL, ve PHP (LAMP) yığın yapılandırmasında çalışır. Şu konulardaki eğitimlerimizi takip edebilirsiniz: Ubuntu sunucusuna LAMP yığınını kurma ve CentOS üzerine LAMP yığınını kurma.

Ne Zaman Kullanılmalı:
Zamanınız kısıtlıysa bu tür bir düzenleme en iyi sonucu verir. Kurulumu basit ve hızlıdır. Bu nedenle basit web uygulamaları için uygundur.
Avantajları:
- Anlaşılması ve uygulanması basit ve kolaydır.
- Tamamının kurulması çok az zaman alır.
Dezavantajları:
- Yatay ölçeklenebilirliğe izin vermez.
- Bileşen yalıtımı açısından çok az şey sunar.
- Uygulama ve veritabanı tek bir sunucuda oldukları için esasen aynı kaynaklar için rekabet ederler.
- Sonuç olarak, düşük performans yaşayabilirsiniz.
2. Ayrı Veritabanı Sunucusu
Tek bir sunucu kullanmanın ana sorunu, sınırlı kaynaklar için yaşanan rekabettir. Bu kurulum bu sorunu çözmeyi amaçlamaktadır. Burada, veritabanı yönetim sistemi veya DBMS, uygulama sunucusundan ayrı tutulur. Veritabanı sunucusu özel bir ağdadır ve kendi kaynaklarına sahiptir. Bu, daha iyi performans ve artırılmış güvenlik sağlar.

Ne Zaman Kullanılmalı:
Yine, hızlı bir kurulum gerçekleştirmek istiyorsanız, bunu yapılandırmak oldukça basittir. Veritabanı ve uygulamanın aynı kaynaklar için rekabet etmesinden endişe ediyorsanız ideal çözümdür.
Avantajları:
- İşlemci, bellek, G/Ç vb. dahil olmak üzere uygulama ve veritabanının her biri için ayrı, ayrılmış sistem kaynakları.
- Uygulama ve veritabanı katmanlarının her ikisinde de daha fazla ölçeklenebilirlik potansiyeli.
- İhtiyacınız doğrultusunda kaynak ekleyebilir ve kaldırabilirsiniz.
- Veritabanını genel internetten kaldırırsanız, güvenliğinizi de artırabilirsiniz.
Dezavantajları:
- Tek sunuculu kuruluma göre biraz daha karmaşıktır.
- İki sunucu arasındaki düşük bant genişliği veya yüksek gecikmeli ağ bağlantısı performans sorunlarına yol açabilir.
3. Ters Proxy veya Yük Dengeleyici
Burası, yük dengeleyicilerin devreye girer. Yük dengeleyiciler, performansı ve güvenilirliği artırmak için genellikle sunucu ortamlarında kullanılır. Bunu 'yükü dengeleyerek', yani iş yükünü bir sunucu dizisine dağıtarak yaparlar.

Ne Zaman Kullanılmalı:
Yük dengeleyiciler, yatay ölçekleme yapmanız gerektiğinde son derece kullanışlıdır. Yatay ölçekleme temel olarak ortama daha fazla sunucu eklemek anlamına gelir. Tek bir alan adı ve port kullanarak aynı anda birkaç uygulamaya hizmet sunmak için bir uygulama katmanı ters proxy'si de kullanabilirsiniz. HAProxy, Nginx, ve Varnish ters proxy yük dengelemesine izin veren yazılım örnekleridir.
Faydaları:
- Hattaki bir sunucunun arızalanması durumunda, diğer sunucular iş yükünü dengeleyerek onun işlevini telafi eder.
- Ortamın kapasitesini artırmak veya azaltmak için yatay ölçekleme yapmanıza olanak tanır.
- Ayrıca istemci bağlantılarını sınırlandırarak DDOS saldırılarına karşı koruma sağlar.
Dezavantajları:
- Sistem kaynaklarının yetersiz olması durumunda, yük dengeleyici uygulamanızın performansını sınırlayabilir.
- Doğru performansı sağlamak için uygun yapılandırma gereklidir.
- Tek sunuculu veya ayrı sunuculu kurulumlara göre önemli ölçüde daha karmaşıktır.
- SSL sonlandırma ve yapışkan oturumlara (sticky sessions) ihtiyaç duyan uygulamalar gibi faktörleri göz önünde bulundurmanız gerekir.
- Yük dengeleyicileri kullanırken endişe duyulan en önemli nokta, bunun tek bir hata noktası (single point of failure) olmasıdır. Bu, yük dengeleyici çalışmadığında tüm hizmetinizin çökeceği anlamına gelir.
4. HTTP Hızlandırıcı veya Önbelleğe Alan Ters Proxy
Bu, uygulamanızın bir kullanıcısına içerik sunma hızınızı artırmak için kullanabileceğiniz bir kurulumdur. Bu süreyi azaltmak için çeşitli teknikler kullanır. Bunlardan en önemlisi, uygulama sunucusundan gelen yanıtı önbelleğe almaktır. Hızlandırıcı, bir kullanıcı içeriği ilk kez talep ettiğinde içeriği belleğine kaydeder. Bu nedenle, gelecekte benzer talepler geldiğinde, uygulama sunucusuyla etkileşime girmeden içeriği hızlı bir şekilde sunar. Nginx, Varnish ve Squid yazılımlarının tümü HTTP hızlandırma yapabilmektedir..

Ne Zaman Kullanılmalı:
Anlaşılacağı üzere, bu kurulum kullanıcıların çok sık talep ettiği dosyalar ve içerikler için en uygun olanıdır. Ayrıca içerik açısından yoğun olan dinamik web uygulamaları için de çok iyi çalışır.
Faydaları:
- Önbelleğe alma ve sıkıştırma, uygulamanın ve istek işlemenin hızını önemli ölçüde artırır.
- CPU üzerindeki yükün azaltılması da site performansını artırır.
- Bunu bir ters proxy yük dengeleyici olarak da kullanabilirsiniz.
Dezavantajları:
- En iyi performansı elde etmek için iyi bir şekilde ayarlamanız gerekir.
- Önbellek isabet oranının düşük olması durumunda düşük performans yaşayabilirsiniz.
5. Primary-Replica Veritabanı Çoğaltması
Bir primary-replica veritabanı çoğaltma kurulumu, genellikle yazmadan daha fazla okuma gerçekleştiren sistemler için çok kullanışlıdır. Örneğin, içerik yönetim sistemleri böyle bir mimariden gerçekten yararlanabilir. Çoğaltma için bir birincil (primary) ve bir veya daha fazla çoğaltma (replica) düğümüne ihtiyacınız vardır. Okuma işlemlerini tüm düğümlere dağıtır. Güncellemeler ise yalnızca birincil düğüme gider.

Ne Zaman Kullanılmalı:
Bahsettiğimiz gibi, çoğaltma tabanlı bir veritabanı kurulumu bir sistemin okuma performansını artırmaya yardımcı olur. Bunu CMS gibi uygulamalar için kullanabilirsiniz.
Faydaları:
- Okuma işlemlerini kopyalara (replicas) yaydığı için veritabanının okuma performansını artırır.
- Birincil düğümü yalnızca güncellemeler için kullanırsanız, yazma performansını da artırabilirsiniz.
Dezavantajları:
- Veritabanına erişmeye çalışan her uygulamanın, güncellemeleri ve okuma isteklerini hangi düğüme göndereceğine karar verebilmesi gerekir.
- Birincil kopyanın (primary replica) arızalanması durumunda güncellemeler durur. Güncellemelerin devam etmesini sağlamak için sorunu çözmeniz gerekir.
- Olası bir birincil düğüm arızasını karşılayacak bir yük devretme (failover) mekanizması yoktur.
Sunucu Kurulumlarını Kombinasyon Halinde Kullanma
Neyse ki, istediğiniz sonucu elde etmek için çeşitli teknikleri birleştirmeniz de mümkündür. Bu, tek bir ortamda uygulama sunucularını önbellekleme sunucularıyla yük dengeleyebileceğiniz ve veritabanını çoğaltabileceğiniz anlamına gelir. Bunu yapmak, her iki sunucunun işlevselliğinden de yararlanmanızı sağlar. Ancak bu durum, kurulumu daha karmaşık veya zahmetli hale getirmez.
Örnek:
Böyle bir ortamı bir örnekle anlamaya çalışacağız:

Böyle bir ortamda, yük dengeleyici statik istekleri önbellekleme sunucularına gönderecektir. Statik içerik diğerlerinin yanı sıra CSS, görseller ve Javascript gibileri içerir. Bunun yerine diğer her türlü içerik isteğini uygulama sunucularına yönlendirecektir.
Diyelim ki bir kullanıcı ortamdan bazı statik içerikler talep ediyor. Gerçekleşecek olan şudur:
- Yük dengeleyici öncelikle içeriğin önbellek isabeti (cache-hit) mi yoksa önbellek kaçırması (cache-miss) mı olduğunu belirleyecektir. Önbellek isabeti olan içerik önbellekte bulunurken, önbellek kaçırması olan içerik orada yoktur. Bunu önbellek arka ucu (cache-backend) ile kontrol ederek yapar.
- Önbellek isabeti olması durumunda, yük dengeleyici içeriği kullanıcıya gönderir.
- Önbellek kaçırması olması durumunda, önbellek sunucusu isteği uygulamanın arka ucuna iletir.
- Uygulama arka ucu (app-backend) içeriği veritabanından bulup gönderecektir.
- Önbellek arka ucu (cache-backend) içeriği yük dengeleyiciden alır. Ayrıca bu içeriği yük dengeleyiciye döndürmeden önce önbelleğe alır.
- Ardından yük dengeleyici yanıtı kullanıcıya iletir.
Diğer taraftan, kullanıcının dinamik içerik talep etmesi durumunda gerçekleşecek olan şudur:
- İstek, kullanıcıdan yük dengeleyiciye gelecektir.
- Bu istek uygulama arka ucuna (app-backend) gelir.
- Uygulama arka ucu talep edilen içeriği bulur ve yük dengeleyiciye döndürür.
- Kullanıcı içeriği alır.
Böyle bir birleşik ortamın en büyük avantajlarından biri daha güvenilir olmasıdır. Sadece bu da değil, aynı zamanda üstün performans yeteneklerine de sahiptir. Ancak yine de iki tek hata noktası (single point of failure) vardır: yük dengeleyici ve birincil veritabanı sunucusu.
Sonuç
Ortamınızda her bir sunucu kurulumunu tek başına kullanabilirsiniz. Diğer taraftan, kişiselleştirilmiş bir çözüm oluşturmak için bunlardan birkaçını bir araya da getirebilirsiniz. ‘Doğru’ bir cevap yoktur. Her şey mimariden elde etmek istediğiniz işlevselliğe bağlıdır.
Her bir sunucu kurulumunun nasıl çalıştığına dair temel düzeyde bilgiye sahip olmak, kendi uygulamanız için karar vermenize yardımcı olacaktır. Yapılacak en iyi şey küçük ve basit başlamaktır. Deneyim kazandıkça kurulumunuzun karmaşıklığını artırmaya devam edebilirsiniz.
Keyifli Bilişimler!
Yorumlar
Henüz yorum yapılmamış. İlk siz olun.