[Ära] kasuta CDN-i

Peaaegu igas artiklis vĂ”i tööriistas, mis kĂ€sitleb veebilehtede kiirusoptimeerimist, on tagasihoidlik punkt „kasutage CDN-i”. Tegelikult on CDN sisu edastamise vĂ”rk. Meie, ettevĂ”ttes „Metod Lab”, kohtume sageli klientide kĂŒsimustega selle teema kohta; mĂ”ned aktiveerivad CDN-i isegi ise. Selle artikli eesmĂ€rk on arutada, milliseid eeliseid vĂ”ib CDN pakkuda veebilehe laadimiskiirusest, millised probleemid vĂ”ivad tekkida ja millal on CDN-i kasutamine Ă”igustatud.

[Ära] kasuta CDN-i

Pildil kaardistatud latentsus on pÔhjustatud CDN-i kasutamisest.

Enne kui liigume edasi

Nagu paljude tehnoloogiate puhul, tekkisid CDN-id vajadusest. Internetikanalite arengu kÀigus ilmnesid veebivideo teenused. Loomulikult nÔuab videosisu oluliselt suuremat lÀbilaskevÔimet vÔrreldes tavalise veebisisuga (pildid, tekst ning CSS vÔi JS-kood).

Kui proovida edastada videovoogu paljudele klientidele ĂŒhest serverist, on kitsaskohaks tĂ”enĂ€oliselt serveri internetikanal. Reeglina piisab mĂ”nest tuhandest voost, et serveri tĂŒĂŒpiline kanal ummistuda. Loomulikult vĂ”ivad olla ka teised ressursside piirangud, kuid need pole nĂŒĂŒd nii olulised. Samuti on oluline, et serveri kanali laiendamine on liiga kallis (mĂ”nikord isegi vĂ”imatu) ning mitteotstarbekas. Koormus kanalil edastuste kĂ€igus on tsĂŒkliline.

CDN lahendab suure serveri kanali piirangu probleemi suurepĂ€raselt. Kliendid ei ĂŒhendust serveriga otse, vaid CDN-i vĂ”rgusĂ”lmedega. Ideaalsetes tingimustes edastab server ĂŒhe voolu CDN-i sĂ”lmele ning edasi kasutab vĂ”rk oma ressursse selle voolu edastamiseks paljudele kasutajatele. Majanduslikult maksame ainult reaalselt tarbitud ressursside (see vĂ”ib olla lĂ€bilaskevĂ”ime vĂ”i traffic) eest ja saame suurepĂ€rase meie teenuse skaleeritavuse. CDN-i kasutamine suure sisu edastamiseks on tĂ€iesti Ă”igustatud ja loogiline. Siiski tasub mĂ€rkida, et suurimad mĂ€ngijad selles valdkonnas (nt Netflix) ehitavad oma CDN-e, selle asemel et kasutada suuri kommertsd CDN-e (Akamai, Cloudflare, Fastly jne).

Veeb arendamisega koos on veebirakendused muutunud kĂ”ik keerukamaks ja raskemaks. Probleem, mis tĂ”usis esikohale, on laadimiskiirus. Veebilehtede kiirusentusiastid tuvastasid ĂŒsna kiiresti mitu peamist probleemi, mis pĂ”hjustas veebilehtede aeglast laadimist. Üks neist oli vĂ”rgu latentsus (RTT – round trip time ehk ping-aeg). Latentsus mĂ”jutab mitmeid protsesse veebilehe laadimisel: TCP-ĂŒhenduse loomine, TLS-seansi kĂ€ivitamine, iga eraldi ressursi (pilt, JS-fail, HTML-dokument jne) laadimine.

Probleemi sĂŒvendas see, et HTTP/1.1 protokolli kasutamisel (kuni SPDY, QUIC ja HTTP/2 ilmumiseni oli see ainus valik) avavad brauserid mitte rohkem kui 6 TCP-ĂŒhendust ĂŒhe hosti juurde. See kĂ”ik viis ĂŒhenduse seiskumiseni ja ebaefektiivse lĂ€bilaskevĂ”ime kasutamiseni. Probleem lahendati osaliselt domeenide jagamise kaudu – lisahostide loomisega, et ĂŒletada ĂŒhenduste arvu piirangut.

Siin tuleb mĂ€ngu CDN teine vĂ”ime – latentsuse (RTT) vĂ€hendamine ÀÀrmiselt paljude punktide ja node'ide lĂ€heduse tĂ”ttu kasutajale. Siin mĂ€ngib kaugus otsustavat rolli: valguse kiirus on piiratud (umbes 200 000 km/s optilise kiudude kaudu). Seega lisab iga 1000 km teekond 5 ms latentsust vĂ”i 10 ms RTT-sse. Need on minimaalsed ajakulu edastamiseks, kuna on veel viivitused vahe- seadmetes. Kuna CDN suudab tavaliselt esemeid oma serverites vahemĂ€llu salvestada, saame kasu nende objektide laadimisest lĂ€bi CDN-i. Selle saavutamiseks on vajalikud tingimused: objekti olemasolu vahemĂ€lus, CDN punkti lĂ€hedus kasutajale vĂ”rreldes veebirakenduse serveriga (origin server). Oluline on mĂ”ista: geograafiline lĂ€hedus CDN-i sĂ”lmele ei garanteeri madalaid latentsusi. Tee jaotamine kliendi ja CDN-i vahel vĂ”ib olla ĂŒles ehitatud nii, et klient ĂŒhendub hostiga teises riigis vĂ”i isegi teisel mandril. Siin tulevad mĂ€ngu sideoperaatorite ja CDN teenuse suhted (peering, ĂŒhenduste olemasolu, osalemine IX jne) ning CDN-i enda liikluse marsruutimise poliitika. NĂ€iteks Cloudflare ei garanteeri oma algsete kahe plaani (tasuta ja odav) kasutamise korral sisu edastamist lĂ€himast sĂ”lmest – hosti valik toimub minimaalsete kulude saavutamise nimel.

Paljud juhtivad internetifirmad köidavad avalikkuse (veebiarendajate ja teenusepakkujate) tĂ€helepanu veebilehtede laadimiskiirusest ja toimimisest. Nende hulgas on Yahoo (Yslow tööriist), AOL (WebPageTest) ja Google (Page Speed Insights teenus), mis arendavad oma soovitusi veebilehtede kiirendamiseks (peamiselt kliendi optimeerimise kohta). Ajan jooksul ilmnevad uued veebilehtede kiirusetĂ”estamisvahendid, mis jagavad samuti nĂ”uandeid kiirusetĂ”stmiseks. Igas nendes teenustes vĂ”i pluginate seas on muutumatu soovitus „Kasutage CDN-i“. CDN-i efekti selgitamiseks tuuakse tavaliselt vĂ€lja vĂ”rgu latentsuse vĂ€henemine. Kahjuks ei ole kĂ”ik suutnud aru saada, kuidas tĂ€pselt saavutatakse CDN-i kiirusetĂ”steefekt ja kuidas seda mÔÔta, nii et soovitus vĂ”etakse usaldusena ning kasutatakse postulaadina. Tegelikult ei ole kĂ”ik CDN-id vĂ”rdselt kasulikud.

CDN-i kasutamine tÀna

CDN-ide kasutusmugavuse hindamiseks tuleks neid klassifitseerida. Mida saab praegu praktikas kohata (nÀidised sulgudes ei ole loomulikult ammendavad):

  1. Tasuta CDN-id JS-teekide jagamiseks (MaxCDN, Google, Yandex).
  2. CDN-id kliendi optimeerimise teenustele (nÀiteks Google Fonts fontide jaoks, Cloudinary, Cloudimage piltide jaoks).
  3. CDN-id staatilistele elementidele ja ressursside optimeerimisele CMS-is (leitud Bitrixis, WordPressis ja teistes).
  4. Üldotstarbelised CDN-id (StackPath, CDNVideo, NGENIX, MegaFon).
  5. CDN-id veebilehtede kiirendamiseks (Cloudflare, Imperva, Airi).

Peamine erinevus nende tĂŒĂŒpide vahel seisneb jĂ€rgmis: kui suur osa liiklusest lĂ€bib CDN-i. TĂŒĂŒbid 1-3 toimetavad ainult osa sisust: ĂŒhest pĂ€ringust mitmekĂŒmne eri vormini (tavaliselt piltide jaoks). TĂŒĂŒbid 4 ja 5 on tĂ€ielik liikluse vahendamine CDN-i kaudu.

Praktikas tĂ€hendab see, kui palju ĂŒhendusi kasutatakse veebilehe laadimiseks. HTTP/2 kasutamisel kasutame ĂŒhte TCP-ĂŒhendust hostiga, et hallata igasuguseid pĂ€ringuid. Kui jagame ressursid peamise hosti (origin) ja CDN-i vahel, tuleb pĂ€ringud jaotada mitme domeeni vahel ja luua mitu TCP-ĂŒhendust. Halvimal juhul see tĂ€hendab: DNS (1 RTT) + TCP (1 RTT) + TLS (2-3 RTT) = 6-7 RTT. Selles valemis ei arvestata mobiilivĂ”rkude viivitusi seadme raadiosidekanali aktiveerimisel (kui see ei olnud aktiivne) ja viivitusi mobiilitornis.

Nii see vĂ€lja nĂ€eb veebilehe laadimisvees (CDN-iga ĂŒhenduse viivituse vÀÀrtused on 150 ms):

[Ära] kasuta CDN-i

Kui CDN katab kogu veebilehe liikluse (vĂ€lja arvatud kolmandate osapoolte teenused), siis saame kasutada ĂŒhte TCP-ĂŒhendust, sÀÀstes viivitusi, mis on seotud tĂ€iendavate hostidega ĂŒhendamisega. Loomulikult kehtib see HTTP/2-ĂŒhenduste korral.

EdasiĂ”iendused mÀÀratakse kindlaks konkreetse CDN funktsionaalsusega – esimesel tĂŒĂŒbil on see vaid hostimine staatiline fail, viienda puhul on see mitu tĂŒĂŒpi veebisisu muutmine optimeerimise eesmĂ€rgil.

CDN-i vÔimalused veebilehe kiirusel

Kuna arutame CDN-i tĂ€ielikku potentsiaali veebilehtede kiirusel, mitte lĂ€htudes erinevatest tĂŒĂŒpidest, vaatame, mis on igaĂŒhes ellu viidud.

1. Tekstide ressursside kokkusurumine

KĂ”ige elementaarsem ja arusaadavam vĂ”imalus, kuid samas on see sageli halvasti rakendatud. KĂ”ik CDN-id kuulutavad oma funktsiooni „kiirus“, kuid sĂŒvitsi vaadates selguvad puudused:

  • kasutatakse madalaid kraade dĂŒnaamiliseks kokkusurumiseks – 5-6 (nĂ€iteks gzipi max – 9);
  • staatilises kokkusurumises (failid vahemĂ€lus) ei kasutata tĂ€iendavaid vĂ”imalusi (nĂ€iteks zopfi vĂ”i brotli 11 kraadiga)
  • pole tĂ”husat brotli kokkusurumist (kokkuhoid umbes 20% vĂ”rreldes gzipiga).

Kui kasutate CDN-i, tasub kontrollida neid punkte: vÔtke fail, mis tuli CDN-ilt, registreerige selle suurus kokkusurutud kujul ja proovige seda ise uuesti suruda vÔrdlemiseks (vÔite kasutada mÔnda veebiteenust brotli toetusega, nÀiteks kÔiksuruda.ee).

2. Kliendi vahemÀlu pÀiste seadmine

Samuti lihtne funktsioon kiirusel: seada sisu vahemĂ€lumise pĂ€ised (brauserile). KĂ”ige olulisem pĂ€is on cache-control, aegunud – expires. TĂ€iendavalt vĂ”ib kasutada Etag-tĂ€isarvu. Peamine on see, et cache-controli max-age oleks piisavalt pikk (alates kuust ja enam), kui olete valmis ressurssi vĂ”imalikult rangelt vahemĂ€lustama, saate lisada valiku immutable.

CDN-id vĂ”ivad alandada max-age vÀÀrtust, sundides kasutajat sagedamini staatilisi faile uuesti alla laadima. Miks see nii on: kas soovist suurendada vĂ”rgu liiklust vĂ”i ĂŒhilduvuse parandamisest veebisaitidega, mis ei oska vahemĂ€lu tĂŒhjendada – pole selge. NĂ€iteks, Cloudflare'i vaikimisi vahemĂ€lu aeg on 1 tund, mis on muutumatute staatiliste failide jaoks vĂ€ga lĂŒhike.

3. Piltide optimeerimine

Kuna CDN vĂ”tab enda peale piltide vahemĂ€lestamise ja edastamise funktsioonid, oleks mĂ”istlik optimeerida need CDN-is ja sellisel kujul edastada kasutajatele. Tuleb kohe mĂ€rkida, et see vĂ”imalus on saadaval ainult CDN-tĂŒĂŒpide 2, 3 ja 5 puhul.

Pilti on vÔimalik optimeerida mitmel viisil: kasutades arenenumaid tihendamisformaatide (nÀiteks WebP), tÔhusamaid kodeerijaid (MozJPEG) vÔi lihtsalt eemaldades liigsed metaandmed.

Üldiselt on selliste optimeerimiste puhul kaks tĂŒĂŒpi: kvaliteedikaotuseta ja kvaliteedikadudega. CDN-d pĂŒĂŒavad tavaliselt kasutada kvaliteedikaotuseta optimeerimist – et vĂ€ltida vĂ”imalikke kaebusi klientidelt piltide kvaliteedi muutumise kohta. Nendes tingimustes on kasu minimaalne. Tegelikult ĂŒletab JPEG kvaliteedi tase sageli vajalikku ja vĂ”ib julgelt teha rekodeerimise madalama kvaliteedihindega, ilma et kasutajate tajumine kannataks. Teisest kĂŒljest on kvaliteedi taseme ja seadistuste mÀÀramine universaalselt kĂ”igi vĂ”imalike veebirakenduste jaoks keeruline, seega kasutavad CDN-d konservatiivsemaid seadeid vĂ”rreldes nendega, mida vĂ”iks rakendada konteksti arvesse vĂ”ttes (piltide eesmĂ€rk, veebirakenduse tĂŒĂŒp jne).

4. TLS-ĂŒhenduse optimeerimine

Enamik liiklust edastatakse tĂ€na TLS-ĂŒhenduste kaudu, seega kulutame lisa aega TLS-i kokkulepete tegemiseks. Viimasel ajal on arendatud uusi tehnoloogiaid selle protsessi kiirendamiseks. NĂ€iteks EC-krĂŒptograafia, TLS 1.3, sessioonide vahemĂ€lu ja piletid (session tickets), krĂŒpteerimise riistvara kiirus (AES-NI) jne. Õige TLS-i seadistamine vĂ”imaldab vĂ€hendada ĂŒhendusaega 0–1 RTT (ilma DNS-i ja TCP-ta).

Kaasaegsete tarkvarade olemasolu korral pole selliste praktikate rakendamine enda vÔimsustes keeruline.

Kaugelgi pole kĂ”ik CDN-id rakendavad parimaid praktikaid TLS-i osas, mida saab kontrollida TLS-ĂŒhenduse aja mÔÔtmise teel (nĂ€iteks Webpagetestis). Ideaalne uue ĂŒhenduse puhul on 1RTT, 2RTT - keskmine tase, 3RTT ja rohkem - kehv.

Samuti tuleb mĂ€rkida, et isegi kui kasutatakse TLS-i tasemel CDN-is, peab server meie veebirakendusega samuti TLS-i kĂ€sitlema, kuid CDN-i poolelt, kuna liiklus serveri ja CDN-i vahel liigub avalikus vĂ”rgus. Halvimal juhul saame kahekordse TLS-ĂŒhenduse viivituse (esimene CDN-i hosti, teine tema ja meie serveri vahel).

MĂ”nede rakenduste puhul tasub tĂ€helepanu pöörata turvakĂŒsimustele: tavaliselt dekodeeritakse liiklus CDN-i sĂ”lmedes, mis on potentsiaalne vĂ”imalus liikluse pealtkuulamiseks. Liikluseta töötamise variant pakutakse tavaliselt tipptasemel plaanides eritasu eest.

5. Ühenduse viivituste vĂ€hendamine

CDN-i peamine eelis, millest kÔik rÀÀgivad: madalad viivitused (vÀiksem kaugus) CDN-i hosti ja kasutaja vahel. See saavutatakse geograafiliselt hajutatud vÔrguarhitektuuri loomise teel, kus hostid asuvad kasutajate kontsentratsiooni punkti (linnad, liikluse vahetuspunkid ja t. d.).

Praktikas vĂ”ivad erinevate vĂ”rkude prioriteedid olla konkreetses piirkonnas. NĂ€iteks on Venemaa CDN-idel Venemaal rohkem kohaloleku punkte. Ameerika CDN-id arendavad eeskĂ€tt oma vĂ”rku USA-s. NĂ€iteks ĂŒks suurimaid CDN-e Cloudflare'il on Venemaal vaid 2 punkti - Moskvas ja Peterburis. See tĂ€hendab, et maksimaalselt saame praeguse asukoha ÀÀrde sÀÀsta umbes 10 ms viivitust vĂ”rreldes otse Moskvas majutamisega.

Enamik lÀÀne CDN-e ei oma Venemaal ĂŒldse kohaloleku punkte. Nende juurde ĂŒhendudes vĂ”id suurendada viivitusi oma Venemaa publikule.

6. Sisu optimeerimine (minifitseerimine, struktuurilised muudatused)

KĂ”ige keerulisem ja tehnilisem punkt. Sisu muutmine tarnimise ajal vĂ”ib olla vĂ€ga riskantne. Isegi kui rÀÀkida minifitseerimisest: algse koodi vĂ€hendamine (ĂŒlearuste vahede, ebaoluliste struktuuride jms tĂ”ttu) vĂ”ib mĂ”jutada selle töövĂ”imet. Kui rÀÀkida tĂ”sisematest muudatustest – JS-koodi seadmine HTML-i lĂ”ppu, failide ĂŒhendamine ja sarnased – on risk veebisaidi funktsionaalsuse rikkuda veelgi kĂ”rgem.

SeetĂ”ttu tegelevad vaid mĂ”ned CDN-i tĂŒĂŒbid 5 sellega. Loomulikult ei ole vĂ”imalik automatiseerida kĂ”ik nĂ”utavad muudatused kiirusel – vajalik on kĂ€sitsi analĂŒĂŒs ja optimeerimine. NĂ€iteks kĂ”lbmatute vĂ”i dubleeritud koodi eemaldamine kuulub just kĂ€sitĂ¶Ă¶ĂŒlesannete hulka.

Reeglina hallatakse kĂ”iki sarnaseid optimeerimisi seadistuste kaudu ja kĂ”ige ohtlikumad on vaikimisi vĂ€lja lĂŒlitatud.

KiirendamisvĂ”imaluste tugi CDN-tĂŒĂŒpide kaupa

Nii et vaatame, millised potentsiaalsed kiirusvĂ”imalused erinevad CDN-tĂŒĂŒbid pakuvad.

Oma mugavuse huvides kordame klassifikatsiooni.

  1. Tasuta CDN-id JS-teekide jagamiseks (MaxCDN, Google, Yandex).
  2. CDN-id kliendi optimeerimise teenustele (nÀiteks Google Fonts fontide jaoks, Cloudinary, Cloudimage piltide jaoks).
  3. CDN-id staatilistele elementidele ja ressursside optimeerimisele CMS-is (leitud Bitrixis, WordPressis ja teistes).
  4. Üldotstarbelised CDN-id (StackPath, CDNVideo, NGENIX, MegaFon).
  5. CDN-id veebilehtede kiirendamiseks (Cloudflare, Imperva, Airi).

NĂŒĂŒd seostame funktsioonid ja CDN-tĂŒĂŒbid.

VÔimalus
TĂŒĂŒp 1
TĂŒĂŒp 2
TĂŒĂŒp 3
TĂŒĂŒp 4
TĂŒĂŒp 5

Teksti tihendamine
+–
–
+–
+–
+

VahemÀlu pÀised
+
+
+
+
+

Pildid
–
+–
+–
–
+

TLS
–
–
–
+–
+

Viivitused
–
–
–
+
+

Sisu
–
–
–
–
+

Selles tabelis tĂ€histab „+” tĂ€ielikku toetust, „–” puudumist ja „+–” – osalist toetust. Loomulikult vĂ”ivad selle tabeli osas reaalsuses esineda erandid (nĂ€iteks mĂ”ni universaalne CDN vĂ”ib rakendada piltide optimeerimise funktsioone), kuid see on ĂŒldise arusaama jaoks kasulik.

Summary

Loodan, et pĂ€rast selle artikli lugemist on teil selgem arusaam soovitusest „kasutage CDN” oma veebisaitide kiirendamiseks.

Nagu iga asja puhul, ei tohiks uskuda ĂŒhegi teenuse turunduslubadusi. TĂ”husust tuleb mÔÔta ja kontrollida reaalsetes tingimustes. Kui kasutate juba mĂ”nda CDN-i, kontrollige selle efektiivsust artiklis toodud kriteeriumide jĂ€rgi.

VÔib-olla aeglustab CDN-i kasutamine teie veebisaidi laadimist praegu.

Üldise soovitusena vĂ”iks peatus olla jĂ€rgmine: uurige oma sihtrĂŒhma, mÀÀratlege selle geograafilised piirid. Kui teie peamine sihtrĂŒhm on koondunud 1-2 tuhande kilomeetri raadiuses, ei vaja te CDN-i peamise eesmĂ€rgina – viivituste vĂ€hendamiseks. Selle asemel vĂ”ite oma serveri kasutajatele lĂ€hemale paigutada ja seadistada selle korralikult, saades enamikku artiklis kirjeldatud optimeeringutest (tasuta ja pidevalt).

Kui teie sihtrĂŒhm on tĂ”epoolest geograafiliselt jaotatud (raadius ĂŒle 3000 kilomeetri), siis kvaliteetse CDN-i kasutamine on tĂ”eliselt kasulik. Siiski tuleb eelnevalt aru saada, mida tĂ€pselt teie CDN kiiruselt parandab (vt vĂ”imaluste tabelit ja nende kirjeldust). Veebilehe kiirus jÀÀb siiski keeruliseks ĂŒlesandeks, mida ei saa lahendada lihtsalt CDN-i ĂŒhendamisega. Lisaks mainitud optimeerimistele jÀÀvad CDN-ist vĂ€lja kĂ”ige efektiivsemad kiirusetĂ”stmismeetodid: serveri poole optimeerimine, arenenud muudatused kliendipoolel (kasutamata koodi eemaldamine, renderdamise protsessi optimeerimine, sisu, fondide, reageerimise ja muu töö jne).

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster