I nÀstan varje artikel eller verktyg för att optimera hastigheten pÄ webbplatser finns det en diskret punkt "anvÀnd CDN". Generellt sett Àr CDN en förkortning för content delivery network eller innehÄllsleveransnÀtverk. PÄ företaget "Metod Lab" stöter vi ofta pÄ frÄgor frÄn kunder kring detta Àmne, dÀr vissa sjÀlva aktiverar CDN. Syftet med denna artikel Àr att förstÄ vad CDN kan bidra med avseende pÄ webbplatsens laddningstid, vilka problem som kan uppstÄ samt i vilka fall anvÀndningen av CDN Àr motiverad.
![[Ne] anvÀnd CDN](/wp-content/uploads/2019/10/6f32a7973856989f2adac4171a6ef9dd.jpg)
De cirkulerade fördröjningarna i bilden orsakas av anvÀndningen av CDN.
Lite historia
Som mÄnga teknologier uppstod CDN av behov. Med utvecklingen av internetkanaler hos nÀtanvÀndare, dök tjÀnster för onlinevideo upp. Det Àr uppenbart att videoinnehÄll krÀver avsevÀrt större bandbredd jÀmfört med vanlig webbplatsinnehÄll (bilder, text samt CSS eller JS-kod).
Vid försök att parallellt sÀnda en videoström till mÄnga kunder frÄn en enda server blir serverns internetkanal förmodligen en flaskhals. I regel rÀcker det med nÄgra tusen strömmar för att överbelasta en typisk serverkanal. Naturligtvis kan det ocksÄ finnas andra begrÀnsningar av resurser, men dessa Àr inte viktiga just nu. Det Àr ocksÄ viktigt att notera att det Àr alltför dyrt (och ibland omöjligt) att utöka serverkanalen, och det kan Àven vara oekonomiskt. Belastningen pÄ kanalen vid sÀndningar kommer att ha en cyklisk karaktÀr.
CDN löser utmÀrkt problemet med begrÀnsningen av en enskild servers kanal. Kunder kopplar inte direkt till servern, utan till noder i CDN-nÀtverket. I en perfekt situation levererar servern en ström till CDN-noden, och sedan anvÀnder nÀtverket egna resurser för att distribuera denna ström till mÄnga anvÀndare. Ur ett ekonomiskt perspektiv betalar vi bara för de resurser vi faktiskt anvÀnder (det kan vara bandbredd eller trafik) och fÄr utmÀrkt skalbarhet för vÄr tjÀnst. AnvÀndning av CDN för leverans av tungt innehÄll Àr helt motiverat och logiskt. Det bör dock noteras att de största aktörerna inom detta omrÄde (till exempel Netflix) bygger sina egna CDN istÀllet för att anvÀnda stora kommersiella CDN (Akamai, Cloudflare, Fastly osv.).
I takt med att webben utvecklas har sjĂ€lva webbapplikationerna blivit mer komplexa och tyngre. Problemet med laddningstid har hamnat i centrum. Hastighetentusiaster har snabbt identifierat flera centrala problem som leder till lĂ„ngsamma webbplatser. Ett av dessa var nĂ€tverksfördröjningar (RTT â round trip time eller pingtid). Fördröjningarna pĂ„verkar mĂ„nga processer i webbplatsens laddning: etablering av TCP-anslutning, start av TLS-session, laddning av varje enskild resurs (bilder, JS-filer, HTML-dokument osv.)
Problemet förvĂ€rrades av att vid anvĂ€ndning av HTTP/1.1-protokollet (fram till introduktionen av SPDY, QUIC och HTTP/2 var detta det enda alternativet) öppnar webblĂ€sarna högst 6 TCP-anslutningar till en vĂ€rd. Allt detta ledde till att anslutningar stod stilla och ineffektiv anvĂ€ndning av bandbredd. Problemet delvis löstes genom domĂ€nsharding â skapande av ytterligare vĂ€rdar för att överbrygga grĂ€nsen för antalet anslutningar.
HĂ€r kommer den andra funktionen av CDN in â att minska fördröjningarna (RTT) genom ett stort antal punkter och nĂ€rheten av noder till anvĂ€ndaren. AvstĂ„ndet spelar en avgörande roll hĂ€r: ljusets hastighet Ă€r begrĂ€nsad (ungefĂ€r 200 000 km/s i fiberoptik). Det betyder att varje 1000 km vĂ€g tillför 5 ms fördröjning eller 10 ms i RTT. Detta Ă€r minimi-tidstapp pĂ„ överföringen, eftersom det ytterligare finns fördröjningar i mellanliggande utrustning. Eftersom CDN vanligtvis kan cacha objekt pĂ„ sina servrar, kan vi dra nytta av att ladda sĂ„dana objekt via CDN. NödvĂ€ndiga villkor för detta Ă€r: nĂ€rvaron av objektet i cachen, nĂ€rhet av CDN-punkten till anvĂ€ndaren jĂ€mfört med webbapplikationens server (origin server). Det Ă€r viktigt att förstĂ„: geografisk nĂ€rhet av CDN-noden garanterar inte lĂ„ga fördröjningar. Routen mellan klienten och CDN kan vara sĂ„dan att klienten kopplar upp sig mot en vĂ€rd i ett annat land, kanske till och med pĂ„ en annan kontinent. HĂ€r spelar relationerna mellan teleoperatörerna och CDN-tjĂ€nsten roll (cirkelkoppling, nĂ€rvaro av kopplingar, deltagande i IX etc.) samt trafikroutningens politik hos sjĂ€lva CDN. Till exempel garanterar Cloudflare, vid anvĂ€ndning av de tvĂ„ grundplanerna (den kostnadsfria och den billiga), inte att innehĂ„llet levereras frĂ„n den nĂ€rmaste noden â valet av vĂ€rd kommer att göras för att uppnĂ„ lĂ€gsta kostnad.
MÄnga ledande internetföretag vÀcker intresset hos allmÀnheten (webbutvecklare och tjÀnsteÀgare) för frÄgan om laddningshastighet och webbplatsernas funktion. Bland dessa företag finns Yahoo (verktyget Yslow), AOL (WebPageTest) och Google (tjÀnsten Page Speed Insights), som utvecklar sina egna rekommendationer för att snabba upp webbplatser (framför allt handlar det om klientoptimering). Senare dyker det upp nya verktyg för att testa webbplatshastighet, som ocksÄ ger rÄd om hur man ökar hastigheten pÄ webbplatser. I varje av dessa tjÀnster eller plugins finns den oförÀndrade rekommendationen "AnvÀnd CDN". Som förklaring till effekten av CDN anges vanligtvis minskade nÀtverksfördröjningar. TyvÀrr Àr inte alla beredda att förstÄ hur uppaccelereringen frÄn CDN egentligen uppnÄs och hur den kan mÀtas, varför rekommendationen tas emot pÄ tro och anvÀnds som ett postulat. I sjÀlva verket Àr inte alla CDN lika anvÀndbara.
AnvÀndning av CDN idag
För att bedöma nyttan av CDN mÄste de kategoriseras. Vad som kan ses i dagslÀget (exemplen inom parentes Àr sjÀlvklart inte uttömmande):
- Gratis CDN för distribution av JS-bibliotek (MaxCDN, Google, Yandex).
- CDN av tjÀnster för klientoptimering (till exempel Google Fonts för typsnitt, Cloudinary, Cloudimage för bilder).
- CDN för statiska resurser och optimering i CMS (finns i Bitrix, WordPress och andra).
- AllmÀnna CDN (StackPath, CDNVideo, NGENIX, MegaFon).
- CDN för att snabba upp webbplatser (Cloudflare, Imperva, Airy).
Den huvudsakliga skillnaden mellan dessa typer Àr följande: vilken del av trafiken som gÄr genom CDN. Typerna 1-3 handlar om leverans av endast en del av innehÄllet: frÄn en begÀran till ett par dussin (vanligtvis bilder). Typerna 4 och 5 handlar om fullstÀndig proxytjÀnst av trafiken genom CDN.
I praktiken innebÀr detta antalet anslutningar som anvÀnds för att ladda en webbplats. Vid anvÀndning av HTTP/2 anvÀnder vi en TCP-anslutning till vÀrden för att hantera vilket antal begÀrningar som helst. Om vi skiljer resurser mellan den primÀra vÀrden (origin) och CDN, mÄste vi sprida begÀrningar över flera domÀner och skapa flera TCP-anslutningar. I vÀrsta fall Àr detta: DNS (1 RTT) + TCP (1 RTT) + TLS (2-3 RTT) = 6-7 RTT. I denna formel beaktas inte fördröjningar i mobila nÀtverk för att aktivera en radio-kanal pÄ enheten (om den inte varit aktiv) och fördröjningar vid mobilmaster.
SÄ hÀr ser det ut pÄ nedladdningsvattnet för webbplatsen (fördröjningar för anslutning till CDN vid RTT 150 ms Àr markerade):
![[Ne] anvÀnd CDN](/wp-content/uploads/2019/10/d0aafcc5aa4dff6c8a97307f39c8c025.jpg)
Om CDN tÀcker all webbplatstrafik (utom externa tjÀnster) kan vi anvÀnda en enda TCP-anslutning, vilket sparar fördröjningar vid anslutning till ytterligare vÀrdar. SjÀlvklart gÀller detta HTTP/2-anslutningar.
Ytterligare skillnader bestĂ€ms av funktionaliteten hos den specifika CDN â för den första typen handlar det endast om hosting en statisk fil, medan den femte handlar om Ă€ndringar av flera typer av webbplatsinnehĂ„ll för att optimera.
CDNs möjligheter att pÄskynda webbplatsen
LÄt oss beskriva hela spektrumet av CDN:s möjligheter att pÄskynda webbplatser, utan att ta hÀnsyn till funktionaliteten hos individuella CDN-typer, och sedan se vad som har implementerats i vart och ett av dem.
1. Komprimering av textresurser
Den mest grundlÀggande och förstÄeliga möjligheten, men ÀndÄ ofta implementerad dÄligt. Alla CDN deklarerar att de har komprimering som en funktion för att pÄskynda, men vid en nÀrmare granskning framgÄr det brister:
- lĂ„ga grader kan anvĂ€ndas för dynamisk komprimering â 5-6 (till exempel för gzip Ă€r max â 9);
- i statisk komprimering (filer i cachen) anvÀnds inte ytterligare möjligheter (till exempel zopfi eller brotli med nivÄ 11)
- det finns inget stöd för effektiv brotli-komprimering (besparing pÄ cirka 20 % jÀmfört med gzip).
Om du anvÀnder CDN, Àr det vÀrt att kontrollera dessa punkter: ta en fil som kommit frÄn CDN, notera dess storlek i komprimerad form och omkomprimera manuellt för att jÀmföra (du kan anvÀnda nÄgon online-tjÀnst som stöder brotli, till exempel ).
2. StÀlla in klientens cachehuvuden
Ăven en enkel funktion för att pĂ„skynda: stĂ€ll in rubriker för att cacha innehĂ„llet hos klienten (webblĂ€saren). Den mest aktuella rubriken Ă€r cache-control, den förĂ„ldrade Ă€r expires. Etag kan ocksĂ„ anvĂ€ndas. Det viktiga Ă€r att max-age i cache-control Ă€r tillrĂ€ckligt stort (frĂ„n en mĂ„nad och mer). Om du vill cacha resursen maximalt strikt kan du lĂ€gga till alternativet immutable.
CDN kan sĂ€nka vĂ€rdet av max-age, vilket tvingar anvĂ€ndaren att ladda om statiska filer oftare. Anledningen till detta: om det handlar om att öka trafiken pĂ„ nĂ€tverket eller för att öka kompatibiliteten med webbplatser som inte kan rensa cache â Ă€r oklart. Till exempel Ă€r standardvĂ€rdet för cache-tid i Cloudflare-rubriker 1 timme, vilket Ă€r mycket lite för oförĂ€ndrad statik.
3. Bildoptimering
Eftersom CDN hanterar caching och leverans av bilder, Àr det logiskt att optimera dem pÄ CDN-sidan och leverera dem till anvÀndarna pÄ det sÀttet. Vi pÄpekar att denna möjlighet endast Àr tillgÀnglig för CDN av typerna 2, 3 och 5.
Bilder kan optimeras pÄ olika sÀtt: genom att anvÀnda avancerade komprimeringsformat (till exempel WebP), mer effektiva kodare (MozJPEG) eller helt enkelt genom att rensa bort överflödig metadata.
Det finns i stort sett tvĂ„ typer av sĂ„dana optimeringar: med kvalitetsförlust och utan kvalitetsförlust. CDN strĂ€var vanligtvis efter att anvĂ€nda förlustfri optimering â för att undvika eventuella klagomĂ„l frĂ„n kunder angĂ„ende förĂ€ndrad bildkvalitet. Under sĂ„dana förhĂ„llanden blir vinsten minimal. I verkligheten överstiger ofta JPEG-kvalitetsnivĂ„n kraftigt det som krĂ€vs, och det gĂ„r bra att utföra rekodning med en lĂ€gre kvalitetsnivĂ„ utan att pĂ„verka anvĂ€ndarnas upplevelse. Ă andra sidan Ă€r det svĂ„rt att faststĂ€lla kvalitetsnivĂ„n och instĂ€llningarna universellt för alla möjliga webblösningar, sĂ„ CDN anvĂ€nder mer konservativa instĂ€llningar jĂ€mfört med de som kan tillĂ€mpas med hĂ€nsyn till kontext (Ă€ndamĂ„let med bilderna, typ av webbapplikation etc.)
4. Optimering av TLS-anslutning
Den största delen av trafiken idag överförs via TLS-anslutningar, vilket betyder att vi spenderar extra tid pÄ TLS-handledning. Nya teknologier för att pÄskynda denna process har utvecklats nyligen. Till exempel, detta inkluderar EC-kryptografi, TLS 1.3, sessionscache och biljetter (session tickets), hÄrdvaruhastighet av kryptering (AES-NI) osv. RÀtt konfiguration av TLS kan minska anslutningstiden till 0-1 RTT (exklusive DNS och TCP).
Det Àr inte svÄrt att implementera sÄdana metoder med modern programvara pÄ egna resurser.
Inte alla CDN implementerar bĂ€sta praxis för TLS; detta kan kontrolleras genom att mĂ€ta tiden för TLS-anslutningen (t.ex. i Webpagetest). Idealiskt för en ny anslutning Ă€r 1 RTT, 2 RTT Ă€r en genomsnittlig nivĂ„, 3 RTT och mer â dĂ„ligt.
Det Àr ocksÄ vÀrt att notera att Àven nÀr TLS anvÀnds pÄ CDN-nivÄ, mÄste servern med vÄr webbapplikation ocksÄ hantera TLS, men frÄn CDN:s sida, eftersom trafiken mellan servern och CDN passerar genom ett offentligt nÀtverk. I vÀrsta fall fÄr vi dubbla fördröjningar i TLS-anslutningen (den första till CDN-vÀrden, den andra mellan den och vÄr server).
För vissa tillÀmpningar Àr det viktigt att beakta sÀkerhetsfrÄgor: vanligtvis dekrypteras trafiken vid CDN-noder, vilket utgör en potentiell möjlighet för trafikavlyssning. Alternativet att arbeta utan att avslöja trafiken erbjuds vanligtvis i de högsta abonnemangen mot en extra avgift.
5. Minskning av anslutningens fördröjningar
Huvudfördelen med CDN som alla pratar om: lÄg fördröjning (kortare avstÄnd) mellan CDN-vÀrden och anvÀndaren. Detta uppnÄs genom att skapa en geografiskt distribuerad nÀtverksarkitektur dÀr vÀrdar placeras i anvÀndarkoncentrationspunkter (stÀder, trafikbytespunkter osv.)
I praktiken kan prioriteringar för olika nĂ€tverk finnas i specifika regioner. Till exempel kommer ryska CDN att ha fler nĂ€rvaropunkter i Ryssland. Amerikanska kommer frĂ€mst att utveckla sitt nĂ€tverk i USA. Till exempel har en av de största CDN:erna, Cloudflare, bara 2 punkter i Ryssland â Moskva och Sankt Petersburg. SĂ„ maximalt kan vi spara cirka 10 ms fördröjning jĂ€mfört med direkt placering i Moskva.
De flesta vÀsterlÀndska CDN har överhuvudtaget inga punkter i Ryssland. Genom att ansluta till dem kan du bara öka fördröjningarna för din ryska publik.
6. Optimering av innehÄll (minifiering, strukturella förÀndringar)
Den mest komplicerade och tekniska punkten. Ăndring av innehĂ„ll vid leverans kan vara mycket riskabelt. Ăven om vi tar minifiering som exempel: att minska koden (genom att ta bort onödiga mellanslag, irrelevanta konstruktioner osv.) kan pĂ„verka dess funktionalitet. NĂ€r det gĂ€ller mer betydande Ă€ndringar â sĂ„som att flytta JS-koden till slutet av HTML, sammanfoga filer och liknande â Ă€r risken för att störa webbplatsens funktionalitet Ă€nnu större.
DĂ€rför Ă€r det bara vissa CDN av typ 5 som sysslar med detta. SjĂ€lvklart gĂ„r det inte att automatisera alla förĂ€ndringar som behövs för att öka hastigheten â det krĂ€vs manuell analys och optimering. Till exempel, att ta bort oanvĂ€nd eller duplicerad kod Ă€r en manuell uppgift.
Som regel styrs alla sÄdana optimeringar av instÀllningar och de mest riskfyllda Àr inaktiverade som standard.
Stöd för accelerationsmöjligheter per CDN-typ
SÄ lÄt oss titta pÄ vilka potentiella accelerationsmöjligheter de olika typerna av CDN erbjuder.
För enkelhetens skull, lÄt oss repetera klassificeringen.
- Gratis CDN för distribution av JS-bibliotek (MaxCDN, Google, Yandex).
- CDN av tjÀnster för klientoptimering (till exempel Google Fonts för typsnitt, Cloudinary, Cloudimage för bilder).
- CDN för statiska resurser och optimering i CMS (finns i Bitrix, WordPress och andra).
- AllmÀnna CDN (StackPath, CDNVideo, NGENIX, MegaFon).
- CDN för att snabba upp webbplatser (Cloudflare, Imperva, Airy).
Nu ska vi matcha funktioner och CDN-typer.
Möjlighet
Typ 1
Typ 2
Typ 3
Typ 4
Typ 5
Textkompression
+â
â
+â
+â
+
Cachehuvuden
+
+
+
+
+
Bilder
â
+â
+â
â
+
TLS
â
â
â
+â
+
Fördröjningar
â
â
â
+
+
InnehÄll
â
â
â
â
+
I den hĂ€r tabellen anvĂ€nds â+â för att indikera fullt stöd, âââ för avsaknad, och â+ââ för partiellt stöd. SjĂ€lvklart kan det förekomma avvikelser frĂ„n denna tabell i verkligheten (till exempel kan en allmĂ€n CDN implementera bildoptimeringsfunktioner), men för en övergripande förstĂ„else Ă€r den anvĂ€ndbar.
Sammanfattning
Jag hoppas att efter att ha lĂ€st denna artikel kommer ni att fĂ„ en klarare bild av rekommendationen âanvĂ€nd CDNâ för att snabba upp webbplatser.
Som med allt bör man inte tro pÄ marknadsföringslöften frÄn nÄgon tjÀnst. Effekten bör mÀtas och kontrolleras under verkliga förhÄllanden. Om ni redan anvÀnder en viss CDN, kontrollera dess effektivitet baserat pÄ kriterierna beskrivna i artikeln.
Det Àr möjligt att anvÀndningen av CDN just nu saktar ner din webbplats.
Som en allmĂ€n rekommendation kan man stanna vid följande: Studera din publik, definiera dess geografiska ramar. Om din huvudpublik Ă€r koncentrerad inom en radie av 1-2 tusen kilometer, behöver du inte en CDN för det primĂ€ra syftet â att minska fördröjningar. IstĂ€llet kan du placera din server nĂ€rmare anvĂ€ndarna och konfigurera den pĂ„ rĂ€tt sĂ€tt, vilket ger de flesta optimeringar som beskrivs i artikeln (gratis och kontinuerligt).
Om din publik verkligen Àr geografiskt spridd (en radie pÄ mer Àn 3000 kilometer), kan anvÀndningen av ett högkvalitativt CDN vara mycket fördelaktigt. Det Àr dock viktigt att först förstÄ vad exakt som ditt CDN kan pÄskynda (se tabell över funktioner och deras beskrivningar). Att pÄskynda en webbplats förblir ÀndÄ en komplex uppgift som inte löses enbart genom att ansluta ett CDN. Förutom de nÀmnda optimeringarna kvarstÄr de mest effektiva medlen för acceleration: optimering av serverdelen, avancerade Àndringar av klientdelen (borttagning av oanvÀnd kod, optimering av renderingsprocessen, arbete med innehÄll, typsnitt, responsivitet osv.)
KĂ€lla: habr.com
