CDN (Content Delivery Network) Nedir? Neden Kullanılır?
Bir web sayfası ve/veya uygulaması için arayüz bileşenleri olan CSS, JavaScript gibi olmazsa olmaz bazı kaynaklar vardır. Bu kaynaklara ek olarak, arayüzün ve içeriğin bir parçası olan görseller de yine ardıl bir öneme sahiptir.
Web sitesinin / uygulamasının yüklenme performansında bu kaynakların optimize edilmesi (Search Console) yine hem SEO hem de UX açısından oldukça kritiktir. Özellikle e-ticaret ve haber sitelerinde sayfanın yüklenme süresi hedeflerin de başarı oranını büyük oranda etkileyebilmektedir. Bu gibi amaçlarla pek çok çözüm üretilmiş ve üretilmektedir. jpegoptim ve optipng gibi araçlarla görseller sıkıştırılabilir, gulp ve grunt gibi task runner'lar veya webpack gibi modül paketleyiciler çözüm olarak değerlendirilebilecek seçeneklerden bazılarıdır. Elbette sadece bu seçeneklerle de sınırlı değiliz. Kullanılabilecek bir diğer seçeneğimiz de CDN ve bu yazıda CDN'e dair bazı detaylara değinmek istiyorum.

CDN (Content Delivery Network)
CDN (İçerik Dağıtım Ağı), web siteleri ve web uygulamalarında kullanılan kaynakların (js ve css dosyaları, görseller ve videolar gibi) istekte (request) bulunan istemciye (client) farklı konumlarda yer alan sunucular (PoP) üzerinden cevap veren servis olarak tanımlanabilir. Günümüzde CDN sistemleri daha akıllı çözümler (görsel manipülasyonu, sıkıştırma, format değiştirme vb.) de üretebilmektedirler. Daha önce, farklı yazılar dahilinde Cloudinary servisinden bahsetmiştim. İlgili yazılara bahsi geçen servis bağlamında göz atabilirsiniz.
Genellikle CDN servisleri sıklıkla değişmeyen dosyalar (HTML, JS, CSS, font, medya (fotoğraf, video, müzik vb.)) için kullanılır; Content Acceleration, Media Acceleration, Dynamic Web Acceleration. CDN servisleri bu tür kaynakları origin olarak tanımlanan asıl sunucudan çeker ve belirli bir süre için önbelleğe (cache) alır. Kullanıcılar tarafından gerçekleştirilen isteklere önbelleğe alınan kopya üzerinden cevap verilir. Önbellek süresini dolduran dosya yeniden origin üzerinden önbelleğe alınır. Bu sayede, kullanıcı isteklerine daha hızlı cevap verilebilmekte ve web sitelerin yüklenme süresi iyileştirilebilmektedir. Bu süreç genellikle (sunucunun bulunduğu bölgeler, önbellek süresi, dosya türleri ve sıkıştırma yoğunlukları vb.) kullanıcı tarafından yönetilebilmektedir.

Amazon, Hepsiburada gibi e-ticaret siteleri, Facebook, Instagram ve Twitter gibi sosyal medya platformları halihazırda sıklıkla CDN servisleri kullanmaktadırlar. Elbette harici servislerden faydalanmanın yanı sıra, servisler kendi CDN yapılarını da oluşturabilmektedirler. Böylelikle, veri merkezleri isteği gerçekleştiren kullanıcıya en yakın coğrafi bölgeye (region) en yakın sunucu üzerinden (Edge Server) dönüş sağlar ve hızlı bir şekilde etkileşim gerçekleşir. İletim sistemleri ne kadar geniş tutulursa istemciye en yakın nokta sayesinde o kadar hızlı bir şekilde dönüş sağlanabilir.
CDN Çalışma Biçimi
Bir web sayfasına veya web uygulamasına istekte bulunulduğunda, isteği gerçekleştiren istemciye hangi ağ sunucusu daha yakın ise o sunucudan dönüş sağlandığından daha önce bahsetmiştim. Bu prensip verinin önbelleğe alınması ve aynı verinin çoklu isteklerde tek bir sunucu yerine bir sunucu ağı tarafından yükün paylaştırılması amacını taşımakta. Böylelikle ziyaretçilerin en yakındaki sunucudan iletilen kaynağı görüntülemesi daha hızlı bir surfing deneyimi yaşamalarını sağlayacaktır. Elbette CDN’in sağladığı tek avantaj bu değil.
Trafik Yükünün Dengelenmesi
Varlık noktaları (PoP) çoğaltılarak trafik yükünü dağıtmak ve bant genişliğini efektif bir şekilde değerlendirmek mümkün hale gelir. Bu da erişim kolaylığı sağlayacaktır.
Hız Artırmak
First Contentful Paint süresi hemen çıkma oranına etkiyen en önemli kriterlerden biridir. Anlamlı bir içeriği görüntüleyeceğinden emin olan kullanıcı sayfanın yüklenme süresine daha sabırlı yaklaşacaktır. Diğer ihtimallerde ise oturum hızlıca sonlandırılabilir. Bu sürece etkiyen sebepler arasında şu maddeleri değerlendirilebilir;
- Dış kaynaklar,
- Yükse dosya boyutları,
- Kompleks DOM ağacı,
- Sunucu cevap süresine etkiyen sunucu temelli sorunlar,
- Verinin taşınma hızı…
Bölgesel olarak dağıtılmış sunucular sayesinde yukarıda maddeler halinde belirtilen süreçler kontrol altında tutulabilir.
Güvenlik
Bütün kaynaklar (HTML, JS, CSS dosyaları, görseller, videolar, fontlar vb.) tek bir sunucudan (origin) sağlandığında hizmet engelleme (denial-of-service) gibi kötü niyetli etkinliklere karşı da bir zaafiyet durumu ortaya çıkacaktır. Sunucuyu aşırı trafik yüklenmesiyle ortaya çıkabilecek bu tür durumlarda CDN’ler trafiği saptırabilirler. Diğer yandan, CDN’ler TLS/SSL sertifikalarını sürekli daha güncel tutarlar.
Aksaklıkların Kontrol Altına Alınması
Olası donanım arızalarında yük sunucu ağı üzerine yayılmış olacağı için bir diğer sunucu isteklere cevap vermeye devam edebilecektir. Hem sunucuya daha az yük binmesi ve hem de olası aksaklıklarda bir diğer yakın sunucunun isteklere cevap vermesi ile ziyaretçiler aksaklık yaşamadan içeriklere erişebileceklerdir.
Bir CDN servisinden faydalanmak istediğinizde şu temel kriterleri göz önünde bulundurabilirsiniz:
- Memory cache (Pull), Storage cache (Push),
- Origin shield,
- Coğrafi filtreleme,
- Log tutma,
- Caching,
- DDoS koruması,
- HTTP/2 desteği,
- Diagnostics, analiz ve bildirimler.
Bu kriterlerin yanı sıra sağlanan ek özellikler de (format dönüştürme, sıkıştırma, görsel manipülasyonu vb.) seçimlerinize etkiyebilir.
CDN Kullanımı
CDN kullanımı için bir takım düzenlemeler yapılması gerekmektedir. Öncelikle kullanmak istenen CDN servisine kayıt olunması gerekmektedir. Bir sonraki kritik işlem ise CNAME tanımlaması olacaktır. Kimi servisler sağladıkları eklentiler ile bu süreci daha pratik bir şekilde yönetebilmektedirler ya da herhangi bir entegrasyon olmaksızın, servis üzerinden upload edilen kaynaklar doğrudan içerik içerisinde sunulabilirler. Bu durumda, sadece ilgili kaynaklar CDN aracılığıyla sunulur. Aşağıda bazı popüler servislere dair bağlantılar iletiyorum, ayrıca inceleyebilirsiniz.
Peki, değerlendirme aşamasında nelere dikkat etmek gerekir?
Öncelikle ihtiyaçlarımızı net bir şekilde belirlemeliyiz. Eğer amacımız sadece statik kaynakları CDN aracılığıyla kullanmak ise işimiz oldukça kolay. Fakat, sunucu tarafında gerçekleştirilen işlemler ve/veya API işlemleri söz konusu ise bazı ek düzenlemeler gerekli olacaktır.
- Sadece web sitesinin ve/veya uygulamasının belirli sayfaları (anasayfa gibi) ve isteklere origin ile cevap verip CSS, JS, görseller, fontlar gibi kaynakları CDN aracılığıyla sunabiliriz. Bu işlem için farklı bir subdomain veya apex domain (zone apex ya da naked domain olarak da ifade edilebilir)’den faylanabiliriz. Origin üzerinden ise web isteklerine ve API işlemlerine cevap verilebilir. Bu durumda, DNS kaydında CDN servisi tarafından sunulan IP adresi yer alacaktır.
- Bir diğer yöntemde sayfalar da (anasayfa gibi) CDN üzerinden sunulur. Dinamik alanlar mevcut ise bu alanlar dinamik bir şekilde (bkz. HTTP Request) origin’den istenebilir.
- Son olarak, tüm dosyalar CDN aracılığıyla sağlanır. Bu sayede CDN tüm kaynakları önbelleğe alacak ve bu şekilde sunacaktır. Önbelleğe alınması mümkün olmayan, dinamik alanlar ve API istekleri ise doğrudan origin ile sağlanır.
Özet olarak, CDN servisleri aynı sunucu üzerinden farklı web siteleri ve web uygulamaları için ayrı kaynaklar sunabilmektedirler. Bu durum da maliyetleri oldukça düşürmektedir. Diğer yandan, donanım olarak büyük yatırımlar gerektirmeksizin çözümler üretilebilir. Bir web sitesi veya uygulaması bağlamında bakıldığında, CDN kullanımı ile barındırma maliyetleri daha efektif hale gelecektir. Tercih aşamasında, en temel kriterlerin benzeştiği durumlarda sunulan ve kullanılabilecek ek hizmetleri de bu maliyet çerçevesinde değerlendirmek gerekir. Örneğin, Transformations için ayrı bir hesaplama kullanmakta ve bunu belirli sınırlar dahilinde maliyet olarak yansıtabilmektedir. Cloudflare ise oldukça yaygın kullanımının da sağladığı avantaj ile pek çok işbirliği imkanı sunabilmekte ve ücretsiz özellikler sunabilmektedir.