Çalışma Materyali: Yüksek Erişilebilirlik ve Ölçeklenebilirlik
Kaynak Bilgisi: Bu çalışma materyali, Stephane Maarek'in "Sayfa 118-159" başlıklı sunum slaytları ve ilgili ders ses kaydı transkriptinden derlenmiştir.
Giriş
Modern bilişim sistemlerinde, uygulamaların artan talepleri karşılayabilmesi ve kesintisiz hizmet sunabilmesi kritik öneme sahiptir. Bu bağlamda, ölçeklenebilirlik ve yüksek erişilebilirlik kavramları merkezi bir rol oynamaktadır. Ölçeklenebilirlik, bir sistemin artan iş yükünü performanstan ödün vermeden yönetebilme yeteneğini ifade ederken, yüksek erişilebilirlik, sistemin arızalara karşı dayanıklı olmasını ve sürekli çalışmasını garanti eder. Bu iki kavram, bulut tabanlı altyapılarda, özellikle Amazon Web Services (AWS) gibi platformlarda, uygulamaların güvenilir ve verimli bir şekilde dağıtılması için temel taşları oluşturur.
1. Ölçeklenebilirlik ve Yüksek Erişilebilirlik Kavramları
1.1. Ölçeklenebilirlik (Scalability) 📚
Ölçeklenebilirlik, bir uygulamanın veya sistemin değişen yüklere uyum sağlayarak daha büyük iş yüklerini kaldırabilmesi anlamına gelir. İki ana türü vardır:
-
Dikey Ölçeklenebilirlik (Vertical Scalability) ⬆️:
- Bir örneğin boyutunu artırarak (CPU, RAM gibi kaynakları yükselterek) kapasitesini büyütmeyi ifade eder.
- Örnek: Uygulamanızın t2.micro bir örnekte çalışırken, onu t2.large bir örneğe taşımak.
- Genellikle veritabanları gibi dağıtık olmayan sistemler için yaygındır (örn. RDS, ElastiCache).
- ⚠️ Sınırlama: Donanım limitleri nedeniyle bir üst sınırı vardır.
-
Yatay Ölçeklenebilirlik (Horizontal Scalability) ➡️:
- Uygulamanız için örnek sayısını artırarak kapasiteyi genişletmeyi ifade eder.
- Dağıtık sistemler ve modern web uygulamaları için çok yaygındır.
- Bulut hizmetleri (örn. Amazon EC2) sayesinde kolayca gerçekleştirilir.
- Eş anlamlısı: Esneklik (Elasticity).
1.2. Yüksek Erişilebilirlik (High Availability) ✅
Yüksek erişilebilirlik, bir uygulamanın veya sistemin en az iki farklı veri merkezinde (AWS'de Erişilebilirlik Alanları - Availability Zones) çalıştırılması anlamına gelir.
- Amaç: Bir veri merkezi kaybında bile hizmetin devamlılığını sağlamaktır.
- Pasif (örn. RDS Multi AZ) veya aktif (yatay ölçeklendirme ile) olabilir.
- Yüksek erişilebilirlik genellikle yatay ölçeklendirme ile birlikte kullanılır.
1.3. EC2 İçin Ölçeklenebilirlik ve Yüksek Erişilebilirlik
- Dikey Ölçeklendirme: Örnek boyutunu artırma (örn. t2.nano'dan u-12tb1.metal'e).
- Yatay Ölçeklendirme: Örnek sayısını artırma (Otomatik Ölçeklendirme Grupları ve Yük Dengeleyiciler ile).
- Yüksek Erişilebilirlik: Aynı uygulama için örnekleri birden fazla Erişilebilirlik Alanında çalıştırma (Otomatik Ölçeklendirme Grupları ve Yük Dengeleyiciler ile).
2. Yük Dengeleyiciler (Load Balancers)
2.1. Yük Dengeleyiciler Nedir ve Neden Kullanılır? 💡
Yük dengeleyiciler, gelen trafiği birden fazla sunucuya (örn. EC2 örnekleri) dağıtan sunuculardır.
- Faydaları:
- Yükü birden çok alt akış örneğine yayar.
- Uygulamanıza tek bir erişim noktası (DNS) sunar.
- Alt akış örneklerinin arızalarını sorunsuz bir şekilde yönetir.
- Örneklerinizin düzenli sağlık kontrollerini yapar.
- Web siteleriniz için SSL sonlandırması (HTTPS) sağlar.
- Çerezlerle yapışkanlığı (stickiness) sağlar.
- Bölgeler arası yüksek erişilebilirlik sunar.
- Genel trafiği özel trafikten ayırır.
2.2. Elastic Load Balancer (ELB)
Elastic Load Balancer, AWS tarafından yönetilen bir yük dengeleyici hizmetidir.
- AWS, ELB'nin çalışacağını garanti eder.
- Yükseltmeler, bakım ve yüksek erişilebilirlik AWS tarafından sağlanır.
- Birçok AWS hizmetiyle entegredir (EC2, ASG, ECS, ACM, CloudWatch, Route 53, WAF).
2.3. Sağlık Kontrolleri (Health Checks) ✅
Sağlık kontrolleri, yük dengeleyicilerin trafiği yönlendirdiği örneklerin isteklere yanıt verip veremediğini bilmesi için kritik öneme sahiptir.
- Belirli bir port ve rota (örn. /health) üzerinden yapılır.
- Yanıt 200 (OK) değilse, örnek sağlıksız kabul edilir.
2.4. Yük Dengeleyici Türleri 📊
AWS, dört ana yönetilen Yük Dengeleyici türü sunar:
-
Klasik Yük Dengeleyici (Classic Load Balancer - CLB) (v1 - Eski Nesil):
- Destekler: HTTP, HTTPS, TCP, SSL (güvenli TCP).
- Sağlık kontrolleri TCP veya HTTP tabanlıdır.
- Sabit bir ana bilgisayar adına sahiptir (XXX.region.elb.amazonaws.com).
- ⚠️ Not: Yeni uygulamalar için önerilmez.
-
Uygulama Yük Dengeleyici (Application Load Balancer - ALB) (v2 - Yeni Nesil):
- Katman: Katman 7 (HTTP) üzerinde çalışır.
- Destekler: HTTP, HTTPS, WebSocket, HTTP/2.
- Özellikler:
- Birden çok HTTP uygulamasını hedef gruplar aracılığıyla dengeleme.
- Aynı makinedeki birden çok uygulamayı dengeleme (örn. konteynerler).
- Yönlendirmeleri destekler (örn. HTTP'den HTTPS'ye).
- Yönlendirme Kuralları: URL yolu (örn. /users, /posts), ana bilgisayar adı (örn. one.example.com), sorgu dizesi veya başlıklara göre yönlendirme.
- Kullanım Alanları: Mikro hizmetler ve konteyner tabanlı uygulamalar (Docker, Amazon ECS) için idealdir.
- Hedef Grupları: EC2 örnekleri, ECS görevleri, Lambda fonksiyonları, IP adresleri (özel IP'ler olmalı).
- Bilgi: İstemcinin gerçek IP'si
X-Forwarded-Forbaşlığında bulunur.
-
Ağ Yük Dengeleyici (Network Load Balancer - NLB) (v2 - Yeni Nesil):
- Katman: Katman 4 (TCP ve UDP) üzerinde çalışır.
- Destekler: TCP, TLS (güvenli TCP), UDP.
- Özellikler:
- Saniyede milyonlarca isteği işleyebilir.
- Ultra düşük gecikme süresi.
- Her AZ için bir statik IP'ye sahiptir ve Elastic IP atamayı destekler.
- Kullanım Alanları: Aşırı performans gerektiren, TCP veya UDP trafiği olan durumlar için kullanılır.
- Hedef Grupları: EC2 örnekleri, IP adresleri (özel IP'ler olmalı), Uygulama Yük Dengeleyiciler.
-
Ağ Geçidi Yük Dengeleyici (Gateway Load Balancer - GWLB) (v2 - Yeni Nesil):
- Katman: Katman 3 (Ağ Katmanı) üzerinde çalışır (IP Protokolü).
- Amaç: Üçüncü taraf ağ sanal cihazlarının (güvenlik duvarları, saldırı tespit sistemleri vb.) dağıtımını, ölçeklendirilmesini ve yönetimini sağlar.
- Özellikler: Şeffaf Ağ Geçidi ve Yük Dengeleyici işlevlerini birleştirir.
- Protokol: GENEVE protokolünü (port 6081) kullanır.
- Hedef Grupları: EC2 örnekleri, IP adresleri (özel IP'ler olmalı).
2.5. Yük Dengeleyici Güvenlik Grupları
- Kullanıcılardan yük dengeleyiciye HTTPS/HTTP trafiğine izin verilir.
- Yük dengeleyiciden EC2 örneklerine giden HTTP trafiği, yalnızca yük dengeleyiciden gelmesine izin verecek şekilde kısıtlanır.
2.6. Gelişmiş Yük Dengeleyici Özellikleri
-
Yapışkan Oturumlar (Sticky Sessions) 🍪:
- Aynı istemcinin her zaman yük dengeleyicinin arkasındaki aynı örneğe yönlendirilmesini sağlar.
- CLB, ALB ve NLB için çalışır.
- Kullanım Alanı: Kullanıcının oturum verilerini kaybetmemesini sağlamak.
- Çerez Türleri: Uygulama tabanlı (hedef tarafından oluşturulan özel çerezler veya ELB tarafından oluşturulan AWSALBAPP), Süre tabanlı (ELB tarafından oluşturulan AWSALB/AWSELB).
-
Bölgeler Arası Yük Dengeleme (Cross-Zone Load Balancing) 🌍:
- Yük dengeleyici örneklerinin, tüm Erişilebilirlik Alanlarındaki kayıtlı örnekler arasında trafiği eşit şekilde dağıtmasını sağlar.
- ALB: Varsayılan olarak etkindir ve bölgeler arası veri transferi için ücret alınmaz.
- NLB & GWLB: Varsayılan olarak devre dışıdır; etkinleştirilirse bölgeler arası veri transferi için ücret alınır.
- CLB: Varsayılan olarak devre dışıdır; etkinleştirilirse bölgeler arası veri transferi için ücret alınmaz.
-
SSL/TLS Sertifikaları 🔒:
- İstemcileriniz ile yük dengeleyiciniz arasındaki trafiğin şifrelenmesini sağlar (aktarım halindeki şifreleme).
- SSL: Secure Sockets Layer (eski), TLS: Transport Layer Security (yeni).
- Sertifikalar AWS Certificate Manager (ACM) kullanılarak yönetilebilir veya kendi sertifikalarınız yüklenebilir.
- HTTPS dinleyicisi: Varsayılan bir sertifika belirtilmeli, birden çok alan adını desteklemek için isteğe bağlı sertifikalar eklenebilir.
- SNI (Server Name Indication): Birden çok SSL sertifikasını tek bir sunucuya yükleme sorununu çözer. İstemcinin hedef sunucunun ana bilgisayar adını belirtmesini gerektirir.
- ALB ve NLB tarafından desteklenir. CLB tarafından desteklenmez.
-
Bağlantı Boşaltma (Connection Draining) / Kayıt Silme Gecikmesi (Deregistration Delay) ⏳:
- Bir örnek kayıttan kaldırılırken veya sağlıksız hale gelirken "devam eden isteklerin" tamamlanması için tanınan süredir.
- Kayıttan kaldırılan EC2 örneğine yeni istek göndermeyi durdurur.
- 1 ila 3600 saniye arasında ayarlanabilir (varsayılan: 300 saniye).
3. Otomatik Ölçeklendirme Grupları (Auto Scaling Groups - ASG)
3.1. ASG Nedir ve Neden Kullanılır? 📈
Otomatik Ölçeklendirme Grupları (ASG), web siteleriniz ve uygulamalarınız üzerindeki değişen yüke yanıt vermek üzere tasarlanmıştır.
- Amaçları:
- Artan yüke uyum sağlamak için EC2 örnekleri eklemek (dışarı ölçeklendirme).
- Azalan yüke uyum sağlamak için EC2 örnekleri kaldırmak (içeri ölçeklendirme).
- Minimum ve maksimum sayıda EC2 örneğinin her zaman çalışır durumda olmasını sağlamak.
- Yeni örnekleri bir yük dengeleyiciye otomatik olarak kaydetmek.
- Önceki bir örnek sonlandırıldığında (örn. sağlıksızsa) yeni bir EC2 örneği yeniden oluşturmak.
- Maliyet: Temel EC2 örnekleri için ödeme yapıldığı sürece ASG'ler ücretsizdir.
3.2. ASG Nitelikleri
Bir ASG, örnek yapılandırma detaylarını bir Başlatma Şablonu (Launch Template) kullanarak tanımlar:
- AMI + Örnek Türü
- EC2 Kullanıcı Verileri
- EBS Birimleri
- Güvenlik Grupları
- SSH Anahtar Çifti
- EC2 Örnekleri için IAM Rolleri
- Ağ + Alt Ağ Bilgileri
- Yük Dengeleyici Bilgileri
- Minimum Boyut / Maksimum Boyut / Başlangıç Kapasitesi
3.3. Ölçeklendirme Politikaları 1️⃣ 2️⃣ 3️⃣
ASG'ler, CloudWatch alarmlarına dayalı olarak ölçeklenebilir.
- Dinamik Ölçeklendirme:
- Hedef İzleme Ölçeklendirme (Target Tracking Scaling): Kurulumu basittir. Örnek: ASG CPU ortalamasının %40 civarında kalmasını istiyorum.
- Basit / Adım Ölçeklendirme (Simple / Step Scaling): Bir CloudWatch alarmı tetiklendiğinde (örn. CPU > %70), 2 birim ekle; (örn. CPU < %30), 1 birim kaldır.
- Zamanlanmış Ölçeklendirme (Scheduled Scaling): Bilinen kullanım modellerine göre ölçeklendirmeyi önceden tahmin eder. Örnek: Cuma günleri saat 17:00'de minimum kapasiteyi 10'a çıkar.
- Tahmine Dayalı Ölçeklendirme (Predictive Scaling): Yükü sürekli olarak tahmin eder ve ölçeklendirmeyi önceden planlar.
3.4. Ölçeklendirme İçin İyi Metrikler
- CPUUtilization: Örneklerinizdeki ortalama CPU kullanımı.
- RequestCountPerTarget: EC2 örneği başına istek sayısının sabit kalmasını sağlamak için.
- Average Network In / Out: Uygulamanız ağa bağlıysa.
- Herhangi bir özel metrik (CloudWatch kullanarak gönderdiğiniz).
3.5. Ölçeklendirme Soğuma Süreleri (Scaling Cooldowns) 🧊
- Bir ölçeklendirme etkinliği gerçekleştikten sonra, varsayılan olarak 300 saniye süren bir soğuma süresi başlar.
- Bu süre zarfında, ASG ek örnek başlatmaz veya sonlandırmaz (metriklerin stabilize olmasına izin vermek için).
- Tavsiye: İstekleri daha hızlı sunmak ve soğuma süresini azaltmak için kullanıma hazır bir AMI kullanın.
Sonuç
Özetle, ölçeklenebilirlik ve yüksek erişilebilirlik, modern bulut tabanlı uygulamaların temel gereksinimleridir. Yük dengeleyiciler, trafiği verimli dağıtarak ve arızalara karşı dayanıklılık sağlayarak bu hedeflere ulaşmada kritik bir rol oynar. Otomatik Ölçeklendirme Grupları ise, değişen iş yüklerine dinamik olarak uyum sağlayarak kaynak kullanımını optimize eder ve sürekli hizmet sunumunu garanti eder. Bu teknolojilerin birleşimi, uygulamaların hem performanslı hem de güvenilir olmasını temin eder.








