CDN nedir ve neden kullanılır?

Bu flood’da CDN (Content Delivery Network)’ün ne olduğunu ve neden kullanıldığını anlatacağım.

CDN, bir web sitesinin içeriğini en düşük ağ ve işlem gecikmesi ile yani en hızlı bir şekilde kullanıcılara ulaştırmak üzere coğrafi olarak farklı bölgelerde konumlandırılmış sunucu kümesine verilen isimdir.

Birçok e-ticaret ve haber sitesi sayfa açılma süresini düşük tutabilmek için CDN kullanmaktadır. CDN üzerinden kullanıcıdan kullanıcıya genelde pek değişmeyen HTML, JS, CSS, imaj, video ve font dosyaları sunulur. CDN bu tip kaynakları origin olarak adlandırdığı asıl sunucudan (örn: milliyet․com․tr) çekerek belirli bir süre için cache’ler. Bu noktadan sonra CDN’e ilgili kaynaklar için kullanıcıların yaptığı istekler cache’lenen bu kopyadan sağlanır. Cache süresi dolduğunda origin’e yeniden yapılan isteklerle kaynaklar tazelenir.

CDN sağlayıcıları dünya üzerinde pek çok ülkede sunucular barındırarak kullanıcıların yaşayacağı ağ gecikmesini minimize ederler. Ayrıca dağıtık durumdaki sunucular ilgili sitenin veri merkezinin sıkışıklık yaşamasını da engeller.

CDN sağlayıcıları birçok web sitesine aynı sunucular üzerinde CDN hizmeti verdikleri için maliyetleri konsolide ederek düşürebilirler. Ayrıca CDN’de tutulan verinin bozulmasından dolayı bir kayıp yaşanmayacağı için CDN hizmeti için daha düşük maliyetli, merdiven altı denilebilecek veri merkezlerindeki sunucular kullanılıp maliyet iyice düşürülebilir. Web siteleri açısından bakıldığında ise CDN kullanımı ile büyük boyutlu kaynaklar veri merkezlerinden sunulmayıp veri merkezleri ve bulut sağlayıcıya ödenecek bir maliyetten kaçınılmış olur.

Sadece statik içerikten oluşan bir site kolaylıkla CDN üzerinden hizmet verebilir. Sunucu tarafında sayfa oluşturma veya api ile hizmet veren dinamik sitelerde ise CDN entegrasyonu için değişik yöntemler vardır. Uygulanabilecek temel üç yöntem aşağıda detaylandırılmıştır.

Birinci ve muhtemelen en popüler opsiyon web sitesinin ana sayfasını ve dinamik istekleri kendi veri merkezinde karşılamak, ana sayfanın HTML’i içerisinde referans verilen CSS, JS, imaj, vb kaynaklar için ise CDN adresini kullanmaktır.

Bu opsiyonda ana sayfa apex domain ya da www subdomain’inden, dinamik sayfalar www’dan ve web istekleri de api’dan sunulur. Statik kaynaklar cdn veya başka bir subdomain’den sunulabilir. cdn subdomain’inin dns kaydında CDN sağlayıcının IP’si bulunur.

İkinci ve muhtemelen daha doğru etkili olan opsiyonda birinci opsiyona ek olarak ana sayfa da CDN’de tutulur. Ana sayfa ve diğer alt sayfalarda dinamik olarak değişen Login gibi bölümler ile diğer dinamik bölümler AJAX istekleri ile veri merkezinden çekilerek sunulur.

Üçüncü opsiyon ise web sitesinin bütün trafiğini CDN’e yönlendirmek ve son kullanıcının veri merkezine direkt ulaşması yerine CDN üzerinden ulaşmasını sağlamaktır. Anlaşılacağı üzere bu yöntemde CDN bütün trafiği üzerine alarak cache’lenebilecek statik kaynakları origin sunucuya gitmeden kullanıcıya sağlayacaktır. Bu opsiyonda Cache’lenmesi mümkün olmayan dinamik sayfalar ve api isteklerini ise direkt olarak origin sunucusuna geçirilir ve gelen cevap kullanıcıya iletir.

Cloudflare ve bazı diğer global CDN sağlayıcıları tarafından desteklenen bu üçüncü yöntemin birçok avantajının yanında bazı dezavantajları da vardır. En büyük avantajı ilgili sitenin CDN entegrasyonu için resmen elini suya ve sabuna dokundurmamasıdır. Sadece DNS kaydı CDN’e yönlendirilerek işlem tamamlanabilir. Başka bir avantaj olarak da dış dünyadan sadece CDN IP’lerinin görünmesi ve dolayısıyla DDoS, SQL Injection gibi saldırılara karşı CDN sağlayıcının sunduğu korumadan faydalanılabilmesi sayılabilir.

Bu yöntemin en önemli dezavantajı HTTPS ile gelen şifrelenmiş trafiğin origin sunucuya iletilebilmesi için çözülmesinin gerekmesi, bunun da finansal ve mahrem bilgiler içeren siteler için büyük sayılacak bir güvenlik açığı riski oluşturmasıdır.

Son olarak CDN, statik içeriklerin yanı sıra kolay değişmeyen ve referans veri (örn: il, ilçe listesi) olarak adlandırılan verileri de cache’leyebilir. Benzer şekilde, bir e-ticaret sitesi, ürün kataloğu gibi değişme sıklığı daha yüksek olan referans verileri de CDN’de tutabilir ve belirli bir süreliğine (örn: 10 dakika) bu verinin CDN’den verilmesini sağlayabilir. Bu tip veriler değiştiğinde cache süresinin dolmasını beklememek için CDN üzerinde, cemiyette cache düşürme olarak bilinen işlem uygulanır ve cache yenilenmeye zorlanır.

Bir sonraki flood’da CDN’in nasıl çalıştığını Nginx’in Proxy Cache olarak kullanımı üzerinden anlatacağım.