Ndërtimi dhe konfigurimi i CDN-së tuaj

Rrjetet e shpërndarjes së përmbajtjes (CDN) përdoren në faqet e internetit dhe aplikacionet kryesisht për të shpejtuar ngarkimin e elementeve statike. Kjo ndodh për shkak të ruajtjes së skedarëve në serverët CDN të vendosur në rajone të ndryshme gjeografike. Duke kërkuar të dhëna nëpërmjet CDN, përdoruesi i merr ato nga serveri më i afërt.

Parimi i funksionimit dhe funksionalitetit të të gjitha rrjeteve të shpërndarjes së përmbajtjes është afërsisht i njëjtë. Pasi ka marrë një kërkesë për të shkarkuar një skedar, serveri CDN e merr atë një herë nga serveri origjinal dhe ia jep përdoruesit, në të njëjtën kohë duke e ruajtur në memorie për një periudhë të caktuar kohe. Të gjitha kërkesat e mëvonshme janë përgjigjur nga cache. Të gjitha CDN-të kanë opsione për të ngarkuar paraprakisht skedarë, për të pastruar cache, për të vendosur datën e skadimit dhe më shumë.

Ndodh që, për një arsye ose një tjetër, duhet të organizoni rrjetin tuaj të shpërndarjes së përmbajtjes, dhe më pas - le të na ndihmojnë udhëzimet për montimin e biçikletës tjetër.

Ndërtimi dhe konfigurimi i CDN-së tuaj
Burimi: Vektori infografik i krijuar nga pikisuperstar - www.freepik.com

Kur keni nevojë për CDN-në tuaj

Merrni parasysh rastet kur drejtimi i CDN-së tuaj ka kuptim:

  • kur ka një dëshirë për të kursyer para dhe kostot e funksionimit edhe kur përdorni CDN të lira si BunnyCDN arrijnë në disa qindra dollarë në muaj
  • nëse duam të marrim një cache të përhershme ose një cache pa fqinjë të serverit dhe kanalit
  • Shërbimet CDN nuk kanë pika prezence në rajonin që ju nevojitet
  • kërkohet çdo cilësim i veçantë i ofrimit të përmbajtjes
  • ne duam të përshpejtojmë shpërndarjen e përmbajtjes dinamike duke e vendosur serverin e prodhimit më afër përdoruesve
  • ekziston shqetësimi se një shërbim CDN e palëve të treta mund të mbledhë ose përdorë në mënyrë të paligjshme informacione rreth sjelljes së përdoruesit (përshëndetje shërbime që nuk përputhen me GDPR) ose të përfshihet në aktivitete të tjera të paligjshme

Në shumicën e rasteve të tjera, është më e përshtatshme të përdoren zgjidhjet ekzistuese të gatshme.

Çfarë ju duhet për të filluar

Është e mrekullueshme nëse keni Sistemin tuaj Autonom (AS). Me të, ju mund të caktoni të njëjtën IP në disa serverë dhe sipas këtij udhëzimi në nivel rrjeti, drejtojini përdoruesit tek ai më i afërti. Vlen të thuhet se edhe me bllokun e adresave /24, është e mundur të ndërtohet një rrjet i shpërndarjes së përmbajtjes. Disa ofrues serverësh ju lejojnë të bëni një njoftim për përdorim në të gjitha rajonet e disponueshme për ta.

Nëse nuk jeni pronar i lumtur i një blloku adresash IP, atëherë për të ekzekutuar një CDN të thjeshtë do t'ju duhet:

  • emri i domenit ose nëndomeni
  • të paktën dy serverë në rajone të ndryshme. Serveri mund të jetë ose i dedikuar ose virtual
  • mjet geoDNS. Me ndihmën e tij, përdoruesi, pasi i është drejtuar domenit, do të drejtohet në serverin më të afërt

Regjistroni një domen dhe porositni serverë

Me regjistrimin e domenit, gjithçka është e thjeshtë - ne regjistrohemi në çdo zonë me çdo regjistrues. Ju gjithashtu mund të përdorni një nëndomain për një CDN, për shembull diçka të tillë cdn.domainname.com. Në fakt, në shembullin tonë, ne do të bëjmë pikërisht këtë.

Sa i përket porositjes së serverëve, ata duhet të merren me qira në rajonet dhe vendet ku ndodhet audienca juaj e përdoruesit. Nëse projekti është ndërkontinental, atëherë është i përshtatshëm të zgjidhni ofruesit e pritjes që ofrojnë serverë në të gjithë botën menjëherë. Shembuj: OVH, ueb me qira и 100 Tb - për serverë të dedikuar, Vultr и DigitalOcean — për renë virtuale*.

Për CDN-në tonë private, ne do të porosisim 3 serverë virtualë në kontinente të ndryshme. Në Vultr në server për 5 dollarë/muaj do të marrim 25GB SSD vende dhe 1 TB trafik. Kur instaloni, zgjidhni Debian-in më të fundit. Serverët tanë:

Ndërtimi dhe konfigurimi i CDN-së tuaj Frankfurt, ip: 199.247.18.199

Ndërtimi dhe konfigurimi i CDN-së tuaj Çikago, ip: 149.28.121.123

Ndërtimi dhe konfigurimi i CDN-së tuaj Singapore, ip: 157.230.240.216

* Vultr dhe DigitalOcean premtojnë kredi 100 dollarësh për përdoruesit që regjistrohen përmes lidhjeve në artikull menjëherë pasi kanë shtuar një mënyrë pagese. Nga kjo autori merr edhe një kompliment të vogël, shumë domethënës për të tani. Ju lutem tregohuni të mirëkuptueshëm.

Vendosja e geoDNS

Në mënyrë që përdoruesi të drejtohet në serverin e dëshiruar (më të afërt) kur hyn në një domen ose nëndomain CDN, na duhet një server DNS me funksionin geoDNS.

Parimi dhe funksionimi i geoDNS është si më poshtë:

  1. Përcakton IP-në e klientit që dërgoi kërkesën DNS ose IP-në e serverit rekurziv DNS që përdoret gjatë përpunimit të kërkesës së klientit. Serverë të tillë rekurzivë janë zakonisht DNS-të e ofruesve.
  2. IP e klientit njeh vendin ose rajonin e tij. Për këtë përdoren bazat e të dhënave GeoIP, prej të cilave sot ka shumë. Ka të mira opsione falas.
  3. Në varësi të vendndodhjes së klientit, i jep atij adresën IP të serverit më të afërt CDN.

Serveri DNS me funksion geoDNS mund të jetë mblidheni vetë, por është më mirë të përdorni zgjidhje të gatshme me një rrjet serverësh DNS në të gjithë botën dhe Anycast nga kutia:

  • CloudDNS nga 9.95 dollarë/muaj, tarifa GeoDNS, si parazgjedhje ka një DNS Failover
  • Zilore nga 25 dollarë/muaj, DNS Failover i aktivizuar
  • Amazon Route 53 nga 35 dollarë/muaj për një gjeo-kërkesa neto prej 50 milion. DNS Failover faturohet veçmas
  • DNS bërë lehtë nga 125 dollarë/muaj, ka 10 DNS Failovers
  • CloudFlare, funksioni "Geo Steering" ofrohet në planet e Ndërmarrjeve

Kur porosisni geoDNS, duhet t'i kushtoni vëmendje numrit të kërkesave të përfshira në tarifë dhe mbani në mend se numri aktual i kërkesave në domen mund të tejkalojë pritjet për disa herë. Miliona merimanga, skanerë, spammers dhe shpirtra të tjerë të këqij punojnë pa u lodhur.

Pothuajse të gjitha shërbimet DNS përfshijnë një shërbim të domosdoshëm për ndërtimin e një CDN - DNS Failover. Me ndihmën e tij, ju mund të vendosni monitorimin e funksionimit të serverëve tuaj dhe, në mungesë të shenjave të jetës, të zëvendësoni automatikisht adresën e një serveri që nuk funksionon me një rezervë në përgjigjet DNS.

Për të ndërtuar CDN-në tonë, ne do të përdorim cloudDNS, tarifa GeoDNS.

Le të shtojmë një zonë të re DNS në llogarinë tuaj personale, duke specifikuar domenin tuaj. Nëse po ndërtojmë një CDN në një nëndomain dhe domeni kryesor është tashmë në përdorim, atëherë menjëherë pas shtimit të zonës, mos harroni të shtoni të dhënat ekzistuese të funksionimit DNS. Hapi tjetër është krijimi i disa rekordeve A për domenin / nëndomain CDN, secila prej të cilave do të aplikohet në rajonin që kemi specifikuar. Ju mund të specifikoni kontinentet ose vendet si rajone, nënrajonet janë të disponueshme për SHBA dhe Kanada.

Në rastin tonë, CDN do të ngrihet në një nëndomain cdn.sayt.in. Duke shtuar një zonë thuaj.në, krijoni rekordin e parë A për nëndomenin dhe drejtojeni të gjithë Amerikën e Veriut te serveri në Çikago:

Ndërtimi dhe konfigurimi i CDN-së tuaj
Le të përsërisim veprimin për rajonet e tjera, duke kujtuar të krijojmë një hyrje për rajonet e paracaktuara. Ja çfarë ndodh në fund:

Ndërtimi dhe konfigurimi i CDN-së tuaj

Hyrja e fundit e paracaktuar në pamjen e ekranit do të thotë që të gjitha rajonet e paspecifikuara (dhe këto janë Evropa, Afrika, përdoruesit e internetit satelitore, etj.) do të dërgohen në serverin në Frankfurt.

Kjo përfundon konfigurimin bazë të DNS. Mbetet për të shkuar në faqen e internetit të regjistruesit të domenit dhe për të zëvendësuar NS-të aktuale të domenit me ato të lëshuara nga ClouDNS. Dhe ndërsa NS-të do të përditësohen, ne do të përgatisim serverët.

Instalimi i certifikatave SSL

CDN-ja jonë do të funksionojë mbi HTTPS, kështu që nëse tashmë keni certifikata SSL për një domen ose nëndomain, ngarkoni ato në të gjithë serverët, për shembull, në drejtori /etc/ssl/yourdomain/

Nëse nuk ka certifikata, mund të merrni një falas nga Let's Encrypt. E përkryer për këtë ACME Shellscript. Klienti është i përshtatshëm dhe i lehtë për t'u konfiguruar, dhe më e rëndësishmja, ju lejon të vërtetoni një domen/nëndomain nga DNS nëpërmjet API-së së ClouDNS.

Ne do të instalojmë acme.sh vetëm në një nga serverët - European 199.247.18.199, nga i cili certifikatat do të kopjohen në të gjithë të tjerët. Për të instaluar, ekzekutoni:

root@cdn:~# wget -O - https://get.acme.sh | bash; source ~/.bashrc

Gjatë instalimit të skriptit, do të krijohet një punë CRON për rinovim të mëtejshëm të certifikatave pa pjesëmarrjen tonë.

Kur lëshoni një certifikatë, domeni do të kontrollohet duke përdorur DNS duke përdorur API, kështu që në llogarinë personale të ClouDNS në menynë e Reseller API, duhet të krijoni një API të ri të përdoruesit dhe të vendosni një fjalëkalim për të. ID-ja që rezulton me një fjalëkalim do të shkruhet në skedar ~/.acme.sh/dnsapi/dns_cloudns.sh (të mos ngatërrohet me skedarin dns_clouddns.sh). Këtu janë rreshtat që duhet të mos komentohen dhe modifikohen:

CLOUDNS_AUTH_ID=<auth-id>
CLOUDNS_AUTH_PASSWORD="<пароль>"

Tani do të kërkojmë një certifikatë SSL për cdn.sayt.in

root@cdn:~# acme.sh --issue --dns dns_cloudns -d cdn.sayt.in --reloadcmd "service nginx reload"

Në opsionet, për të ardhmen, ne kemi specifikuar një komandë për të ringarkuar automatikisht konfigurimin e serverit të uebit pas çdo rinovimi të periudhës së vlefshmërisë së certifikatës në të ardhmen.

I gjithë procesi i marrjes së një certifikate mund të zgjasë deri në 2 minuta, mos e ndërprisni atë. Nëse ndodh një gabim i vërtetimit të domenit, provoni të ekzekutoni përsëri komandën. Në fund do të shohim se ku janë ngarkuar certifikatat:

Ndërtimi dhe konfigurimi i CDN-së tuaj

Mos harroni këto shtigje, ato do të duhet të specifikohen kur kopjoni certifikatën në serverë të tjerë, si dhe në cilësimet e serverit në internet. Ne nuk i kushtojmë vëmendje gabimit të ringarkimit të konfigurimeve Nginx - ai nuk do të jetë në një server plotësisht të konfiguruar kur përditësoni certifikatat.

Gjithçka që na ka mbetur për SSL është të kopjojmë certifikatën e marrë në dy serverë të tjerë duke ruajtur rrugën drejt skedarëve. Le të krijojmë të njëjtat drejtori në secilën prej tyre dhe të bëjmë një kopje:

root@cdn:~# mkdir -p /root/.acme.sh/cdn.sayt.in/
root@cdn:~# scp -r [email protected]:/root/.acme.sh/cdn.sayt.in/* /root/.acme.sh/cdn.sayt.in/

Për të përditësuar rregullisht certifikatat, krijoni një punë të përditshme CRON në të dy serverët me komandën:

scp -r [email protected]:/root/.acme.sh/cdn.sayt.in/* /root/.acme.sh/cdn.sayt.in/ && service nginx reload

Në këtë rast, qasja në serverin e burimit në distancë duhet të konfigurohet me çelës, d.m.th. pa futur një fjalëkalim. Mos harroni ta bëni.

Instalimi dhe konfigurimi i Nginx

Për të shërbyer përmbajtje statike, ne do të përdorim Nginx të konfiguruar si një server proxy për ruajtjen e memories. Përditësoni listat e paketave dhe instaloni atë në të tre serverët:

root@cdn:~# apt update
root@cdn:~# apt install nginx

Në vend të parazgjedhjes, ne përdorim konfigurimin nga spoileri më poshtë:
nginx.konf

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
    worker_connections 4096;
    multi_accept on;
}

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    types_hash_max_size 2048;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    access_log off;
    error_log /var/log/nginx/error.log;

    gzip on;
    gzip_disable "msie6";
    gzip_comp_level 6;
    gzip_proxied any;
    gzip_vary on;
    gzip_types text/plain application/javascript text/javascript text/css application/json application/xml text/xml application/rss+xml;
    gunzip on;            

    proxy_temp_path    /var/cache/tmp;
    proxy_cache_path   /var/cache/cdn levels=1:2 keys_zone=cdn:64m max_size=20g inactive=7d;
    proxy_cache_bypass $http_x_update;

server {
  listen 443 ssl;
  server_name cdn.sayt.in;

  ssl_certificate /root/.acme.sh/cdn.sayt.in/cdn.sayt.in.cer;
  ssl_certificate_key /root/.acme.sh/cdn.sayt.in/cdn.sayt.in.key;

  location / {
    proxy_cache cdn;
    proxy_cache_key $uri$is_args$args;
    proxy_cache_valid 90d;
    proxy_pass https://sayt.in;
    }
  }
}

Ndrysho në konfigurimin:

  • madhësia max - madhësia e cache-it, duke mos e tejkaluar hapësirën e disponueshme të diskut
  • joaktiv - koha e ruajtjes së të dhënave të ruajtura në memorie të fshehtë që askush nuk i ka akses
  • ssl_certifikatë и ssl_certificate_key — shtigjet drejt certifikatës SSL dhe skedarëve kyç
  • proxy_cache_valid - koha e ruajtjes së të dhënave të memorizuara
  • proxy_pass — adresa e serverit origjinal nga i cili CDN do të kërkojë skedarë për caching. Në shembullin tonë, kjo thuaj.në

Siç mund ta shihni, gjithçka është e thjeshtë. Vështirësi mund të lindin vetëm në përcaktimin e kohës së memorizimit për shkak të ngjashmërisë së direktivave joaktiv и proxy_cache_valid. Le t'i analizojmë ato me shembullin tonë. Ja çfarë ndodh kur joaktiv=7d и proxy_cache_valid 90d:

  • nëse kërkesa nuk përsëritet brenda 7 ditëve, atëherë të dhënat do të fshihen nga cache pas kësaj periudhe
  • nëse kërkesa përsëritet të paktën një herë në 7 ditë, atëherë të dhënat në cache do të konsiderohen të vjetruara pas 90 ditësh dhe Nginx do ta përditësojë atë me kërkesën tjetër, duke i marrë nga serveri origjinal.

Përfundoi për të redaktuar nginx.konf, ringarkoni konfigurimin:

root@cdn:~# service nginx reload

CDN-ja jonë është gati. Për 15 dollarë në muaj. morëm pika prezence në tre kontinente dhe 3 TB trafik: 1 TB në çdo vend.

Kontrollimi i punës së CDN

Le të shohim ping-t në CDN-në tonë nga vende të ndryshme gjeografike. Çdo shërbim ping do të funksionojë për këtë.

Pika e nisjes
mikpritës
IP
Koha mesatare, ms

Gjermani Berlin
cdn.sayt.in
199.247.18.199
9.6

Holandë, Amsterdam
cdn.sayt.in
199.247.18.199
10.1

Francë Paris
cdn.sayt.in
199.247.18.199
16.3

Mbretëria e Bashkuar, Londër
cdn.sayt.in
199.247.18.199
14.9

Kanada, Toronto
cdn.sayt.in
149.28.121.123
16.2

SHBA, San Francisko
cdn.sayt.in
149.28.121.123
52.7

SHBA, Dallas
cdn.sayt.in
149.28.121.123
23.1

SHBA, Çikago
cdn.sayt.in
149.28.121.123
2.6

SHBA, Nju Jork
cdn.sayt.in
149.28.121.123
19.8

Singapore
cdn.sayt.in
157.230.240.216
1.7

Japoni Tokio
cdn.sayt.in
157.230.240.216
74.8

Australi, Sydney
cdn.sayt.in
157.230.240.216
95.9

Rezultatet janë të mira. Tani do të vendosim një imazh provë në rrënjën e faqes kryesore test.jpg dhe kontrolloni shpejtësinë e shkarkimit të tij përmes CDN. Është e thënë - i bërë. Përmbajtja shpërndahet shpejt.

Le të shkruajmë një skript të vogël në rast se duam të pastrojmë cache-në në pikën CDN.
spastrim.sh

#!/bin/bash
if [ -z "$1" ]
then
    echo "Purging all cache"
    rm -rf /var/cache/cdn/*
else
    echo "Purging $1"
    FILE=`echo -n "$1" | md5sum | awk '{print $1}'`
    FULLPATH=/var/cache/cdn/${FILE:31:1}/${FILE:29:2}/${FILE}
    rm -f "${FULLPATH}"
fi

Për të fshirë të gjithë cache, thjesht ekzekutoni atë, një skedar i veçantë mund të pastrohet si kjo:

root@cdn:~# ./purge.sh /test.jpg

Në vend të konkluzioneve

Së fundi, dua të jap disa këshilla të dobishme për të kapërcyer menjëherë grabujën që më dhimbte koka në atë kohë:

  • Për të rritur tolerancën e gabimeve të CDN-së, rekomandohet të konfiguroni DNS Failover, i cili ndihmon në ndryshimin e shpejtë të rekordit A në rast të prishjes së serverit. Kjo bëhet në të dhënat DNS të panelit të kontrollit të domenit.
  • Faqet me mbulim të gjerë gjeografik pa dyshim kërkojnë një numër të madh CDN-sh, por le të mos jemi fanatikë. Me shumë mundësi, përdoruesi nuk do të vërejë një ndryshim të rëndësishëm në krahasim me një CDN të paguar nëse vendosni serverë në 6-7 vendndodhje: Evropë, Amerikën e Veriut (lindje), Amerikën e Veriut (perëndim), Singapor, Australi, Hong Kong ose Japoni.
  • Ndonjëherë hostet nuk lejojnë përdorimin e serverëve të marrë me qira për qëllime CDN. Prandaj, nëse papritmas vendosni të vendosni një rrjet të ofrimit të përmbajtjes si shërbim, mos harroni të lexoni paraprakisht rregullat e një ofruesi të caktuar pritës
  • Eksploroni harta e komunikimit nënujorpër të përfaqësuar mënyrën se si janë të lidhura kontinentet dhe për ta marrë këtë parasysh kur ndërtoni një rrjet të ofrimit të përmbajtjes
  • Mundohuni të kontrolloni ping nga vende të ndryshme te serverët tuaj. Në këtë mënyrë ju mund të shihni rajonet më afër pikave CDN dhe të konfiguroni GeoDNS më saktë
  • Në varësi të detyrave, do të jetë e dobishme të rregulloni mirë Nginx për kërkesat specifike të memorizimit dhe duke marrë parasysh ngarkesën në server. Artikujt në lidhje me cache Nginx më ndihmuan shumë në këtë - këtu dhe përshpejtimi i punës nën ngarkesa të rënda: këtu и këtu

Burimi: www.habr.com