Bir Content Delivery Network (CDN) içindeki proxy'ler, içeriği son kullanıcılara daha yakın önbelleğe alan, ağ isteklerini optimize eden ve trafiği dağıtık altyapı genelinde verimli biçimde dağıtan aracı sunucular olarak çalışarak içerik dağıtımını hızlandırır.
CDN mimarisinde proxy'lerin rolü
Bir CDN içinde proxy'ler temel bileşenlerdir ve başlıca edge sunucular ya da Points of Presence (PoP) biçiminde karşımıza çıkar. Bu sunucular dünya genelinde stratejik olarak dağıtılır ve içerik origin sunucuları ile son kullanıcılar arasında bir ağ katmanı oluşturur. Bir kullanıcı içerik istediğinde, DNS çözümlemesi onu genellikle içeriğin asıl barındırıcısına değil, en yakın veya en uygun CDN edge proxy'sine yönlendirir. Bu yakınlık gecikmeyi belirgin şekilde azaltır ve yüklenme sürelerini iyileştirir.
Edge proxy'ler ve Points of Presence (PoP)
Her PoP, gelen kullanıcı isteklerini karşılamak üzere tasarlanmış bir veya daha fazla proxy sunucu içerir. Bu proxy'ler basit yönlendirmenin ötesinde birçok işlev üstlenir ve hız ile güvenilirliği artırmak için içerik dağıtım zincirine etkin biçimde katılır. Temel amaçları, mümkün olduğunca içeriği edge'den sunmak ve uzaktaki origin sunuculardan veri çekme ihtiyacını en aza indirmektir.
Hızı artıran temel mekanizmalar
Proxy'ler içerik dağıtımını hızlandırmak için birkaç mekanizma kullanır:
İçeriği edge'de önbelleğe alma
Önbellekleme, CDN proxy'lerinin sağladığı en büyük hız kazancıdır. Bir edge proxy, daha önce çektiği bir içeriğe yönelik istek aldığında, origin sunucuya hiç bağlanmadan içeriği doğrudan kendi yerel deposundan sunabilir. Bu şunları azaltır:
* Round-Trip Time (RTT): bir isteğin kullanıcıdan origin'e gidip geri dönmesi için geçen süre.
* Origin sunucu yükü: origin üzerindeki işlem yükünü azaltır, yavaşlamaları veya kesintileri önler.
* Bant genişliği tüketimi: origin sunucunun veri transferi maliyetlerini azaltır.
Cache hit ve cache miss:
* Cache hit: istenen içerik proxy'nin önbelleğinde vardır. Proxy içeriği doğrudan sunar.
* Cache miss: istenen içerik proxy'nin önbelleğinde yoktur veya süresi dolmuştur. Proxy içeriği origin'den çeker, kullanıcıya sunar ve sonraki istekler için bir kopyasını önbelleğine kaydeder.
Önbellek geçersizleştirme:
CDN'ler önbellek tazeliğini çeşitli stratejilerle yönetir:
* Time-To-Live (TTL): içerik önceden tanımlanmış bir süre boyunca önbellekte tutulur.
* Önbellek başlıkları: Cache-Control ve Expires gibi HTTP başlıkları önbellekleme davranışını belirler.
* Manuel temizleme (purge): yöneticiler içeriği CDN genelinde önbellekten açıkça kaldırabilir.
* API ile geçersizleştirme: otomatik sistemler içerik güncellendiğinde purge tetikler.
Yük dengeleme ve trafik dağıtımı
CDN'deki proxy'ler aynı zamanda yük dengeleyici olarak çalışır ve gelen kullanıcı isteklerini birden çok kaynağa dağıtır. Bu şunları kapsayabilir:
* İstekleri tek bir PoP içindeki birden çok sunucuya dağıtmak: hiçbir sunucunun aşırı yüklenmemesini sağlar.
* İstekleri birden çok origin sunucuya dağıtmak: CDN içeriği birkaç origin'den çekecek şekilde yapılandırılmışsa.
* Trafiği en az kullanılan veya coğrafi olarak en yakın PoP'a yönlendirmek: DNS tabanlı yönlendirme veya IP Anycast ile yapılır.
Yük dengeleme algoritmaları kaynakların en verimli kullanımını sağlar ve darboğazları önler; yoğun trafikte bile tutarlı dağıtım hızlarını korur. Yaygın algoritmalar arasında Round Robin, Least Connections ve IP Hash bulunur.
İçerik optimizasyonu ve sıkıştırma
CDN proxy'leri, dosya boyutlarını küçültmek için anlık içerik optimizasyonu ve sıkıştırma yapabilir; bu da doğrudan daha hızlı indirme süresi demektir.
* Sıkıştırma: origin daha önce yapmadıysa, proxy'ler metin tabanlı kaynaklara (HTML, CSS, JavaScript) Gzip veya Brotli sıkıştırması uygulayabilir.
* Görsel optimizasyonu: bazı CDN'ler edge proxy tarafından yürütülen yeniden boyutlandırma, format dönüştürme (örneğin WebP) ve kalite düşürme gibi görsel işleme hizmetleri sunar.
* Minification: işlevi değiştirmeden koddan gereksiz karakterleri kaldırma.
Gzip sıkıştırması için Nginx proxy yapılandırması örneği:
http {
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}
Protokol optimizasyonu
Proxy'ler, kullanıcı ile edge arasında ve bazen edge ile origin arasında modern, daha hızlı iletişim protokollerinin kullanılmasını sağlar.
* HTTP/2 ve HTTP/3 (QUIC): bu protokoller çoğullama (tek bağlantı üzerinden birden çok istek), başlık sıkıştırma ve server push sunarak HTTP/1.1'e kıyasla gecikmeyi belirgin şekilde azaltır. CDN proxy'leri, origin'in yeteneklerinden bağımsız olarak kullanıcı bağlantılarını çoğu zaman bu yeni protokollerle sonlandırır.
* TCP optimizasyonu: proxy'ler, özellikle uzun mesafelerde daha hızlı bağlantı kurma ve veri aktarımı için optimize edilmiş TCP yığınları (örneğin BBR) ve ayarları kullanabilir.
Optimize edilmiş yönlendirme
CDN'ler, kullanıcı isteklerini en verimli edge proxy'ye yönlendirmek için gelişmiş yönlendirme mekanizmaları kullanır. Bu genellikle şunlara dayanır:
* Coğrafi konum: kullanıcıları en yakın PoP'a yönlendirmek.
* Ağ tıkanıklığı: trafiği aşırı yüklenmiş ağ yollarından uzaklaştırmak.
* Sunucu sağlığı: sorun yaşayan PoP'lardan veya sunuculardan kaçınmak.
Böylece kullanıcı coğrafi olarak bir PoP'a yakın olsa bile, birincil yol tıkalıysa alternatif bir yola yönlendirilir ve en iyi hız korunur.
Performansı mümkün kılan bir unsur olarak güvenlik
Veri aktarımı açısından doğrudan bir hızlandırma mekanizması olmasa da, proxy düzeyinde uygulanan güvenlik özellikleri erişilebilirliği güvence altına alarak ve performans kaybını önleyerek içerik dağıtım hızına katkı sağlar.
* DDoS azaltma: proxy'ler kötü niyetli trafiği emer ve filtreler; hizmet reddi saldırılarının origin'i veya CDN altyapısını çökertmesini engeller; aksi halde ciddi yavaşlama veya kesinti yaşanırdı.
* Web Application Firewall (WAF): yaygın web zafiyetlerine karşı koruma sağlar; uygulama kararlılığını güvence altına alır ve hizmeti kesintiye uğratıp içerik dağıtımını yavaşlatabilecek saldırıları önler.
* SSL/TLS offloading: proxy'ler işlem yükü yüksek olan SSL/TLS el sıkışmasını ve şifreleme/şifre çözme işlemlerini üstlenir; bu görevi origin sunucudan alır ve çoğu zaman daha hızlı işlem için özel donanım kullanır.
CDN bağlamında proxy türleri
Reverse proxy'ler
Bir CDN içinde kullanılan başlıca proxy türü reverse proxy'dir. Reverse proxy, bir veya daha fazla web sunucusunun önünde konumlanır ve istemcilerden gelen istekleri karşılar. İsteği uygun sunucuya iletir, sunucunun yanıtını alır ve istemciye ulaştırır. Bir CDN'de edge sunucu, origin sunucu için reverse proxy görevi görür.
CDN reverse proxy'lerinin özellikleri:
* İstemciye şeffaflık: istemciler doğrudan origin ile iletişim kurduklarını algılar.
* Önbellekleme yeteneği: statik ve dinamik içeriğin kopyalarını saklar.
* Güvenlik katmanı: saldırılara karşı ilk savunma hattını oluşturur.
* Yük dengeleme: istekleri iç kaynaklar arasında dağıtır.
* SSL/TLS sonlandırma: şifreleme/şifre çözme işlemlerini üstlenir.
Pratik uygulama: bir istek akışı örneği
example.com/image.jpg isteyen bir kullanıcıyı düşünün:
- DNS sorgusu: kullanıcının tarayıcısı
example.comiçin DNS sorgusu yapar. CDN'in DNS servisi, en yakın veya en uygun CDN edge proxy sunucusunun IP adresini döner. - Edge proxy'ye istek: kullanıcının tarayıcısı
example.com/image.jpgiçin HTTP isteğini doğrudan CDN edge proxy'sine gönderir. - Önbellek kontrolü: edge proxy, yerel önbelleğinde
image.jpgdosyasını arar.- Cache hit:
image.jpgbulunur ve geçerliyse, proxy görseli anında kullanıcıya sunar. - Cache miss:
image.jpgbulunamazsa veya süresi dolmuşsa, proxy isteği origin sunucuya (örneğinorigin.example.com) iletir.
- Cache hit:
- Origin'den çekme (cache miss durumunda): origin sunucu isteği işler ve
image.jpgdosyasını edge proxy'ye geri gönderir. - Önbellekleme ve dağıtım: edge proxy
image.jpgdosyasını alır, bir kopyasını önbelleğine kaydeder ve kullanıcıya sunar. Bu PoP'a yönlendirilen kullanıcıların sonrakiimage.jpgistekleri cache hit ile sonuçlanır ve dağıtım süresi belirgin şekilde kısalır.
Proxy önbellekleme ve optimizasyon yapılandırma örnekleri
Nginx veya Varnish gibi proxy sunucular çoğu zaman CDN PoP'ları içinde bileşen olarak kullanılır. Yapılandırmaları, içeriğin nasıl önbelleğe alınacağını ve optimize edileceğini doğrudan belirler.
Nginx proxy önbellek yapılandırma parçası:
Bu örnek, bir upstream sunucudan gelen yanıtları önbelleğe almak için temel bir Nginx yapılandırmasını gösterir.
http {
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g;
proxy_cache_key "$scheme$request_method$host$request_uri";
server {
listen 80;
server_name cdn.example.com;
location / {
proxy_pass http://origin.example.com;
proxy_cache my_cache;
proxy_cache_valid 200 302 10m; # Başarılı yanıtları 10 dakika önbellekte tut
proxy_cache_valid 404 1m; # 404 hatalarını 1 dakika önbellekte tut
add_header X-Cache-Status $upstream_cache_status; # Hata ayıklama başlığı
expires 30d; # Tarayıcı önbelleği
}
}
}
Varnish Cache yapılandırma parçası (basitleştirilmiş vcl_recv):
Varnish Cache, önbelleklemeye odaklanmış özel bir HTTP reverse proxy'dir.
vcl 4.1;
backend default {
.host = "origin.example.com";
.port = "80";
}
sub vcl_recv {
# Önbelleklenebilirliği artırmak için statik dosyalardan çerezleri kaldır
if (req.url ~ "(?i)\.(css|js|jpg|jpeg|png|gif|ico|svg|webp|woff|woff2|ttf|otf|eot)(\?.*)?$") {
unset req.http.Cookie;
}
# POST isteklerini önbelleğe alma
if (req.method == "POST") {
return (pass);
}
# Önbellekte ara
return (hash);
}
sub vcl_backend_response {
# Origin bir değer belirtmezse tüm nesneler için varsayılan TTL ayarla
if (beresp.ttl <= 0s || beresp.http.Set-Cookie || beresp.http.Vary == "*") {
set beresp.ttl = 1h; # Varsayılan olarak 1 saat önbellekte tut
}
return (deliver);
}
