Peaaegu igas artiklis vĂ”i tööriistas, mis kĂ€sitleb veebisaitide kiirusoptimeerimist, on tagasihoidlik punkt âkasutage CDN-iâ. Ăldiselt on CDN sisu edastamise vĂ”rk. Meie ettevĂ”ttes âMetod Labâ puutume sageli kokku klientide kĂŒsimustega selle teema kohta, mĂ”ned aktiveerivad ise oma CDN-i. Selle artikli eesmĂ€rk on uurida, mida CDN vĂ”ib pakkuda veebisaidi laadimise kiirusest lĂ€htuvalt, milliseid probleeme vĂ”ib tekkida ning millal on CDN-i kasutamine pĂ”hjendatud.
![[ĐĐ”] kasutage CDN](/wp-content/uploads/2019/10/6f32a7973856989f2adac4171a6ef9dd.jpg)
Pildil esitatud viivitused on pÔhjustatud CDN-i kasutamisest.
Veidi ajalugu
Nagu paljude tehnoloogiate puhul, tekkisid CDN-id vajaduse tÔttu. Interneti-kanalite laienedes hakkasid kasutajad juurutama online-video teenuseid. Loomulikult nÔuab videosisu vÔrreldes tavapÀrase sisu (pildid, tekst, CSS vÔi JS-kood) palju suuremat lÀbilaskevÔimet.
Kui ĂŒritate voogedastada videot korraga paljudele klientidele ĂŒhest serverist, siis tĂ”enĂ€oliselt muutub serveri Interneti-kanal kitsaskohaks. TĂŒĂŒpilise serveri kanali blokeerimiseks on sageli piisav vaid mĂ”ni tuhat voogu. Loomulikult vĂ”ivad olla ka teised ressursipiirangud, kuid hetkel need ei ole olulised. Samuti on oluline, et serveri kanali laiendamine on liiga kallis (mĂ”nikord isegi vĂ”imatu) ning see ei ole mĂ”istlik. Koormus kanalile voogedastuste ajal on tsĂŒkliline.
CDN lahendab eraldi serveri ribalaiuse probleemi suurepĂ€raselt. Klientide ĂŒhendus ei toimu otse serveriga, vaid CDN-vĂ”rgu sĂ”lmedega. Ideaalsetes tingimustes saadab server ĂŒhe voogude sĂ”lmele CDN, ning sealt edasi kasutab vĂ”rk oma ressursse selle voogude edastamiseks paljudele kasutajatele. Majanduslikust mĂ”ttes maksame ainult tegelikult kasutatud ressursside eest (see vĂ”ib olla ribalaius vĂ”i liiklus) ja saame suurepĂ€rase skaleeritavuse meie teenusele. CDN-i kasutamine raskete sisu edastamiseks on tĂ€iesti mĂ”istlik ja Ă”igustatud. Siiski vÀÀrib mĂ€rkimist, et suurimad tegijad selles valdkonnas (nt Netflix) ehitavad oma CDN-e, asemel et kasutada suuri Ă€rilisi CDN-e (Akamai, Cloudflare, Fastly jne).
Veebiarenduse edenemisega on veebirakendused muutunud keerukamaks ja raskemaks. Esiplaanile on kerkinud laadimiskiirus. Veebilehtede kiirusentusiastid on kiiresti tuvastanud mitmeid pĂ”hiseid probleeme, mis pĂ”hjustavad lehtede aeglast laadimist. Ăks neist on vĂ”rgu viivitused (RTT â round trip time ehk ping'i aeg). Viivitused mĂ”jutavad paljusid protsesse veebilehe laadimisel: TCP-ĂŒhenduse loomist, TLS-seansi algatamist, iga eraldi ressursi (pilt, JS-fail, HTML-dokument jne) laadimist.
Probleem sĂŒvenes veelgi, kuna HTTP/1.1 protokolli kasutamise korral (enne SPDY, QUIC ja HTTP/2 ilmumist oli see ainus variant) avab brauser kuni 6 TCP-ĂŒhendust ĂŒhe hostiga. See kĂ”ik tĂ”i kaasa ĂŒhenduse seiskumise ja kanalite lĂ€bilaskevĂ”ime ebaefektiivse kasutamise. Probleem lahendati osaliselt domeenide ĆĄardimisega â lisahostide loomisega ĂŒhenduste arvu piiri ĂŒletamiseks.
Siin ilmneb CDN teine suutlikkus â viivituste (RTT) vĂ€henemine, mis tuleneb suurest punktide arvust ja sĂ”lmede lĂ€hedusest kasutajale. Siin mĂ€ngib kaugus otsustavat rolli: valguse kiirus on piiratud (umbes 200 000 km/s kiudoptilises juhis). See tĂ€hendab, et iga 1000 km teekond lisab 5 ms viivitust vĂ”i 10 ms RTT-d. Need on minimaalsed edastusaja kulud, kuna on veel viivitusi vahepealses seadmes. Kuna CDN suudab tavaliselt objekte oma serveurites vahemĂ€llu salvestada, saame kasu nende objektide laadimise korraldamisest CDN-i kaudu. Selleks on vajalikud tingimused: objekti olemasolu vahemĂ€lus ja CDN-i punkti lĂ€hedus kasutajale vĂ”rreldes veebirakenduse serveriga (origin server). Oluline on mĂ”ista: CDN-i sĂ”lme geograafiline lĂ€hedus ei garanteeri madalaid viivitusi. MarĆĄrutimine kliendi ja CDN-i vahel vĂ”ib olla seatud nii, et klient ĂŒhendub serveriga teises riigis, vĂ”ib-olla isegi teisel mandril. Siin astuvad mĂ€ngu sideoperaatorite ja CDN-i teenusevaheline suhete tulemus (peerimine, ĂŒhenduste olemasolu, osalemine IX jne) ja CDN-i enda liiklusmarshrutimise poliitika. NĂ€iteks, Cloudflare, kasutades kahte algplaani (tasuta ja odav), ei garanteeri sisu edastamist lĂ€himast sĂ”lmest â hosti valik tehakse minimaalsete kulude saavutamiseks.
Paljusid juhtivaid internetifirmasid huvitab veebiarendajate ja teenuste omanike seas veebisaitide laadimise ja töötamise kiirus. Nende seas on Yahoo (Yslow tööriist), AOL (WebPageTest) ja Google (Page Speed Insights teenus), kes arendavad oma soovitusi saitide kiirendamiseks (ennekĂ”ike puudutavad need kliendi optimeerimist). Hiljem ilmuvad uusi tööriistu saidikiiruseteste, mis pakuvad samuti nĂ”uandeid saidi kiirusest. Igas neist teenustest vĂ”i pistikprogrammidest on ĂŒks ja sama soovitus: âKasutage CDN-iâ. CDN-i efekti selgitamiseks viidatakse tavaliselt vĂ”rgu viivituste vĂ€henemisele. Kahjuks ei ole kĂ”ik valmis uurima, kuidas tĂ€pselt saavutatakse CDN-i kiirusetĂ”ste ja kuidas seda mÔÔta saab, seega vĂ”etakse soovitus usaldusena ja seda kasutatakse kui postulaati. Tegelikult ei ole kĂ”ik CDN-id vĂ”rdselt kasulikud.
CDN-i kasutamine tÀna
CDN-ide rakendamise kasulikkuse hindamiseks tuleb need klassifitseerida. Mida saab praegu praktikas kohata (juhud sulgudes ei ole muidugi ammendavad):
- Tasuta CDN-i JS-raamatukogude edastamiseks (MaxCDN, Google, Yandex).
- CDN teenused kliendi optimeerimiseks (nt Google Fonts fondide jaoks, Cloudinary, Cloudimage piltide jaoks).
- CDN staatika ja ressursside optimeerimiseks CMS-is (saadaval Bitrixis, WordPressis ja teistes).
- Ăldotstarbeline CDN (StackPath, CDNVideo, NGENIX, MegaFon).
- CDN saitide kiirendamiseks (Cloudflare, Imperva, Airi).
Peamine erinevus nende tĂŒĂŒpide vahel on jĂ€rgmine: milline osa liiklusest kulgeb lĂ€bi CDN-i. TĂŒĂŒbid 1-3 edastavad ainult osa sisust: ĂŒhest pĂ€ringust kuni mitme kĂŒmne (tavaliselt piltideni). TĂŒĂŒbid 4 ja 5 on liikluse tĂ€ielik edastamine lĂ€bi CDN-i.
TĂ”lkes tĂ€hendab see ĂŒhenduste arvu, mida kasutatakse saidi laadimiseks. HTTP/2 kasutamisel kasutame ĂŒhte TCP-ĂŒhendust hostname'iga igasuguste pĂ€ringute töötlemiseks. Kui jagame ressursid pĂ”hihostiga (originaal) ja CDN-i, peame pĂ€ringud levitama mitme domeeni vahel ja looma mitu TCP-ĂŒhendust. Halvimal juhul on see: DNS (1 RTT) + TCP (1 RTT) + TLS (2-3 RTT) = 6-7 RTT. Selle valemi sees ei arvestata mobiilsete vĂ”rkude viivitusi seadme raadiokanalite aktiveerimisel (kui see ei olnud aktiivne) ning viivitusi mobiilitornis.
Nii see vĂ€lja nĂ€eb veebisaidi laadimislangu kujul (CDNi ĂŒhenduse viivitused on esile tĂ”stetud, kui RTT on 150 ms):
![[ĐĐ”] kasutage CDN](/wp-content/uploads/2019/10/d0aafcc5aa4dff6c8a97307f39c8c025.jpg)
Kui CDN katab kogu veebisaidi liikluse (vĂ€lja arvatud kolmandate osapoolte teenused), saame kasutada ĂŒhte TCP-ĂŒhendust, sÀÀstes viivitusi tĂ€iendavatehostide ĂŒhendamise pealt. Loomulikult kehtib see HTTP/2 ĂŒhenduste kohta.
Edasised erinevused sĂ”ltuvad konkreetsest CDN-funktsionaalsusest â esimese tĂŒĂŒbi puhul on see lihtsalt hĂ”bustamise. staatiline fail, viienda tĂŒĂŒbi puhul on see mitme tĂŒĂŒpi sisu kohandamine veebisaidil optimeerimise eesmĂ€rgil.
CDN-i vÔimalused veebisaidi kiirusel.
Kirjeldame CDN-i vĂ”imaluste tĂ€ielikku spektrit veebisaidi kiirusel, ilma et vaataksime ĂŒhegi CDN-i eri tĂŒĂŒbi funktsioone, ja seejĂ€rel vaatame, mis sellest on ellu viidud igas neist.
1. Tekstiresursside tihendamine.
KÔige aluslikum ja arusaadavam vÔimalus, siiski on tihti kehvasti ellu viidud. KÔik CDN-id deklareerivad tihendamise kui kiirusfunktsiooni. Kuid kui vaadata lÀhemalt, ilmnevad puudujÀÀgid:
- vĂ”ivad kasutada madalaid mÀÀrasid dĂŒnaamiliseks tihendamiseks â 5-6 (nĂ€iteks gzipi maksimaalne tase on 9);
- staatilises tihenduses (vahemÀlus olevad failid) ei kasutata tÀiendavaid vÔimalusi (nt zopfi vÔi brotli astmes 11)
- brotli efektiivne tihendamine ei ole toetatud (sÀÀst umbes 20% vÔrreldes gzip'iga).
Kui kasutate CDN-i, tasub kontrollida neid punkte: vÔtke fail, mis tuli CDN-ilt, fikseerige selle suurus tihendatud kujul ja tihendage see kÀsitsi vÔrdlemiseks (vÔite kasutada mÔnda veebiteenust brotli toetusega, nÀiteks ).
2. Kliendivahendite vahemÀlupÀiste seadistamine
Samuti lihtne funktsioon kiirusel: seadke vahemĂ€lupĂ€ised sisu kliendivahemĂ€luks (brauseri jaoks). KĂ”ige asjakohasem vahemĂ€lupĂ€is on cache-control, vananenud â expires. TĂ€iendavalt vĂ”ib kasutada Etag'i. Peamine on see, et cache-control'i max-age oleks piisavalt suur (ĂŒle kuu) ja kui olete valmis ressursi maksimaalselt rangelt vahemĂ€llu salvestama, vĂ”ite lisada vĂ”imaluse immutable.
CDN vĂ”ib alandada max-age vÀÀrtust, sundides kasutajat sagedamini staatikat uuesti laadima. Siit tulenevad pĂ”hjused: soov suurendada vĂ”rgu liiklust vĂ”i tĂ”sta ĂŒhilduvust saitidega, mis ei oska vahemĂ€lu tĂŒhjendada â ei ole selged. NĂ€iteks Cloudflare'i vahemĂ€lu aeg on vaikimisi 1 tund, mis on muutumatute staatiliste failide jaoks vĂ€ga vĂ€he.
3. Piltide optimeerimine
Kuna CDN tĂ€idab vahemĂ€lu ja piltide edastamise funktsioone, oleks mĂ”istlik optimeerida need CDN-i poolel ja sellisel kujul kasutajatele edastada. Koheselt tuleb mĂ€rkida, et see vĂ”imalus on saadaval ainult CDN-de tĂŒĂŒpidele 2, 3 ja 5.
Pilti saab optimeerida erinevate meetoditega: kasutades edasijÔudnud kokkusurumisvorminguid (nÀiteks WebP), tÔhusamaid kodeerijaid (MozJPEG) vÔi lihtsalt eemaldades liigsed metaandmed.
Ăldiselt on olemas kaks tĂŒĂŒpi optimeerimisi: kvaliteedi kadumisega ja ilma kvaliteedi kadumiseta. CDN-id pĂŒĂŒavad tavaliselt kasutada kaotamatut optimeerimist, et vĂ€ltida vĂ”imalikke kliendikaebusi piltide kvaliteedi muutumise ĂŒle. Sellistes tingimustes on kasu minimaalne. TĂ”elisuses ĂŒletab JPEG kvaliteedi tase sageli vajalikku taset ning seetĂ”ttu vĂ”ib julgelt teostada uuesti tihendamist madalama kvaliteediga, ilma et see kahjustaks kasutajate vastuvĂ”ttu. Teisest kĂŒljest on raske mÀÀrata kvaliteeditaset ja seadeid universaalselt kĂ”igi vĂ”imalike veebirakenduste jaoks, mistĂ”ttu kasutavad CDN-id konservatiivsemaid seadeid vĂ”rreldes nende seadistustega, mida vĂ”iks rakendada konteksti arvestades (piltide eesmĂ€rk, veebirakenduse tĂŒĂŒp jne ).
4. TLS-ĂŒhenduse optimeerimine
Enamik tĂ€napĂ€evasest liiklusest edastatakse TLS-ĂŒhenduste kaudu, mis tĂ€hendab, et me kulutame lisandunud aega TLS-i genereerimisele. Viimastel aegadel on vĂ€lja töötatud uusi tehnoloogiaid selle protsessi kiirendamiseks. NĂ€iteks on see EC-krĂŒptograafia, TLS 1.3, sessioonide vahemĂ€lu ja sessioonipiletid, riistvaraline krĂŒptimise kiirus (AES-NI) jne. Ăige TLS-i seadistamine vĂ”imaldab vĂ€hendada ĂŒhenduse aega kuni 0-1 RTT (ilma DNS ja TCP-ta).
Kaasaegse tarkvara olemasolul ei ole selliste praktikate rakendamine omaressurssides keeruline.
Kaugelki kĂ”ik CDN-id ei rakenda parimaid TLS-i praktikaid; seda saab kontrollida TLS-ĂŒhenduse aja mÔÔtmisega (nĂ€iteks Webpagetest). Uue ĂŒhenduse ideaalne olek on 1 RTT, 2 RTT on keskmine tase, 3 RTT ja rohkem on halb.
Samuti tasub mĂ€rkida, et isegi kui kasutame TLS-i CDN-i tasemel, peab server, kus asub meie veebirakendus, samuti TLS-i töötlema, kuid CDN-i poolt, kuna liiklus serveri ja CDN-i vahel toimub avalikus vĂ”rgus. Halvemal juhul saame kahekordse TLS-ĂŒhenduse viivituse (esimene CDN-i hostiga, teine tema ja meie serveri vahel).
MĂ”nede rakenduste puhul tasub pöörata tĂ€helepanu turvakĂŒsimustele: tavaliselt dekodeeritakse liiklus CDN-sĂ”lmedes, mis vĂ”ib vĂ”imaldada liikluse pealtkuulamist. Variante, mis töötavad ilma liikluse paljastamata, pakutakse tavaliselt tipptasemel plaanides eraldi tasu eest.
5. Ăhenduse latentsuse vĂ€hendamine
CDN-i peamine eelis, millest kĂ”ik rÀÀgivad: madalad latentsusajad (lĂŒhike kaugus) CDN-i hosti ja kasutaja vahel. Seda saavutatakse geograafiliselt jaotatud vĂ”rgu arhitektuuri loomisega, kus hostid asuvad kasutajate kontsentratsioonikohtades (linnaosades, vahetuspunktides jne).
Praktikas vĂ”ivad erinevate vĂ”rkude prioriteedid olla konkreetses piirkonnas. NĂ€iteks Venemaa CDN-idel on Venemaal rohkem kohaloleku kohti. Ameerika oma arendavad peamiselt vĂ”rku USA-s. NĂ€iteks ĂŒks suurimaid CDN-e, Cloudflare, omab Venemaal ainult 2 punkti â Moskvas ja Peterburis. See tĂ€hendab, et maksimaalselt saame kokku hoida umbes 10 ms latentsust vĂ”rreldes otsese majutamisega Moskvas.
Enamik LÀÀne CDN-e ei oma Venemaal punktide olemasolu. Nende ĂŒhendamine vĂ”ib vaid suurendada viivitusi teie Vene publikule.
6. Sisu optimeerimine (minifitseerimine, struktuurimuudatused)
KĂ”ige keerulisem ja tehnoloogilisem punkt. Sisu muutmine edastamise ajal vĂ”ib olla vĂ€ga riskantne. Isegi minifitseerimise puhul: algkoodi vĂ€hendamine (liigsete tĂŒhikute, ebaoluliste konstruktsioonide jne tĂ”ttu) vĂ”ib mĂ”jutada selle toimivust. RÀÀgime tĂ”sistest muudatustest â JS-koodi viimine HTML-i lĂ”ppu, failide ĂŒhinemine ja sarnased â risk rikkuda saidi funktsionaalsust on veelgi suurem.
SeetĂ”ttu tegelevad ainult mĂ”ned 5. tĂŒĂŒpi CDN-id sellega. Loomulikult ei saa kĂ”iki mugavusi, mis kiirusest mĂ”jutavad, automatiseerida â vajalik on kĂ€sitsi analĂŒĂŒs ja optimeerimine. NĂ€iteks kasutamata vĂ”i dubleeritud koodi eemaldamine kuulub just kĂ€sitĂ¶Ă¶ĂŒlesannete alla.
Reeglina juhitakse kÔiki selliseid optimeerimisi seadete kaudu ja kÔige ohtlikumad on vaikimisi keelatud.
Kiirenduse vĂ”imaluste tugi CDN tĂŒĂŒpide kaudu
Vaatame siis, milliseid vĂ”imalusi erinevad CDN-tĂŒĂŒbid kiirusprobleemide lahendamiseks pakuvad.
Mugavuse huvides korratakse klassifikatsiooni.
- Tasuta CDN-i JS-raamatukogude edastamiseks (MaxCDN, Google, Yandex).
- CDN teenused kliendi optimeerimiseks (nt Google Fonts fondide jaoks, Cloudinary, Cloudimage piltide jaoks).
- CDN staatika ja ressursside optimeerimiseks CMS-is (saadaval Bitrixis, WordPressis ja teistes).
- Ăldotstarbeline CDN (StackPath, CDNVideo, NGENIX, MegaFon).
- CDN saitide kiirendamiseks (Cloudflare, Imperva, Airi).
NĂŒĂŒd seome funktsioonid ja CDN-tĂŒĂŒbid kokku.
VÔimalus
TĂŒĂŒp 1
TĂŒĂŒp 2
TĂŒĂŒp 3
TĂŒĂŒp 4
TĂŒĂŒp 5
Teksti kokkusurumine
+â
â
+â
+â
+
VahemÀlu pealkirjad
+
+
+
+
+
Pildid
â
+â
+â
â
+
TLS
â
â
â
+â
+
Viivitused
â
â
â
+
+
Sisu
â
â
â
â
+
Selles tabelis tĂ€histab '+' tĂ€ielikku toetust, 'â' puudumist ja '+â' osalist toetust. Loomulikult vĂ”ivad tegelikud tulemused tabelist erineda (nĂ€iteks vĂ”ib mĂ”ni ĂŒldine CDN rakendada pildistamise optimeerimise funktsioone), kuid see on ĂŒldise arusaama saamiseks kasulik.
KokkuvÔte
Loodetavasti annab see artikkel teile selgema ettekujutuse soovitusest 'kasutage CDN-i', et kiirusprobleeme lahendada.
Nagu igas asjas, ei tohi usaldada ĂŒkskĂ”ik millise teenuse turunduslubadusi. Efekti tuleb mÔÔta ja kontrollida reaalses keskkonnas. Kui juba kasutate mĂ”nda CDN-i, kontrollige selle efektiivsust artiklis kirjeldatud kriteeriumide alusel.
VÔib-olla aeglustab CDN-i kasutamine praegu teie veebisaidi laadimist.
Ăldise soovituse jaoks vĂ”ib jÀÀda jĂ€rgmistele punktidele: uurige oma sihtrĂŒhma, mÀÀrake nende geograafilised raamid. Kui teie pĂ”hi sihtrĂŒhm asub 1-2 tuhande kilomeetri raadiuses, ei vaja te CDN-i peamise eesmĂ€rgi â viivituste vĂ€hendamise â saavutamiseks. Selle asemel vĂ”ite paigutada oma serveri lĂ€hemale kasutajatele ja seadistada selle korralikult, saades kĂ”ik optimeerimised, mis on artiklis kirjeldatud (tasuta ja pidevalt).
Kui teie sihtrĂŒhm on tĂ”eliselt geograafiliselt hajutatud (raadius ĂŒle 3000 kilomeetri), siis kvaliteetse CDN-i kasutamine on tĂ”eliselt kasulik. Siiski tuleb eelnevalt mĂ”ista, mida tĂ€pselt teie CDN kiirendab (vt vĂ”imaluste tabelit ja nende kirjeldust). Veebisaidi kiirendamine on siiski kompleksne ĂŒlesanne, mida ei lahenda CDN-i ĂŒhendamine. Lisaks mainitud optimeerimisele jÀÀvad kĂ”ige efektiivsemad kiirusmeetodid CDN-i alt vĂ€lja: serveripoolne optimeerimine, edasijĂ”udnud muudatused kliendipooles (kasutamata koodi eemaldamine, renderdamisprotsessi optimeerimine, sisu, fontide ja kohandatavuse kĂ€sitlemine jne).
Allikas: habr.com
