CDN [kullanmayın]

Site hızını optimize etmeye yönelik hemen hemen her makale veya aracın mütevazı bir "CDN kullanın" maddesi vardır. Genel olarak CDN, bir içerik dağıtım ağı veya içerik dağıtım ağıdır. Biz Method Lab'de sıklıkla müşterilerin bu konuyla ilgili sorularıyla karşılaşıyoruz; bazıları kendi CDN'lerini etkinleştiriyor. Bu makalenin amacı, site yükleme hızı açısından bir CDN'nin neler sağlayabileceğini, hangi sorunların ortaya çıkabileceğini ve hangi durumlarda CDN kullanımının haklı olduğunu anlamaktır.

CDN [kullanmayın]

Resimde daire içine alınan gecikmeler CDN kullanımından kaynaklanmaktadır.

Biraz tarih

Birçok teknoloji gibi CDN'ler de zorunluluktan ortaya çıktı. İnternet kullanıcıları arasında internet kanallarının gelişmesiyle birlikte çevrimiçi video hizmetleri ortaya çıktı. Doğal olarak video içeriği, normal web sitesi içeriğine (resimler, metin ve CSS veya JS kodu) kıyasla çok daha fazla bant genişliği gerektirir.

Bir sunucudan birçok istemciye paralel olarak bir video akışı yayınlamaya çalışırken, sunucunun İnternet kanalı büyük olasılıkla darboğaz haline gelecektir. Kural olarak, tipik bir sunucu kanalını tıkamak için birkaç bin iş parçacığı yeterlidir. Elbette başka kaynak sınırlamaları da olabilir ama bunlar şu anda önemli değil. Sunucu kanalını genişletmenin çok pahalı (bazen imkansız) ve pratik olmaması da önemlidir. Yayınlar sırasında kanala gelen yük döngüsel olacaktır.

Bireysel bir sunucunun kanalını sınırlama sorunu CDN tarafından mükemmel bir şekilde çözülmüştür. İstemciler doğrudan sunucuya değil, CDN ağındaki düğümlere bağlanır. İdeal durumda, sunucu CDN düğümüne bir akış gönderir ve ardından ağ, bu akışı birçok kullanıcıya iletmek için kendi kaynaklarını kullanır. Ekonomik açıdan bakıldığında, yalnızca gerçekte tüketilen kaynaklar için ödeme yaparız (bu bant genişliği veya trafik olabilir) ve hizmetimizin mükemmel ölçeklenebilirliğine sahip oluruz. Ağır içerik sunmak için CDN kullanmak tamamen haklı ve mantıklıdır. Bu alandaki en büyük oyuncuların (örneğin Netflix) büyük ticari CDN'ler (Akamai, Cloudflare, Fastly, vb.) kullanmak yerine kendi CDN'lerini oluşturduklarını belirtmekte fayda var.

Web geliştikçe web uygulamaları da daha karmaşık ve karmaşık hale geldi. Yükleme hızı sorunu ön plana çıktı. Web sitesi hızı meraklıları, web sitelerinin yavaş yüklenmesine neden olan birkaç önemli sorunu hızla tespit etti. Bunlardan biri ağ gecikmeleriydi (RTT - gidiş-dönüş süresi veya ping süresi). Gecikmeler web sitesi yüklemesindeki birçok işlemi etkiler: TCP bağlantısı kurmak, TLS oturumu başlatmak, her bir kaynağı (resim, JS dosyası, HTML belgesi vb.) yüklemek.

Sorun, HTTP/1.1 protokolü kullanılırken (SPDY, QUIC ve HTTP/2'nin ortaya çıkmasından önce bu tek seçenekti), tarayıcıların bir ana bilgisayara 6'dan fazla TCP bağlantısı açmaması gerçeğiyle daha da kötüleşti. Tüm bunlar bağlantının kesintiye uğramasına ve kanal bant genişliğinin verimsiz kullanılmasına yol açtı. Sorun, bağlantı sayısı sınırını aşmak için ek ana bilgisayarların oluşturulması anlamına gelen etki alanı parçalamayla kısmen çözüldü.

Burası CDN'nin ikinci yeteneğinin ortaya çıktığı yerdir: çok sayıda nokta ve düğümlerin kullanıcıya yakınlığı nedeniyle gecikmeyi (RTT) azaltır. Mesafe burada belirleyici bir rol oynuyor: Işığın hızı sınırlıdır (optik fiberde yaklaşık 200 km/sn). Bu, her 000 km'lik yolculuğun RTT'ye 1000 ms gecikme veya 5 ms eklediği anlamına gelir. Bu, ara ekipmanlarda da gecikmeler olduğundan iletim için gereken minimum süredir. Bir CDN genellikle nesnelerin sunucularında nasıl önbelleğe alınacağını bildiğinden, bu tür nesnelerin bir CDN aracılığıyla yüklenmesinden faydalanabiliriz. Bunun için gerekli koşullar: Nesnenin önbellekte bulunması, CDN noktasının web uygulama sunucusuna (orijin sunucusu) kıyasla kullanıcıya yakınlığı. Bir CDN düğümünün coğrafi yakınlığının düşük gecikmeyi garanti etmediğini anlamak önemlidir. İstemci ile CDN arasındaki yönlendirme, istemcinin başka bir ülkedeki ve muhtemelen başka bir kıtadaki bir ana bilgisayara bağlanacağı şekilde oluşturulabilir. Telekom operatörleri ile CDN hizmeti arasındaki ilişki (eşleme, bağlantılar, IX'a katılım vb.) ve CDN'nin trafik yönlendirme politikasının devreye girdiği yer burasıdır. Örneğin Cloudflare, iki başlangıç ​​planı (ücretsiz ve ucuz) kullanıldığında, içeriğin en yakın ana bilgisayardan teslim edilmesini garanti etmez; ana bilgisayar, minimum maliyeti elde edecek şekilde seçilecektir.

Önde gelen birçok İnternet şirketi, yükleme hızı ve web sitesi performansı konusuna kamunun ilgisini (web geliştiricileri ve hizmet sahipleri) çekmektedir. Bu şirketler arasında, siteleri hızlandırmak için kendi önerilerini geliştiren (öncelikle müşteri optimizasyonuyla ilgilidir) Yahoo (Yslow aracı), AOL (WebPageTest) ve Google (Page Speed ​​​​Insights hizmeti) bulunmaktadır. Daha sonra, web sitesi hızını artırmaya yönelik ipuçları da sağlayan yeni web sitesi hız testi araçları ortaya çıkar. Bu hizmetlerin veya eklentilerin her birinin tutarlı bir önerisi vardır: "CDN kullanın." Ağ gecikmesindeki azalma genellikle CDN'nin etkisinin bir açıklaması olarak gösterilmektedir. Ne yazık ki herkes CDN'nin hızlandırma etkisinin nasıl elde edildiğini ve nasıl ölçülebileceğini tam olarak anlamaya hazır değil, bu nedenle tavsiye inanılarak kabul ediliyor ve bir varsayım olarak kullanılıyor. Aslında tüm CDN'ler eşit yaratılmamıştır.

Bugün CDN'yi Kullanmak

CDN kullanmanın yararlılığını değerlendirmek için bunların sınıflandırılması gerekir. Şu anda pratikte neler bulunabilir (parantez içindeki örnekler elbette kapsamlı değildir):

  1. JS kitaplıklarının dağıtımı için ücretsiz CDN (MaxCDN, Google. Yandex).
  2. İstemci optimizasyonuna yönelik hizmetlerin CDN'si (örneğin, yazı tipleri için Google Fonts, görüntüler için Cloudinary, Cloudimage).
  3. CMS'de statik ve kaynak optimizasyonu için CDN (Bitrix, WordPress ve diğerlerinde mevcuttur).
  4. Genel amaçlı CDN (StackPath, CDNVideo, NGENIX, Megafon).
  5. Web sitesi hızlandırma için CDN (Cloudflare, Imperva, Airi).

Bu türler arasındaki temel fark, trafiğin ne kadarının CDN'den geçtiğidir. Tip 1-3, içeriğin yalnızca bir kısmının teslimidir: bir istekten birkaç düzineye kadar (genellikle resimler). Tip 4 ve 5, bir CDN aracılığıyla trafiğin tam proxy'sidir.

Uygulamada bu, siteyi yüklemek için kullanılan bağlantı sayısı anlamına gelir. HTTP/2 ile herhangi bir sayıda isteği işlemek için ana makineye tek bir TCP bağlantısı kullanırız. Kaynakları ana ana makineye (orijin) ve CDN'ye bölersek, istekleri birkaç etki alanına dağıtmak ve birkaç TCP bağlantısı oluşturmak gerekir. En kötü durum şudur: DNS (1 RTT) + TCP (1 RTT) + TLS (2-3 RTT) = 6-7 RTT. Bu formül, mobil ağlarda cihazın radyo kanalının etkinleştirilmesindeki gecikmeleri (etkin değilse) ve baz istasyonundaki gecikmeleri hesaba katmaz.

Sitenin yükleme şelalesinde şu şekilde görünüyor (CDN'ye bağlanma gecikmeleri RTT 150 ms'de vurgulanmıştır):

CDN [kullanmayın]

CDN tüm site trafiğini kapsıyorsa (üçüncü taraf hizmetleri hariç), tek bir TCP bağlantısı kullanabiliriz, böylece ek ana bilgisayarlara bağlanırken gecikmelerden kurtuluruz. Elbette bu HTTP/2 bağlantıları için geçerlidir.

Diğer farklılıklar belirli bir CDN'nin işlevselliğine göre belirlenir - ilk tür için sadece statik bir dosya barındırıyor, beşincisi için ise optimizasyon amacıyla çeşitli site içeriği türlerini değiştiriyor.

Web sitesi hızlandırma için CDN yetenekleri

Bireysel CDN türlerinin işlevselliğine bakılmaksızın, siteleri hızlandırmak için tüm CDN yeteneklerini açıklayalım ve ardından bunların her birinde nelerin uygulandığını görelim.

1. Metin kaynaklarının sıkıştırılması

En temel ve anlaşılır özellik olmasına rağmen çoğu zaman yeterince uygulanmamıştır. Tüm CDN'ler, hızlandırma özelliği olarak sıkıştırmanın varlığını beyan eder. Ancak daha ayrıntılı bakarsanız eksiklikler açıkça ortaya çıkar:

  • dinamik sıkıştırma için düşük dereceler kullanılabilir - 5-6 (örneğin, gzip için maksimum 9'dur);
  • statik sıkıştırma (önbellekteki dosyalar) ek özellikler kullanmaz (örneğin, derece 11'e sahip zopfi veya brotli)
  • verimli brotli sıkıştırma desteği yoktur (gzip ile karşılaştırıldığında yaklaşık %20 tasarruf sağlar).

Bir CDN kullanıyorsanız, şu birkaç noktayı kontrol etmekte fayda var: CDN'den gelen dosyayı alın, sıkıştırılmış boyutunu kaydedin ve karşılaştırma için manuel olarak sıkıştırın (örneğin, brotli desteği olan bazı çevrimiçi hizmetleri kullanabilirsiniz) vsszhat.rf).

2. İstemci önbelleğe alma başlıklarını ayarlama

Ayrıca basit bir hızlandırma özelliği: istemci (tarayıcı) tarafından içeriğin önbelleğe alınması için başlıklar ekleyin. En güncel başlık önbellek kontrolüdür, eski olanın süresi dolmuştur. Ek olarak Etag kullanılabilir. Önemli olan, önbellek kontrolünün maksimum yaşının yeterince büyük olmasıdır (bir ay veya daha fazla).Kaynağı mümkün olduğu kadar sıkı bir şekilde önbelleğe almaya hazırsanız, değişmez seçeneği ekleyebilirsiniz.

CDN'ler maksimum yaş değerini düşürerek kullanıcıyı statik içeriği daha sık yeniden yüklemeye zorlayabilir. Bunun neyle bağlantılı olduğu açık değil: ağdaki trafiği artırma veya önbelleği nasıl sıfırlayacağını bilmeyen sitelerle uyumluluğu artırma arzusu. Örneğin, varsayılan Cloudflare başlık önbellek süresi 1 saattir ve bu, değişmez statik veriler için çok düşüktür.

3. Görüntü optimizasyonu

CDN, görsellerin ön belleğe alınması ve sunulması fonksiyonlarını üstlendiği için bunların CDN tarafında optimize edilmesi ve bu formda kullanıcılara sunulması mantıklı olacaktır. Bu özelliğin yalnızca CDN tip 2, 3 ve 5 için geçerli olduğunu hemen ayırtalım.

Görüntüleri çeşitli yollarla optimize edebilirsiniz: gelişmiş sıkıştırma formatlarını (WebP gibi), daha verimli kodlayıcıları (MozJPEG) kullanarak veya gereksiz meta verileri temizleyerek.

Genel olarak bu tür optimizasyonların iki türü vardır: kalite kaybı olan ve kalite kaybı olmayan. CDN'ler genellikle görüntü kalitesindeki değişikliklerle ilgili olası müşteri şikayetlerini önlemek için kayıpsız optimizasyon kullanmaya çalışır. Bu gibi durumlarda kazanç minimum düzeyde olacaktır. Gerçekte, JPEG kalite düzeyi genellikle gerekenden çok daha yüksektir ve kullanıcı deneyiminden ödün vermeden daha düşük bir kalite düzeyiyle güvenli bir şekilde yeniden sıkıştırabilirsiniz. Öte yandan, olası tüm web uygulamaları için kalite düzeyini ve ayarları evrensel olarak belirlemek zordur, bu nedenle CDN'ler, bağlam (görüntülerin amacı, web uygulamasının türü) dikkate alınarak uygulanabilen ayarlarla karşılaştırıldığında daha muhafazakar ayarlar kullanır. , vesaire.)

4. TLS bağlantısını optimize etme

Günümüzde trafiğin çoğu TLS bağlantıları üzerinden geçiyor, bu da TLS anlaşmalarına fazladan zaman harcadığımız anlamına geliyor. Son zamanlarda bu süreci hızlandırmak için yeni teknolojiler geliştirildi. Örneğin, bu EC şifrelemesi, TLS 1.3, oturum önbelleği ve biletleri, donanım şifreleme hızlandırması (AES-NI) vb.'dir. TLS'nin doğru ayarlanması bağlantı süresini 0-1 RTT'ye (DNS ve TCP sayılmaz) azaltabilir.

Modern yazılımlarla bu tür uygulamaları kendi başınıza hayata geçirmeniz hiç de zor değil.

Tüm CDN'ler TLS'nin en iyi uygulamalarını uygulamaz; bunu TLS bağlantı süresini ölçerek (örneğin, Web sayfası testinde) kontrol edebilirsiniz. Yeni bir bağlantı için idealdir - 1RTT, 2RTT - ortalama seviye, 3RTT ve daha fazlası - kötü.

Şunu da belirtmek gerekir ki, TLS'yi CDN düzeyinde kullanırken bile, web uygulamamızın bulunduğu sunucunun da TLS'yi işlemesi gerekir, ancak CDN tarafından, çünkü sunucu ile CDN arasındaki trafik genel ağ üzerinden geçer. En kötü durumda, iki kat TLS bağlantı gecikmesi yaşarız (birincisi CDN ana bilgisayarına, ikincisi onunla sunucumuz arasında).

Bazı uygulamalar için güvenlik sorunlarına dikkat etmek önemlidir: Trafiğin şifresi genellikle CDN düğümlerinde çözülür ve bu, trafiğe müdahale için potansiyel bir fırsattır. Trafik açıklaması olmadan çalışma seçeneği genellikle ek ücret karşılığında üst tarife planlarında sunulur.

5. Bağlantı gecikmelerini azaltın

Herkesin bahsettiği CDN'nin temel avantajı: CDN ana bilgisayarı ile kullanıcı arasındaki düşük gecikme süresi (daha az mesafe). Ana bilgisayarların kullanıcıların yoğunlaştığı noktalarda (şehirler, trafik değişim noktaları vb.) konumlandırıldığı, coğrafi olarak dağıtılmış bir ağ mimarisi oluşturularak gerçekleştirilir.

Uygulamada farklı ağların öncelikleri belirli bölgelerde olabilir. Örneğin, Rus CDN'leri Rusya'da daha fazla varlık noktasına sahip olacak. Amerikalılar öncelikle ABD'deki ağı geliştirecekler. Örneğin, en büyük CDN Cloudflare'lerden birinin Rusya'da yalnızca 2 puanı var - Moskova ve St. Petersburg. Yani, Moskova'ya doğrudan yerleştirmeye kıyasla maksimum yaklaşık 10 ms gecikme tasarrufu sağlayabiliriz.

Çoğu Batı CDN'sinin Rusya'da hiçbir puanı yoktur. Onlara bağlanarak yalnızca Rus izleyicilerinizin gecikmelerini artırabilirsiniz.

6. İçerik optimizasyonu (küçültme, yapısal değişiklikler)

En karmaşık ve teknolojik olarak en gelişmiş nokta. Teslimat sırasında içeriğin değiştirilmesi çok riskli olabilir. Küçültme yapsak bile: kaynak kodunun azaltılması (ekstra boşluklar, önemsiz yapılar vb. nedeniyle) performansını etkileyebilir. Daha ciddi değişikliklerden bahsedersek (JS kodunu HTML'nin sonuna taşımak, dosyaları birleştirmek vb.) sitenin işlevselliğini bozma riski daha da yüksektir.

Bu nedenle yalnızca bazı tip 5 CDN'ler bunu yapar. Elbette işleri hızlandırmak için gereken tüm değişiklikleri otomatikleştirmek mümkün olmayacak; manuel analiz ve optimizasyon gerekiyor. Örneğin, kullanılmayan veya yinelenen kodu kaldırmak manuel bir iştir.

Kural olarak, bu tür optimizasyonların tümü ayarlar tarafından kontrol edilir ve en tehlikeli olanlar varsayılan olarak devre dışı bırakılır.

CDN türüne göre hızlandırma yetenekleri desteği

Öyleyse farklı CDN türlerinin sağladığı potansiyel hızlandırma fırsatlarına bir göz atalım.

Kolaylık sağlamak için sınıflandırmayı tekrarlıyoruz.

  1. JS kitaplıklarının dağıtımı için ücretsiz CDN (MaxCDN, Google. Yandex).
  2. İstemci optimizasyonuna yönelik hizmetlerin CDN'si (örneğin, yazı tipleri için Google Fonts, görüntüler için Cloudinary, Cloudimage).
  3. CMS'de statik ve kaynak optimizasyonu için CDN (Bitrix, WordPress ve diğerlerinde mevcuttur).
  4. Genel amaçlı CDN (StackPath, CDNVideo, NGENIX, Megafon).
  5. Web sitesi hızlandırma için CDN (Cloudflare, Imperva, Airi).

Şimdi CDN’in özelliklerini ve türlerini karşılaştıralım.

Fırsat
1 türü
2 türü
3 türü
4 türü
5 türü

Metin sıkıştırma
+–
-
+–
+–
+

Önbellek başlıkları
+
+
+
+
+

Resimler
-
+–
+–
-
+

TLS
-
-
-
+–
+

gecikme
-
-
-
+
+

Içerik
-
-
-
-
+

Bu tabloda “+” tam desteği, “-” desteğin olmadığını, “+-” ise kısmi desteği ifade etmektedir. Elbette gerçekte bu tablodan sapmalar olabilir (örneğin, bazı genel amaçlı CDN'ler görüntüleri optimize etmek için özellikler uygulayacaktır), ancak genel bir fikir olarak faydalıdır.

sonuçlar

Umarım bu makaleyi okuduktan sonra sitelerinizi hızlandırmak için “CDN kullanın” önerisi hakkında daha net bir fikir sahibi olursunuz.

Her işte olduğu gibi hiçbir hizmetin pazarlama vaatlerine inanamazsınız. Etkinin gerçek koşullar altında ölçülmesi ve test edilmesi gerekir. Zaten bir CDN kullanıyorsanız makalede açıklanan kriterleri kullanarak etkinliğini kontrol edin.

Şu anda CDN kullanmanın sitenizin yükleme süresini yavaşlatması mümkündür.

Genel bir öneri olarak şu konulara odaklanabiliriz: Hedef kitlenizi inceleyin, coğrafi kapsamını belirleyin. Ana hedef kitleniz 1-2 bin kilometrelik bir yarıçap içinde yoğunlaşmışsa, asıl amacı olan gecikmeyi azaltmak için bir CDN'ye ihtiyacınız yoktur. Bunun yerine, sunucunuzu kullanıcılarınıza daha yakın bir yere yerleştirebilir ve düzgün bir şekilde yapılandırarak makalede açıklanan optimizasyonların çoğundan (ücretsiz ve kalıcı) yararlanabilirsiniz.

Hedef kitlenizin gerçekten coğrafi olarak dağılmış olması durumunda (yarıçap 3000 kilometreden fazla), kaliteli bir CDN kullanmak gerçekten yararlı olacaktır. Ancak, CDN'nizin tam olarak neyi hızlandırabileceğini önceden anlamanız gerekir (yetenekler tablosuna ve açıklamalarına bakın). Ancak web sitesi hızlandırma hala bir CDN bağlayarak çözülemeyen karmaşık bir görev olmaya devam ediyor. Yukarıdaki optimizasyonlara ek olarak, hızlandırmanın en etkili yolu CDN'nin arkasında kalır: sunucu bölümünün optimizasyonu, istemci bölümündeki gelişmiş değişiklikler (kullanılmayan kodun kaldırılması, oluşturma sürecinin optimize edilmesi, içerikle çalışma, yazı tipleri, uyarlanabilirlik vb.) )

Kaynak: habr.com

Yorum ekle