CDN (Content Delivery Network) Nedir? Neden Kullanılır?
Güncelleme: 27 Ağustos 2019 15:41
CDN, Cloudinary, Content Delivery Network, First Contentful Paint
CDN (Content Delivery Network / İç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 / Points of Presence) ü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.
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.
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;
Yükse dosya boyutları,
Kompleks DOM ağacı,
Sunucu cevap süresine etkiyen sunucu temelli sorunlar,
Verinin taşınma hızı…
gibi maddeleri değerlendirmek mümkün. Bölgesel olarak dağıtılmış sunucular sayesinde bu süreç kontrol altında tutulabilir.
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),
DDoS (Distributed Denial of Service) koruması,
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ı 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/ya API işlemleri söz konusu ise bazı ek düzenlemeler gerekli olacaktır.
Sadece web sitesinin ve/ya 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.