[CDN] қолданбаңыз

Сайт жылдамдығын оңтайландыруға арналған әрбір дерлік мақалада немесе құралда «CDN пайдаланыңыз» деген қарапайым тармақ бар. Жалпы алғанда, CDN - мазмұнды жеткізу желісі немесе мазмұнды жеткізу желісі. Біз Method Lab-та осы тақырып бойынша клиенттердің сұрақтарына жиі тап боламыз; олардың кейбіреулері өздерінің CDN-ін қосады. Бұл мақаланың мақсаты сайтты жүктеу жылдамдығы тұрғысынан CDN нені қамтамасыз ете алатынын, қандай мәселелер туындауы мүмкін екенін және қандай жағдайларда CDN пайдалану ақталғанын түсіну болып табылады.

[CDN] қолданбаңыз

Суретте шеңберленген кешігулер CDN пайдаланудан туындайды.

Біраз тарих

Көптеген технологиялар сияқты, CDN қажеттіліктен пайда болды. Интернетті пайдаланушылар арасында интернет-каналдардың дамуымен онлайн бейне қызметтері пайда болды. Әрине, бейне мазмұны кәдімгі веб-сайт мазмұнымен (суреттер, мәтін және CSS немесе JS коды) салыстырғанда көбірек өткізу қабілеттілігін талап етеді.

Бір серверден көптеген клиенттерге параллель бейне ағынын таратуға әрекет жасағанда, сервердің Интернет арнасы тығырыққа тірелуі мүмкін. Әдетте, әдеттегі сервер арнасын бітеу үшін бірнеше мың ағындар жеткілікті. Әрине, басқа ресурстарға шектеулер болуы мүмкін, бірақ олар қазір маңызды емес. Сервер арнасын кеңейту тым қымбат (кейде мүмкін емес), сонымен қатар практикалық емес екендігі де маңызды. Трансляция кезінде арнаға түсетін жүктеме циклдік болады.

Жеке сервердің арнасын шектеу мәселесі CDN арқылы тамаша шешілген. Клиенттер серверге тікелей емес, CDN желісіндегі түйіндерге қосылады. Идеалды жағдайда сервер бір ағынды CDN түйініне жібереді, содан кейін желі бұл ағынды көптеген пайдаланушыларға жеткізу үшін өз ресурстарын пайдаланады. Экономикалық тұрғыдан алғанда, біз тек нақты тұтынылған ресурстар үшін төлейміз (бұл өткізу қабілеттілігі немесе трафик болуы мүмкін) және қызметіміздің тамаша ауқымдылығын аламыз. Ауыр мазмұнды жеткізу үшін CDN пайдалану толығымен негізделген және қисынды. Айта кету керек, бұл кеңістіктегі ең үлкен ойыншылар (мысалы, Netflix) үлкен коммерциялық CDN-лерді (Akamai, Cloudflare, Fastly және т.

Веб дамыған сайын веб-қосымшалардың өзі де күрделене түсті. Жүктеу жылдамдығы мәселесі бірінші орынға шықты. Веб-сайт жылдамдығының энтузиастары веб-сайттардың баяу жүктелуіне әкелетін бірнеше негізгі мәселелерді тез анықтады. Олардың бірі желілік кешігулер болды (RTT - бару уақыты немесе пинг уақыты). Кешігулер веб-сайтты жүктеудегі көптеген процестерге әсер етеді: TCP қосылымын орнату, TLS сеансын бастау, әрбір жеке ресурсты жүктеу (сурет, JS файлы, HTML құжаты және т.б.)

Мәселе HTTP/1.1 протоколын пайдалану кезінде (SPDY, QUIC және HTTP/2 пайда болғанға дейін бұл жалғыз нұсқа болды) браузерлердің бір хостқа 6-дан көп емес TCP қосылымдарын ашатындығымен қиындады. Мұның бәрі қосылымның тоқтап қалуына және арна өткізу қабілетін тиімсіз пайдалануға әкелді. Мәселе доменді бөлу арқылы ішінара шешілді - қосылымдар санына шектеуді еңсеру үшін қосымша хосттарды құру.

Дәл осы жерде CDN екінші мүмкіндігі пайда болады - нүктелердің көптігі мен түйіндердің пайдаланушыға жақындығына байланысты кідірістерді азайту (RTT). Бұл жерде қашықтық шешуші рөл атқарады: жарық жылдамдығы шектеулі (оптикалық талшықта шамамен 200 000 км/сек). Бұл әрбір 1000 км жол жүру RTT-ге 5 мс кідіріс немесе 10 мс қосады дегенді білдіреді. Бұл жіберу үшін қажетті ең аз уақыт, өйткені аралық жабдықта да кешігулер бар. CDN әдетте серверлеріндегі нысандарды кэштеу жолын білетіндіктен, біз мұндай нысандарды CDN арқылы жүктеудің пайдасын көре аламыз. Бұл үшін қажетті шарттар: кэште объектінің болуы, CDN нүктесінің веб-қосымша серверімен (бастапқы сервер) салыстырғанда пайдаланушыға жақындығы. CDN түйінінің географиялық жақындығы төмен кідіріске кепілдік бермейтінін түсіну маңызды. Клиент пен CDN арасындағы маршруттау клиент басқа елдегі және мүмкін басқа континенттегі хостқа қосылатындай етіп құрылуы мүмкін. Бұл жерде байланыс операторлары мен CDN қызметі арасындағы қарым-қатынас (принг, қосылымдар, IX-ке қатысу және т.б.) және CDN трафикті маршруттау саясаты өзі ойнайды. Мысалы, Cloudflare, екі бастапқы жоспарды (тегін және арзан) пайдаланған кезде, ең жақын хосттан мазмұнды жеткізуге кепілдік бермейді - хост ең аз шығынға қол жеткізу үшін таңдалады.

Көптеген жетекші интернет-компаниялар жүктелу жылдамдығы мен веб-сайттың өнімділігі тақырыбына жұртшылықтың (веб-әзірлеушілер мен қызмет иелерінің) қызығушылығын тудырады. Бұл компаниялардың арасында Yahoo (Yslow құралы), AOL (WebPageTest) және Google (Page Speed ​​​​Insights қызметі) бар, олар сайттарды жылдамдату бойынша өз ұсыныстарын әзірлейді (ең алдымен олар клиентті оңтайландыруға қатысты). Кейінірек веб-сайт жылдамдығын сынаудың жаңа құралдары пайда болады, олар сонымен қатар веб-сайт жылдамдығын арттыру бойынша кеңестер береді. Осы қызметтердің немесе плагиндердің әрқайсысының тұрақты ұсынысы бар: «CDN пайдаланыңыз.» Желінің кешігуінің төмендеуі әдетте CDN әсерінің түсіндірмесі ретінде келтіріледі. Өкінішке орай, CDN жеделдету әсеріне қалай қол жеткізілетінін және оны қалай өлшеуге болатынын түсінуге бәрі дайын емес, сондықтан ұсыныс сенім бойынша қабылданады және постулат ретінде пайдаланылады. Шындығында, барлық CDN бірдей жасалмайды.

Бүгін CDN пайдалану

CDN пайдаланудың пайдалылығын бағалау үшін оларды жіктеу қажет. Қазір тәжірибеде не табуға болады (жақшадағы мысалдар, әрине, толық емес):

  1. JS кітапханаларын таратуға арналған тегін CDN (MaxCDN, Google. Yandex).
  2. Клиентті оңтайландыруға арналған қызметтердің CDN (мысалы, қаріптерге арналған Google Fonts, Cloudinary, кескіндерге арналған Cloudimage).
  3. CMS жүйесінде статикалық және ресурстарды оңтайландыруға арналған CDN (Bitrix, WordPress және басқаларында қол жетімді).
  4. Жалпы мақсаттағы CDN (StackPath, CDNVideo, NGENIX, Megafon).
  5. Веб-сайтты жеделдету үшін CDN (Cloudflare, Imperva, Airi).

Бұл түрлердің негізгі айырмашылығы - трафиктің қанша бөлігі CDN арқылы өтеді. 1-3 түрлері мазмұнның бір бөлігін ғана жеткізу болып табылады: бір сұраудан бірнеше ондағанға дейін (әдетте суреттер). 4 және 5 түрлері CDN арқылы трафиктің толық проксиденуі болып табылады.

Іс жүзінде бұл торапты жүктеу үшін пайдаланылатын қосылымдар санын білдіреді. HTTP/2 көмегімен біз сұраулардың кез келген санын өңдеу үшін хостқа жалғыз TCP қосылымын қолданамыз. Ресурстарды негізгі хост (шығу) және CDN деп бөлетін болсақ, онда сұрауларды бірнеше домендерге таратып, бірнеше TCP қосылымдарын жасау қажет. Ең нашар жағдай: DNS (1 RTT) + TCP (1 RTT) + TLS (2-3 RTT) = 6-7 RTT. Бұл формула құрылғының радиоарнасын (егер ол белсенді болмаса) белсендіру үшін мобильді желілердегі кідірістерді және ұялы байланыс мұнарасындағы кідірістерді ескермейді.

Сайттың жүктелу сарқырамасында ол келесідей көрінеді (CDN-ге қосылудың кідірістері RTT 150 мс-те бөлектелген):

[CDN] қолданбаңыз

Егер CDN барлық сайт трафигін қамтыса (үшінші тарап қызметтерінен басқа), онда біз қосымша хосттарға қосылудағы кідірісті үнемдей отырып, жалғыз TCP қосылымын пайдалана аламыз. Әрине, бұл HTTP/2 қосылымдарына қатысты.

Одан әрі айырмашылықтар белгілі бір CDN функционалдығымен анықталады - бірінші түрі үшін ол жай ғана статикалық файлды орналастырады, бесінші үшін оңтайландыру мақсатында сайт мазмұнының бірнеше түрін өзгертеді.

Веб-сайтты жеделдету үшін CDN мүмкіндіктері

CDN-дің жеке түрлерінің функционалдығын ескермей, сайттарды жеделдету үшін CDN мүмкіндіктерінің толық спектрін сипаттап көрейік, содан кейін олардың әрқайсысында не жүзеге асырылатынын көрейік.

1. Мәтіндік ресурстарды қысу

Ең негізгі және түсінікті мүмкіндік, бірақ жиі нашар жүзеге асырылады. Барлық CDN-тер олардың жеделдету мүмкіндігі ретінде қысудың болуын жариялайды. Бірақ толығырақ қарастырсаңыз, кемшіліктер анық болады:

  • динамикалық қысу үшін төмен дәрежелерді қолдануға болады - 5-6 (мысалы, gzip үшін максимум 9);
  • статикалық қысу (кэштегі файлдар) қосымша мүмкіндіктерді пайдаланбайды (мысалы, zopfi немесе 11 дәрежелі brotli)
  • тиімді бротли қысу үшін қолдау жоқ (gzip-пен салыстырғанда шамамен 20% үнемдеу).

CDN пайдалансаңыз, мына бірнеше тармақты тексерген жөн: CDN-ден келген файлды алыңыз, оның қысылған өлшемін жазып алыңыз және салыстыру үшін оны қолмен қысыңыз (мысалы, brotli қолдауы бар кейбір онлайн қызметін пайдалануға болады. vsszhat.rf).

2. Клиент кэштеу тақырыптарын орнату

Сондай-ақ қарапайым жылдамдату мүмкіндігі: клиент (браузер) арқылы мазмұнды кэштеу үшін тақырыптарды қосыңыз. Ең ағымдағы тақырып - кэш-басқару, ескіргеннің мерзімі аяқталды. Сонымен қатар, Etag пайдалануға болады. Ең бастысы, кэш-бақылаудың максималды жасы жеткілікті үлкен (бір айдан немесе одан да көп) Егер сіз ресурсты мүмкіндігінше қатты кэштеуге дайын болсаңыз, өзгермейтін опцияны қосуға болады.

CDNs максималды жас мәнін төмендетуі мүмкін, бұл пайдаланушыны статикалық мазмұнды жиі қайта жүктеуге мәжбүр етеді. Бұл немен байланысты екені белгісіз: желідегі трафикті арттыру немесе кэшті қалпына келтіруді білмейтін сайттармен үйлесімділікті арттыру ниеті. Мысалы, Cloudflare тақырыбының әдепкі кэш уақыты 1 сағатты құрайды, бұл өзгермейтін статикалық деректер үшін өте төмен.

3. Суретті оңтайландыру

CDN кескіндерді кэштеу және қызмет көрсету функцияларын қабылдайтындықтан, оларды CDN жағында оңтайландыру және осы пішінде пайдаланушыларға қызмет көрсету қисынды болар еді. Бұл мүмкіндік тек CDN 2, 3 және 5 түрлері үшін қолжетімді екенін бірден ескертейік.

Кескіндерді әртүрлі жолдармен оңтайландыруға болады: кеңейтілген қысу пішімдерін (мысалы, WebP), тиімдірек кодтауыштарды (MozJPEG) пайдалану немесе қажетсіз метадеректерді тазалау.

Жалпы, мұндай оңтайландырудың екі түрі бар: сапаны жоғалтумен және сапаны жоғалтпай. CDN әдетте кескін сапасының өзгеруіне тұтынушылардың шағымдарын болдырмау үшін шығынсыз оңтайландыруды қолдануға тырысады. Мұндай жағдайларда пайда минималды болады. Шындығында, көбінесе JPEG сапа деңгейі қажетті деңгейден әлдеқайда жоғары және пайдаланушы тәжірибесіне зиян келтірместен төменірек сапа деңгейімен қауіпсіз қайта сығуға болады. Екінші жағынан, барлық ықтимал веб-қосымшалар үшін сапа мен параметрлер деңгейін әмбебап анықтау қиын, сондықтан CDN контекстті (суреттердің мақсаты, веб-қосымшаның түрі) ескере отырып қолдануға болатындармен салыстырғанда консервативті параметрлерді пайдаланады. , т.б.)

4. TLS қосылымын оңтайландыру

Бүгінгі таңда трафиктің көп бөлігі TLS қосылымдары арқылы өтеді, бұл біз TLS келіссөздеріне қосымша уақыт жұмсайтынымызды білдіреді. Жақында бұл процесті жеделдету үшін жаңа технологиялар әзірленді. Мысалы, бұл EC криптографиясы, TLS 1.3, сеанс кэш және билеттер, аппараттық шифрлауды жеделдету (AES-NI) және т.б.. TLS дұрыс орнату қосылым уақытын 0-1 RTT (DNS және TCP есептемегенде) дейін қысқартуы мүмкін.

Заманауи бағдарламалық жасақтамамен мұндай тәжірибелерді өз бетімен жүзеге асыру қиын емес.

Барлық CDNs TLS ең жақсы тәжірибелерін енгізе бермейді; мұны TLS қосылу уақытын өлшеу арқылы тексеруге болады (мысалы, Webpagetest). Жаңа қосылым үшін өте қолайлы - 1RTT, 2RTT - орташа деңгей, 3RTT және одан да көп - нашар.

Сондай-ақ, CDN деңгейінде TLS пайдаланған кезде де біздің веб-қосымшасы бар сервер TLS өңдеуі керек, бірақ CDN жағынан, өйткені сервер мен CDN арасындағы трафик жалпыға ортақ желіде өтетінін атап өткен жөн. Ең нашар жағдайда, біз қос TLS қосылымының кешігуін аламыз (біріншісі CDN хостына, екіншісі онымен сервер арасында).

Кейбір қолданбалар үшін қауіпсіздік мәселелеріне назар аударған жөн: трафик әдетте CDN түйіндерінде шифрленеді және бұл трафикті ұстаудың әлеуетті мүмкіндігі. Трафикті ашпай жұмыс істеу опциясы әдетте қосымша ақыға жоғарғы тарифтік жоспарларда ұсынылады.

5. Қосылым кідірістерін азайтыңыз

Барлығы айтатын CDN негізгі артықшылығы: CDN хосты мен пайдаланушы арасындағы төмен кідіріс (аз қашықтық). Хосттар пайдаланушылардың шоғырланған нүктелерінде (қалалар, трафик алмасу нүктелері және т.б.) орналасқан географиялық бөлінген желі архитектурасын құру арқылы қол жеткізілді.

Іс жүзінде әртүрлі желілер үшін басымдықтар нақты аймақтарда болуы мүмкін. Мысалы, ресейлік CDNs Ресейде көбірек қатысу нүктелеріне ие болады. Америкалықтар желіні ең алдымен АҚШ-та дамытады. Мысалы, ең үлкен CDN Cloudflare бірі Ресейде - Мәскеу мен Санкт-Петербургте тек 2 ұпайға ие. Яғни, біз Мәскеуде тікелей орналастырумен салыстырғанда ең көп дегенде 10 мс кешіктіру уақытын үнемдей аламыз.

Батыс CDN-лерінің көпшілігінің Ресейде нүктелері мүлдем жоқ. Оларға қосылу арқылы сіз тек ресейлік аудитория үшін кідірістерді арттыра аласыз.

6. Мазмұнды оңтайландыру (кішірейту, құрылымдық өзгерістер)

Ең күрделі және технологиялық тұрғыдан жетілдірілген нүкте. Жеткізу кезінде мазмұнды өзгерту өте қауіпті болуы мүмкін. Тіпті кішірейтуді алсақ та: бастапқы кодты азайту (қосымша кеңістіктерге, маңызды емес құрылымдарға және т.б. байланысты) оның жұмысына әсер етуі мүмкін. Егер біз неғұрлым күрделі өзгерістер туралы айтатын болсақ - JS кодын HTML соңына жылжыту, файлдарды біріктіру және т.б. - сайттың функционалдығын бұзу қаупі одан да жоғары.

Сондықтан мұны тек кейбір 5 типті CDN жасайды. Әрине, жұмысты жылдамдату үшін қажетті барлық өзгерістерді автоматтандыру мүмкін болмайды — қолмен талдау және оңтайландыру қажет. Мысалы, пайдаланылмаған немесе қайталанатын кодты жою қолмен орындалатын тапсырма болып табылады.

Әдетте, мұндай оңтайландырулардың барлығы параметрлермен басқарылады және ең қауіптілері әдепкі бойынша өшіріледі.

CDN түрі бойынша жеделдету мүмкіндіктерін қолдау

Сонымен, CDN әртүрлі түрлері қандай әлеуетті жеделдету мүмкіндіктерін беретінін қарастырайық.

Ыңғайлы болу үшін біз жіктеуді қайталаймыз.

  1. JS кітапханаларын таратуға арналған тегін CDN (MaxCDN, Google. Yandex).
  2. Клиентті оңтайландыруға арналған қызметтердің CDN (мысалы, қаріптерге арналған Google Fonts, Cloudinary, кескіндерге арналған Cloudimage).
  3. CMS жүйесінде статикалық және ресурстарды оңтайландыруға арналған CDN (Bitrix, WordPress және басқаларында қол жетімді).
  4. Жалпы мақсаттағы CDN (StackPath, CDNVideo, NGENIX, Megafon).
  5. Веб-сайтты жеделдету үшін CDN (Cloudflare, Imperva, Airi).

Енді CDN мүмкіндіктері мен түрлерін салыстырайық.

Қабілеті
1 тип
2 тип
3 тип
4 тип
5 тип

Мәтінді қысу
+ -
-
+ -
+ -
+

Кэш тақырыптары
+
+
+
+
+

суреттер
-
+ -
+ -
-
+

TLS
-
-
-
+ -
+

Кешігулер
-
-
-
+
+

Мазмұны
-
-
-
-
+

Бұл кестеде «+» толық қолдауды көрсету үшін пайдаланылады, «–» қолдау жоқ, «+–» ішінара қолдау көрсету. Әрине, бұл кестеден ауытқулар болуы мүмкін (мысалы, кейбір жалпы мақсаттағы CDN кескіндерді оңтайландыру мүмкіндіктерін іске асырады), бірақ жалпы идея үшін бұл пайдалы.

Нәтижелері

Осы мақаланы оқығаннан кейін сіз сайттарыңызды жылдамдату үшін «CDN пайдалану» ұсынысына қатысты нақтырақ суретке ие боласыз деп үміттенеміз.

Кез келген бизнестегідей, сіз кез келген қызметтің маркетингтік уәделеріне сене алмайсыз. Әсерді нақты жағдайларда өлшеу және сынау қажет. Егер сіз CDN пайдаланып жатсаңыз, мақалада сипатталған критерийлерді қолдана отырып, оның тиімділігін тексеріңіз.

CDN-ді дәл қазір пайдалану сайттың жүктелу уақытын баяулатуы мүмкін.

Жалпы ұсыныс ретінде біз мыналарға назар аудара аламыз: аудиторияңызды зерттеңіз, оның географиялық ауқымын анықтаңыз. Егер сіздің негізгі аудиторияңыз 1-2 мың километр радиуста шоғырланған болса, оның негізгі мақсаты – кідірісті азайту үшін CDN қажет емес. Оның орнына сіз мақалада сипатталған оңтайландырулардың көпшілігін (тегін және тұрақты) ала отырып, серверіңізді пайдаланушыларға жақынырақ орналастырып, оны дұрыс конфигурациялай аласыз.

Аудиторияңыз шынымен географиялық тұрғыдан бөлінген жағдайда (радиусы 3000 километрден астам), сапалы CDN пайдалану шынымен пайдалы болады. Дегенмен, CDN нақты нені жылдамдата алатынын алдын ала түсінуіңіз керек (мүмкіндіктер кестесін және олардың сипаттамасын қараңыз). Дегенмен, веб-сайтты жеделдету әлі де CDN қосу арқылы шешілмейтін күрделі міндет болып қала береді. Жоғарыда аталған оңтайландырулардан басқа, CDN-нің артында жеделдетудің ең тиімді құралдары қалады: сервер бөлігін оңтайландыру, клиент бөлігіне кеңейтілген өзгертулер (пайдаланылмаған кодты жою, көрсету процесін оңтайландыру, мазмұнмен жұмыс істеу, қаріптер, бейімделу және т.б.). )

Ақпарат көзі: www.habr.com

пікір қалдыру