CDN dan [foydalanmang]

Sayt tezligini optimallashtirish uchun deyarli har bir maqola yoki vositada "CDN-dan foydalanish" oddiy bandi mavjud. Umuman olganda, CDN kontentni etkazib berish tarmog'i yoki kontentni etkazib berish tarmog'idir. Biz Method Laboratoriyasida mijozlarning ushbu mavzu bo'yicha savollariga tez-tez duch kelamiz; ularning ba'zilari o'zlarining CDNlarini faollashtiradi. Ushbu maqolaning maqsadi CDN saytni yuklash tezligi nuqtai nazaridan nimani ta'minlashi mumkinligini, qanday muammolar paydo bo'lishi mumkinligini va qaysi hollarda CDN dan foydalanish oqlanishini tushunishdir.

CDN dan [foydalanmang]

Rasmda belgilangan kechikishlar CDN dan foydalanish bilan bog'liq.

Biroz tarix

Ko'pgina texnologiyalar singari, CDNlar ham zarurat tufayli paydo bo'lgan. Internet foydalanuvchilari orasida Internet-kanallarning rivojlanishi bilan onlayn video xizmatlari paydo bo'ldi. Tabiiyki, video kontenti oddiy veb-sayt tarkibiga (rasmlar, matn va CSS yoki JS kodi) nisbatan ko'proq tarmoqli kengligi buyurtmalarini talab qiladi.

Bitta serverdan ko'plab mijozlarga parallel ravishda video oqimni translyatsiya qilishga urinayotganda, serverning Internet-kanali muammoga aylanadi. Odatdagidek server kanalini yopish uchun bir necha ming ip yetarli. Albatta, boshqa resurs cheklovlari ham bo'lishi mumkin, ammo ular hozir muhim emas. Bundan tashqari, server kanalini kengaytirish juda qimmat (va ba'zan imkonsiz) va amaliy emasligi ham muhimdir. Eshittirishlar paytida kanalga yuklanish davriy bo'ladi.

Shaxsiy serverning kanalini cheklash muammosi CDN tomonidan mukammal hal qilinadi. Mijozlar to'g'ridan-to'g'ri serverga emas, balki CDN tarmog'idagi tugunlarga ulanadi. Ideal vaziyatda server bitta oqimni CDN tuguniga yuboradi va keyin tarmoq ushbu oqimni ko'plab foydalanuvchilarga etkazish uchun o'z resurslaridan foydalanadi. Iqtisodiy nuqtai nazardan, biz faqat haqiqatda iste'mol qilingan resurslar uchun to'laymiz (bu tarmoqli kengligi yoki trafik bo'lishi mumkin) va xizmatimizning ajoyib miqyosiga ega bo'lamiz. Og'ir kontentni etkazib berish uchun CDN-dan foydalanish to'liq oqlangan va mantiqiydir. Shuni ta'kidlash kerakki, ushbu sohadagi eng yirik o'yinchilar (masalan, Netflix) yirik tijorat CDN'laridan (Akamai, Cloudflare, Fastly va boshqalar) foydalanish o'rniga o'zlarining CDN-larini qurmoqdalar.

Internetning rivojlanishi bilan veb-ilovalarning o'zi ham murakkab va murakkab bo'lib qoldi. Yuklash tezligi muammosi birinchi o'ringa chiqdi. Veb-sayt tezligi ishqibozlari veb-saytlarning sekin yuklanishiga olib keladigan bir nechta asosiy muammolarni tezda aniqladilar. Ulardan biri tarmoqdagi kechikishlar edi (RTT - aylanma safar vaqti yoki ping vaqti). Kechikishlar veb-saytni yuklashda ko'plab jarayonlarga ta'sir qiladi: TCP ulanishini o'rnatish, TLS seansini boshlash, har bir alohida resursni yuklash (rasm, JS fayli, HTML hujjati va boshqalar).

Muammo HTTP/1.1 protokolidan foydalanganda (SPDY, QUIC va HTTP/2 paydo bo'lishidan oldin bu yagona variant edi) brauzerlar bitta xostga 6 dan ortiq bo'lmagan TCP ulanishlarini ochganligi bilan yanada og'irlashdi. Bularning barchasi ulanishning uzilishiga va kanal o'tkazish qobiliyatidan samarasiz foydalanishga olib keldi. Muammo qisman domenni taqsimlash orqali hal qilindi - ulanishlar soni bo'yicha cheklovni engib o'tish uchun qo'shimcha xostlar yaratish.

Bu erda CDN ning ikkinchi qobiliyati paydo bo'ladi - nuqtalarning ko'pligi va tugunlarning foydalanuvchiga yaqinligi tufayli kechikishni kamaytirish (RTT). Bu erda masofa hal qiluvchi rol o'ynaydi: yorug'lik tezligi cheklangan (optik tolada taxminan 200 000 km / sek). Bu shuni anglatadiki, har 1000 km sayohat RTT ga 5 ms kechikish yoki 10 ms qo'shadi. Bu uzatish uchun zarur bo'lgan minimal vaqt, chunki oraliq uskunada ham kechikishlar mavjud. CDN odatda o'z serverlarida ob'ektlarni qanday keshlashni biladi, shuning uchun biz CDN orqali bunday ob'ektlarni yuklashdan foyda olishimiz mumkin. Buning uchun zarur shartlar: ob'ektning keshda mavjudligi, CDN-ning foydalanuvchiga yaqinligi veb-ilova serveri (original server) bilan solishtirganda. CDN tugunining geografik yaqinligi past kechikishni kafolatlamasligini tushunish muhimdir. Mijoz va CDN o'rtasidagi marshrutlash mijoz boshqa mamlakatdagi va, ehtimol, boshqa qit'adagi xostga ulanadigan tarzda tuzilishi mumkin. Bu erda aloqa operatorlari va CDN xizmati o'rtasidagi munosabatlar (peering, ulanishlar, IXda ishtirok etish va boshqalar) va CDNning o'zi trafikni yo'naltirish siyosati o'ynaydi. Misol uchun, Cloudflare, ikkita dastlabki rejadan (bepul va arzon) foydalanganda, eng yaqin xostdan kontentni yetkazib berishga kafolat bermaydi - minimal narxga erishish uchun xost tanlanadi.

Ko'pgina etakchi Internet-kompaniyalar (veb-ishlab chiquvchilar va xizmat egalari) yuklash tezligi va veb-sayt ishlashi mavzusiga jamoatchilik qiziqishini jalb qiladi. Ushbu kompaniyalar orasida Yahoo (Yslow vositasi), AOL (WebPageTest) va Google (Page Speed ​​​​Insights xizmati) saytlarni tezlashtirish bo'yicha o'z tavsiyalarini ishlab chiqmoqda (birinchi navbatda ular mijozlarni optimallashtirish bilan bog'liq). Keyinchalik veb-sayt tezligini tekshirish uchun yangi vositalar paydo bo'ladi, ular veb-sayt tezligini oshirish bo'yicha maslahatlar ham beradi. Ushbu xizmatlar yoki plaginlarning har biri doimiy tavsiyaga ega: "CDN-dan foydalaning." Tarmoqning kechikishining qisqarishi odatda CDN ta'sirini tushuntirish sifatida keltiriladi. Afsuski, hamma ham CDN ning tezlashuv effektiga qanday erishilganligini va uni qanday o'lchash mumkinligini aniq tushunishga tayyor emas, shuning uchun tavsiya e'tiqodga asoslangan va postulat sifatida ishlatiladi. Darhaqiqat, barcha CDNlar teng yaratilmagan.

Bugungi kunda CDN dan foydalanish

CDN-lardan foydalanishning foydaliligini baholash uchun ularni tasniflash kerak. Endi amalda nimani topish mumkin (qavs ichidagi misollar, albatta, to'liq emas):

  1. JS kutubxonalarini tarqatish uchun bepul CDN (MaxCDN, Google. Yandex).
  2. Mijozlarni optimallashtirish xizmatlarining CDN (masalan, shriftlar uchun Google Fonts, Cloudinary, tasvirlar uchun Cloudimage).
  3. CMS-da statik va resurslarni optimallashtirish uchun CDN (Bitrix, WordPress va boshqalarda mavjud).
  4. Umumiy maqsadli CDN (StackPath, CDNVideo, NGENIX, Megafon).
  5. Veb-saytlarni tezlashtirish uchun CDN (Cloudflare, Imperva, Airi).

Ushbu turlarning asosiy farqi CDN orqali trafikning qancha qismi o'tishidir. 1-3 turlar tarkibning faqat bir qismini etkazib berishdir: bir so'rovdan bir necha o'nlabgacha (odatda rasmlar). 4 va 5-turlar CDN orqali trafikni to'liq proksilashdir.

Amalda, bu saytni yuklash uchun ishlatiladigan ulanishlar sonini anglatadi. HTTP/2 yordamida biz istalgan miqdordagi so'rovlarni qayta ishlash uchun xostga bitta TCP ulanishidan foydalanamiz. Agar biz resurslarni asosiy xost (kelib chiqishi) va CDN ga ajratsak, u holda so'rovlarni bir nechta domenlar bo'ylab tarqatish va bir nechta TCP ulanishlarini yaratish kerak bo'ladi. Eng yomon holat: DNS (1 RTT) + TCP (1 RTT) + TLS (2-3 RTT) = 6-7 RTT. Ushbu formulada qurilmaning radiokanalini faollashtirish uchun mobil tarmoqlardagi kechikishlar (agar u faol bo'lmasa) va uyali aloqa minorasidagi kechikishlar hisobga olinmaydi.

Saytning yuklash sharsharasida u qanday ko'rinadi (CDN ga ulanish uchun kechikishlar RTT 150 ms da ta'kidlangan):

CDN dan [foydalanmang]

Agar CDN barcha sayt trafigini qamrab olsa (uchinchi tomon xizmatlaridan tashqari), biz qo'shimcha xostlarga ulanishdagi kechikishlarni tejab, bitta TCP ulanishidan foydalanishimiz mumkin. Albatta, bu HTTP/2 ulanishlariga tegishli.

Keyingi farqlar ma'lum bir CDN-ning funksionalligi bilan belgilanadi - birinchi tur uchun u faqat statik faylni joylashtiradi, beshinchisi uchun optimallashtirish maqsadida sayt tarkibining bir nechta turlarini o'zgartiradi.

Veb-saytni tezlashtirish uchun CDN imkoniyatlari

Keling, CDN ning alohida turlarining funksionalligidan qat'i nazar, saytlarni tezlashtirish uchun CDN imkoniyatlarining to'liq spektrini tavsiflaymiz va keyin ularning har birida nima amalga oshirilganligini ko'rib chiqamiz.

1. Matn resurslarini siqish

Eng asosiy va tushunarli xususiyat, lekin ko'pincha yomon amalga oshiriladi. Barcha CDN-lar siqilish mavjudligini tezlashtirish xususiyati sifatida e'lon qiladi. Ammo batafsilroq ko'rib chiqsangiz, kamchiliklar aniq bo'ladi:

  • dinamik siqish uchun past darajalardan foydalanish mumkin - 5-6 (masalan, gzip uchun maksimal 9);
  • statik siqish (keshdagi fayllar) qo'shimcha funktsiyalardan foydalanmaydi (masalan, zopfi yoki 11 darajali brotli)
  • samarali brotli siqish uchun hech qanday yordam yo'q (gzip bilan solishtirganda taxminan 20% tejash).

Agar siz CDN-dan foydalansangiz, quyidagi fikrlarni ko'rib chiqishga arziydi: CDN-dan kelgan faylni oling, uning siqilgan hajmini yozib oling va taqqoslash uchun uni qo'lda siqib qo'ying (masalan, brotli yordami bilan ba'zi onlayn xizmatlardan foydalanishingiz mumkin. vsszhat.rf).

2. Mijoz keshlash sarlavhalarini o'rnatish

Bundan tashqari, oddiy tezlashtirish xususiyati: mijoz (brauzer) tomonidan kontentni keshlash uchun sarlavhalarni qo'shing. Eng joriy sarlavha kesh-nazorat, eskirgan sarlavha muddati tugadi. Bundan tashqari, Etag dan foydalanish mumkin. Asosiysi, kesh-nazorat qilishning maksimal yoshi etarlicha katta (bir oy yoki undan ko'p).Agar siz resursni iloji boricha qattiqroq keshlashga tayyor bo'lsangiz, o'zgarmas variantni qo'shishingiz mumkin.

CDN-lar maksimal yosh qiymatini pasaytirishi mumkin, bu esa foydalanuvchini statik tarkibni tez-tez qayta yuklashga majbur qiladi. Bu nima bilan bog'liqligi aniq emas: tarmoqdagi trafikni oshirish yoki keshni qanday tiklashni bilmagan saytlar bilan muvofiqlikni oshirish istagi. Masalan, Cloudflare sarlavhasining standart kesh vaqti 1 soatni tashkil qiladi, bu o'zgarmas statik ma'lumotlar uchun juda past.

3. Tasvirni optimallashtirish

CDN tasvirlarni keshlash va ularga xizmat ko'rsatish funktsiyalarini o'z zimmasiga olganligi sababli, ularni CDN tomonida optimallashtirish va foydalanuvchilarga ushbu shaklda xizmat qilish mantiqan to'g'ri keladi. Keling, darhol band qilaylik, bu xususiyat faqat CDN 2, 3 va 5 turlari uchun mavjud.

Tasvirlarni turli yo'llar bilan optimallashtirishingiz mumkin: ilg'or siqish formatlaridan (masalan, WebP), samaraliroq kodlovchilardan (MozJPEG) foydalanish yoki shunchaki keraksiz metama'lumotlarni tozalash.

Umuman olganda, bunday optimallashtirishning ikki turi mavjud: sifatni yo'qotish bilan va sifatni yo'qotmasdan. CDN'lar odatda tasvir sifati o'zgarishi haqida mijozlarning shikoyatlarini oldini olish uchun yo'qotishsiz optimallashtirishdan foydalanishga intiladi. Bunday sharoitda daromad minimal bo'ladi. Aslida, ko'pincha JPEG sifat darajasi zarur bo'lganidan ancha yuqori bo'ladi va siz foydalanuvchi tajribasini buzmasdan pastroq sifat darajasi bilan xavfsiz tarzda qayta siqishingiz mumkin. Boshqa tomondan, barcha mumkin bo'lgan veb-ilovalar uchun sifat va sozlamalar darajasini universal aniqlash qiyin, shuning uchun CDN-lar kontekstni (tasvirlarning maqsadi, veb-ilova turi) hisobga olgan holda qo'llanilishi mumkin bo'lganlarga nisbatan ko'proq konservativ sozlamalardan foydalanadi. , va boshqalar.)

4. TLS ulanishini optimallashtirish

Bugungi kunda trafikning aksariyati TLS ulanishlari orqali o'tadi, ya'ni biz TLS muzokaralariga qo'shimcha vaqt sarflaymiz. Yaqinda bu jarayonni tezlashtirish uchun yangi texnologiyalar ishlab chiqildi. Masalan, bu EC kriptografiyasi, TLS 1.3, seans keshi va chiptalar, apparat shifrlash tezlashuvi (AES-NI) va boshqalar. TLSni to'g'ri sozlash ulanish vaqtini 0-1 RTT ga qisqartirishi mumkin (DNS va TCP ni hisobga olmaganda).

Zamonaviy dasturiy ta'minot bilan bunday amaliyotlarni o'zingiz amalga oshirish qiyin emas.

Hamma CDN'lar TLSning eng yaxshi amaliyotlarini qo'llamaydi; buni TLS ulanish vaqtini o'lchash orqali tekshirishingiz mumkin (masalan, Webpagetest-da). Yangi ulanish uchun ideal - 1RTT, 2RTT - o'rtacha daraja, 3RTT va undan ko'p - yomon.

Shuni ham ta'kidlash kerakki, hatto CDN darajasida TLS dan foydalanilganda ham bizning veb-ilovamiz bo'lgan server TLS-ni qayta ishlashi kerak, lekin CDN tomonidan, chunki server va CDN o'rtasidagi trafik umumiy tarmoq orqali o'tadi. Eng yomon holatda, biz ikki marta TLS ulanish kechikishlarini olamiz (birinchi CDN xostiga, ikkinchisi u va serverimiz o'rtasida).

Ba'zi ilovalar uchun xavfsizlik masalalariga e'tibor qaratish lozim: trafik odatda CDN tugunlarida shifrlangan va bu trafikni ushlab turish uchun potentsial imkoniyatdir. Trafikni oshkor qilmasdan ishlash opsiyasi odatda qo'shimcha haq evaziga yuqori tarif rejalarida taklif etiladi.

5. Ulanish kechikishlarini kamaytiring

Hamma gapiradigan CDN ning asosiy afzalligi: CDN xosti va foydalanuvchi o'rtasidagi past kechikish (kamroq masofa). Xostlar foydalanuvchilarning to'planish joylarida (shaharlar, trafik almashinuv punktlari va boshqalar) joylashgan geografik taqsimlangan tarmoq arxitekturasini yaratish orqali erishiladi.

Amalda, turli tarmoqlar uchun ustuvorliklar muayyan hududlarda bo'lishi mumkin. Misol uchun, Rossiya CDNlari Rossiyada ko'proq bo'lish nuqtalariga ega bo'ladi. Amerikaliklar birinchi navbatda AQShda tarmoqni rivojlantiradilar. Misol uchun, eng yirik CDN Cloudflare-dan biri Rossiyada - Moskva va Sankt-Peterburgda faqat 2 ballga ega. Ya'ni, biz Moskvada to'g'ridan-to'g'ri joylashtirish bilan solishtirganda maksimal taxminan 10 ms kechikish vaqtini tejashimiz mumkin.

G'arbiy CDNlarning aksariyati Rossiyada umuman nuqtalarga ega emas. Ularga ulanish orqali siz faqat rus auditoriyasi uchun kechikishlarni oshirishingiz mumkin.

6. Kontentni optimallashtirish (kichiklashtirish, tarkibiy o'zgarishlar)

Eng murakkab va texnologik jihatdan ilg'or nuqta. Yetkazib berish paytida tarkibni o'zgartirish juda xavfli bo'lishi mumkin. Agar biz minimallashtirishni olsak ham: manba kodini qisqartirish (qo'shimcha bo'shliqlar, ahamiyatsiz tuzilmalar va boshqalar tufayli) uning ishlashiga ta'sir qilishi mumkin. Agar biz jiddiyroq o'zgarishlar haqida gapiradigan bo'lsak - JS kodini HTML oxiriga ko'chirish, fayllarni birlashtirish va hokazo - saytning funksionalligini buzish xavfi yanada yuqori.

Shuning uchun, faqat ba'zi 5 turdagi CDNlar buni qiladi. Albatta, ishlarni tezlashtirish uchun zarur bo'lgan barcha o'zgarishlarni avtomatlashtirish mumkin bo'lmaydi - qo'lda tahlil qilish va optimallashtirish kerak. Masalan, foydalanilmagan yoki takroriy kodni olib tashlash qo'lda bajariladigan vazifadir.

Qoida tariqasida, bunday optimallashtirishlarning barchasi sozlamalar tomonidan boshqariladi va eng xavflilari sukut bo'yicha o'chirib qo'yiladi.

CDN turi bo'yicha tezlashtirish imkoniyatlarini qo'llab-quvvatlash

Shunday qilib, keling, har xil turdagi CDNlar qanday tezlashtirish imkoniyatlarini taqdim etishini ko'rib chiqaylik.

Qulaylik uchun biz tasnifni takrorlaymiz.

  1. JS kutubxonalarini tarqatish uchun bepul CDN (MaxCDN, Google. Yandex).
  2. Mijozlarni optimallashtirish xizmatlarining CDN (masalan, shriftlar uchun Google Fonts, Cloudinary, tasvirlar uchun Cloudimage).
  3. CMS-da statik va resurslarni optimallashtirish uchun CDN (Bitrix, WordPress va boshqalarda mavjud).
  4. Umumiy maqsadli CDN (StackPath, CDNVideo, NGENIX, Megafon).
  5. Veb-saytlarni tezlashtirish uchun CDN (Cloudflare, Imperva, Airi).

Endi CDN xususiyatlari va turlarini solishtiramiz.

imkoniyat
1-toifa
2-toifa
3-toifa
4-toifa
5-toifa

Matnni siqish
+–
-
+–
+–
+

Kesh sarlavhalari
+
+
+
+
+

Rasmlar
-
+–
+–
-
+

TLS
-
-
-
+–
+

Kechikishlar
-
-
-
+
+

Mundarija
-
-
-
-
+

Ushbu jadvalda "+" to'liq qo'llab-quvvatlashni ko'rsatish uchun ishlatiladi, "-" qo'llab-quvvatlamaydi va "+-" qisman qo'llab-quvvatlanadi. Albatta, haqiqatda ushbu jadvaldan og'ishlar bo'lishi mumkin (masalan, ba'zi umumiy maqsadli CDN tasvirlarni optimallashtirish uchun xususiyatlarni amalga oshiradi), ammo umumiy fikr uchun bu foydalidir.

natijalar

Umid qilamanki, ushbu maqolani o'qib chiqqandan so'ng, saytlaringizni tezlashtirish uchun "CDN-dan foydalanish" tavsiyasi haqida aniqroq tasavvurga ega bo'lasiz.

Har qanday biznesda bo'lgani kabi, siz biron bir xizmatning marketing va'dalariga ishonolmaysiz. Ta'sirni real sharoitlarda o'lchash va sinab ko'rish kerak. Agar siz allaqachon CDN dan foydalanayotgan bo'lsangiz, maqolada tasvirlangan mezonlardan foydalangan holda uning samaradorligini tekshiring.

Ayni paytda CDN dan foydalanish saytingizni yuklash vaqtini sekinlashtirayotgan bo'lishi mumkin.

Umumiy tavsiya sifatida biz quyidagilarga e'tibor qaratishimiz mumkin: auditoriyangizni o'rganing, uning geografik ko'lamini aniqlang. Agar sizning asosiy auditoriyangiz 1-2 ming kilometr radiusda to'plangan bo'lsa, uning asosiy maqsadi - kechikishni kamaytirish uchun sizga CDN kerak emas. Buning o'rniga, siz o'z serveringizni foydalanuvchilarga yaqinroq joylashtirishingiz va maqolada tasvirlangan optimallashtirishlarning ko'pini (bepul va doimiy) olish orqali uni to'g'ri sozlashingiz mumkin.

Agar auditoriyangiz haqiqatan ham geografik jihatdan taqsimlangan bo'lsa (radiusi 3000 kilometrdan ortiq), sifatli CDN-dan foydalanish haqiqatan ham foydali bo'ladi. Biroq, CDN-ni aniq nima tezlashtirishi mumkinligini oldindan tushunishingiz kerak (imkoniyatlar jadvali va ularning tavsifiga qarang). Biroq, veb-saytni tezlashtirish hali ham murakkab vazifa bo'lib qolmoqda, uni CDN-ni ulash orqali hal qilib bo'lmaydi. Yuqoridagi optimallashtirishlarga qo'shimcha ravishda, CDN-ning orqasida tezlashtirishning eng samarali vositalari qolmoqda: server qismini optimallashtirish, mijoz qismidagi ilg'or o'zgarishlar (ishlatilmagan kodni o'chirish, ko'rsatish jarayonini optimallashtirish, kontent, shriftlar, moslashuvchanlik va boshqalar bilan ishlash. )

Manba: www.habr.com

a Izoh qo'shish