Rrjetet e shpërndarjes së përmbajtjes (CDN) përdoren në faqet e internetit dhe në aplikacione kryesisht për të përshpejtuar ngarkimin e elementeve statike. Kjo ndodh përmes ruajtjes së skedarëve në serverat e CDN, të vendosur në regione të ndryshme gjeografike. Duke kërkuar të dhëna përmes CDN, përdoruesi i merr ato nga serveri më i afërt.
Principi i funksionimit dhe funksionaliteti i të gjitha rrjeteve të shpërndarjes së përmbajtjes janë në thelb të ngjashme. Pasi të marrë një kërkesë për ngarkimin e një skedari, serveri i CDN e merr atë një herë nga serveri origjinal dhe ia dorëzon përdoruesit, duke e ruajtur gjithashtu në cache për një periudhë të caktuar kohe. Për të gjitha kërkesat e mëvonshme, përgjigjja jepet nga cache. Të gjitha CDN kanë mundësi përpara ngarkimit të skedarëve, pastrimit të cache-it, konfigurimit të afatit të ruajtjes së tij dhe shumë më tepër.
NdonjĂ«herĂ«, pĂ«r shkak tĂ« arsyeve tĂ« ndryshme, kĂ«rkohet tĂ« organizohet njĂ« rrjet i vetĂ«-shpĂ«rndarjes sĂ« pĂ«rmbajtjes, dhe atĂ«herĂ« â ja njĂ« udhĂ«zues pĂ«r ndĂ«rtimin e njĂ« vegle tjetĂ«r.

Burimi:
Kur nevojitet një CDN e vetë
Le të shqyrtojmë rastet kur ka kuptim të nisësh një CDN të vetë:
- kur ka dëshira për të kursyer, ndërsa shpenzimet aktuale, edhe me përdorimin e CDN të lira si kanë disa qindra dollarë në muaj
- nëse duam të kemi në mënyrë të vazhdueshme cache ose cache pa fqinjë në server dhe kanal
- në rajonin tuaj të dëshiruar, shërbimet CDN nuk kanë pika prezence
- nevojiten ndonjë konfigurim i veçantë për dorëzimin e përmbajtjes
- duam të përshpejtojmë shpërndarjen e përmbajtjes dinamike, duke vendosur serverët e prodhimit më afër përdoruesve
- ka shqetësime se një shërbim CDN i tretë mund të mbledhë ose përdorë pa lejë informacionin mbi sjelljen e përdoruesve (përshëndetje shërbimeve që nuk janë në përputhje me GDPR) ose të angazhohet në veprime të tjera të papranueshme
Në shumicën e rasteve të tjera, është më e arsyeshme të përdoren zgjidhjet e gatshme ekzistuese.
ĂfarĂ« Ă«shtĂ« e nevojshme pĂ«r tĂ« filluar
Shumë mirë nëse keni sistemin tuaj autonom (AS). Me të mund të caktoni IP të njëjtë për disa serverë dhe në nivelin e rrjetit, drejto përdoruesit te më të afërmit. Duhet thënë se edhe me një bllok adresash /24 ka mundësi për të ndërtuar një rrjet të shpërndarjes së përmbajtjes. Disa ofrues serverësh lejojnë të bëhet një njoftim për përdorim në të gjitha rajonet e disponueshme prej tyre.
Nëse nuk jeni një fatlum që dispononi një bllok IP adresh, për të nisur një CDN të thjeshtë do t'ju nevojiten:
- një emër domaini ose subdomain
- të paktën dy serverë në rajone të ndryshme. Serveri mund të jetë si i dedikuar ashtu edhe virtual
- geoDNSâa Ă«shtĂ« njĂ« mjet. Me ndihmĂ«n e tij, pĂ«rdoruesi, duke iu drejtuar domenit, do tĂ« drejtosh nĂ« serverin mĂ« tĂ« afĂ«rt
Regjistrojmë domenin dhe porosisim serverat
Me regjistrimin e domenit gjithçka Ă«shtĂ« e thjeshtĂ« â regjistrojmĂ« nĂ« çdo zonĂ« tek çdo regjistrues. Po ashtu pĂ«r CDN mund tĂ« pĂ«rdorim njĂ« subdomain, pĂ«r shembull diçka si cdn.emridomenit.com. NĂ« fakt, nĂ« shembullin tonĂ« do ta bĂ«jmĂ« kĂ«shtu.
Sa i pĂ«rket porosisĂ« sĂ« serverĂ«ve â Ă«shtĂ« e kĂ«shillueshme t'i jepni me qira nĂ« rajonet dhe vendet ku ndodhet publiku juaj. NĂ«se projekti Ă«shtĂ« ndĂ«rkontinental, Ă«shtĂ« e pĂ«rshtatshme tĂ« zgjidhni ofrues hosti qĂ« ofrojnĂ« servere nĂ« tĂ« gjithĂ« botĂ«n. Disa shembuj: , dhe â pĂ«r serverat e dedikuar, dhe â pĂ«r cloud virtual*.
Për CDN-në tonë private do të porosisim 3 servera virtualë në kontinente të ndryshme. Në Vultr serverin për $5/muaj ne do të marrim 25GB SSD hapësirë dhe 1TB trafik. Në instalim do të zgjedhim Debian-in më të fundit. Serverat tanë:
Frankfurt, ip: 199.247.18.199
Ăikago, ip: 149.28.121.123
Singapor, ip: 157.230.240.216
* Vultr dhe DigitalOcean premtojnë $100 kredit për përdoruesit që regjistrohen përmes linkeve në artikull, menjëherë pas shtimit të metodës së pagesës. Autori gjithashtu merr një komplement të vogël nga kjo, që është shumë e rëndësishme për të. Ju lutemi, tregoni mirëkuptim.
Konfigurojmë geoDNS
Që përdoruesi, kur kërkon domenin ose subdomenin e CDN, të drejtohet në serverin e duhur (më të afërt me të), do të na duhet një server DNS me funksionin geoDNS.
Principi dhe rregulli i funksionimit të geoDNS është si vijon:
- Përcakton IP-në e klientit që dërgoi kërkesën DNS, ose IP-në e serverit DNS rekurziv, i cili përdoret për përpunimin e kërkesës së klientit. Këta servera rekurziv zakonisht janë DNS të ofruesve.
- Përmes IP-së së klientit merr informacion mbi vendin ose regjionin e tij. Për këtë, përdoren bazat GeoIP, të cilat sot janë tepër të shumta. Ka disa të mira. .
- Në varësi të vendndodhjes së klientit, i jep atij një adresë IP të serverit CDN më të afërt.
Serveri DNS me funksionin geoDNS mund , por është më mirë të përdoren zgjidhje të gatshme me një rrjet DNS-serverësh në të gjithë botën dhe nga kutia:
- nga $9.95/jeshil, plani GeoDNS, për default ka një DNS Failover
- nga $25/jeshil, përfshihet DNS Failover
- nga $35/jeshil për 50M kërkesat geo. DNS Failover faturizohet veçmas
- nga $125/jeshil, ka 10 DNS Failover
- , funksioni 'Geo Steering' është në dispozitat e planit Enterprise
Kur porositni geoDNS, duhet të keni parasysh numrin e kërkesave të përfshira në plan dhe të merrni parasysh se numri real i kërkesave për domain-in mund të tejkalojë ndjeshëm pritshmëritë. Miliona breshkash, skanerësh, spamersh dhe qenie të tjera punojnë pa pushim.
Praktikisht të gjithë shërbimet DNS përfshijnë një shërbim të nevojshëm për ndërtimin e CDN - DNS Failover. Me të mund të konfiguroni monitorimin e funksionimit të serverëve tuaj dhe, në rast se nuk ka shenja jete, automatikisht të zëvendësoni në përgjigjet DNS adresën e serverit jo-funksional me atë rezervë.
Për të ndërtuar CDN tonë do të përdorim , plani GeoDNS.
Do të shtojmë një DNS zonë të re në panelin personal, duke shënuar domenin tuaj. Nëse CDN do të ndërtohet mbi një subdomen, dhe domeni kryesor është tashmë në përdorim, mos harroni të shtoni menjëherë regjistrat ekzistues të DNS pas shtimit të zonës. Hapi tjetër është krijimi i disa A-regjistrave për CDN për domenin/subdomenin, secili prej të cilëve do të aplikohet për regjionin që kemi caktuar. Si regjione mund të specifikoni kontinente ose vende, për SHBA dhe Kanada janë të disponueshëm subregjione.
NĂ« rastin tonĂ«, CDN do tĂ« ngrihet nĂ« njĂ« subdomen cdn.sayt.in. Duke shtuar zonĂ«n sayt.in, do tĂ« krijojmĂ« regjistrin e parĂ« A pĂ«r subdomenin dhe do ta drejtojmĂ« tĂ« gjithĂ« AmerikĂ«n Veriore nĂ« serverin nĂ« Ăikago:

Do ta përsërisim veprimin për regjionet e tjera, mos harroni të krijoni një regjistër për regjionet si të parazgjedhura. Ja çfarë do të kemi në fund:

Regjistri i fundit parazgjedhur në screenshot do të thotë se të gjitha regjionet e pa caktuara (dhe kjo është Evropa, Afrika, përdoruesit e internetit me satelitë, etj.) do të drejtohen në serverin në Frankfurt.
Këtu konfigurimi bazik i DNS ka përfunduar. Tani, ju lutemi, hyni në faqen e regjistrarit të domain-it dhe zëvendësoni NS-të aktuale të domain-it me ato që ofron ClouDNS. Ndërsa NS-të do të përditësohen, ne do të përgatisim serverët.
Instalimi i certifikatave SSL
CDN ynĂ« do tĂ« punojĂ« pĂ«rmes HTTPS, kĂ«shtu qĂ« nĂ«se keni already certifikata SSL pĂ«r domain-in ose subdomain-in, ngarkoni ato nĂ« tĂ« gjitha serverĂ«t, pĂ«r shembull nĂ« direktorinĂ« /etc/ssl/ĐČаŃĐŽĐŸĐŒĐ”Đœ/
NĂ«se nuk keni certifikata, mund tĂ« merrni njĂ« tĂ« lirĂ« nga Letâs Encrypt. PĂ«r kĂ«tĂ«, do tĂ« ishte e pĂ«rshtatshme . Klienti Ă«shtĂ« i lehtĂ« dhe i pĂ«rshtatshĂ«m pĂ«r konfigurim, dhe mĂ« e rĂ«ndĂ«sishmja â lejon tĂ« kryhet validimi i domain-it/subdomain-it pĂ«rmes DNS pĂ«rmes API nga ClouDNS.
Ne do ta instalojmĂ« acme.sh vetĂ«m nĂ« njĂ« nga serverĂ«t â atĂ« evropian 199.247.18.199, nga ku certifikatat do tĂ« kopjohen nĂ« tĂ« gjithĂ« serverĂ«t e tjerĂ«. PĂ«r instalimin do tĂ« kryejmĂ«:
root@cdn:~# wget -O - https://get.acme.sh | bash; source ~/.bashrcGjatë instalimit të skriptit do të krijohet një detyrë CRON për përditësimin e mëtejshëm të certifikatave pa ndërhyrjen tonë.
Kontrolli i domenit gjatĂ« lĂ«shimit tĂ« certifikatĂ«s do tĂ« realizohet pĂ«rmes DNS duke pĂ«rdorur API, kĂ«shtu qĂ« nĂ« kabinetin personal tĂ« ClouDNS nĂ« menunĂ« Reseller API duhet tĂ« krijoni njĂ« pĂ«rdorues tĂ« ri API dhe tâi caktoni njĂ« fjalĂ«kalim. Auth-id e marrĂ« sĂ« bashku me fjalĂ«kalimin do tĂ« regjistrohet nĂ« skedarin ~/.acme.sh/dnsapi/dns_cloudns.sh (mos e ngatĂ«rroni me skedarin dns_clouddns.sh). KĂ«to janĂ« linjat qĂ« duhet tĂ« hapen dhe redaktohen:
CLOUDNS_AUTH_ID=
CLOUDNS_AUTH_PASSWORD=""
Tani kërkojmë marrjen e certifikatës SSL për cdn.sayt.in
root@cdn:~# acme.sh --issue --dns dns_cloudns -d cdn.sayt.in --reloadcmd "service nginx reload"Në parametrat, për të ardhmen, ne të përcaktuar komandën për rindezjen automatik të konfiguracionit të serverit pas çdo përditësimi të periudhës së vlefshmërisë së certifikatës më vonë.
I gjithë procesi i marrjes së certifikatës mund të marrë deri në 2 minuta, mos e ndërprisni atë. Nëse ndodh një gabim në validimin e domenit, provoni ta ekzekutoni përsëri komandën. Në fund do të shohim se ku janë ngarkuar certifikatat:

TĂ« mbajmĂ« mend kĂ«to rrugĂ«, do tĂ« nevojiten kur tĂ« kopjojmĂ« çertifikatĂ«n nĂ« serverĂ« tĂ« tjerĂ«, si dhe nĂ« konfigurimet e serverit tĂ« uebit. Mos e merrni parasysh gabimin nĂ« rinovimin e konfigurimeve Nginx, â nĂ« njĂ« server tĂ« plotesuar, gjatĂ« pĂ«rditĂ«simit tĂ« çertifikatave, ai nuk do tĂ« shfaqet.
E gjithĂ« çfarĂ« na mbetet pĂ«r SSL, â Ă«shtĂ« tĂ« kopjojmĂ« çertifikatĂ«n e marrĂ« nĂ« dy serverĂ« tĂ« tjerĂ« duke ruajtur rrugĂ«n pĂ«r skedarĂ«t. Do tĂ« krijojmĂ« nĂ« secilin prej tyre direktori tĂ« njĂ«jta dhe do tĂ« bĂ«jmĂ« njĂ« kopje:
root@cdn:~# mkdir -p /root/.acme.sh/cdn.sayt.in/
root@cdn:~# scp -r root@199.247.18.199:/root/.acme.sh/cdn.sayt.in/* /root/.acme.sh/cdn.sayt.in/
Për të siguruar që përditësimi i çertifikatave të jetë rutinor, do të krijojmë një detyrë CRON përditore në të dy serverët me komandën:
scp -r root@199.247.18.199:/root/.acme.sh/cdn.sayt.in/* /root/.acme.sh/cdn.sayt.in/ && service nginx reload
Në të njëjtën kohë, aksesin në serverin burim duhet të jetë i konfiguruar , dmth. pa hyrjen e fjalëkalimit. Mos e harroni ta bëni këtë.
Instalimi dhe konfigurimi i Nginx
Për të shpërndarë përmbajtje statike, ne do të përdorim Nginx, i konfiguruar si një server proxy cache. Do ta përditësojmë listën e paketave dhe do ta instalojmë në të tre serverët:
root@cdn:~# apt update
root@cdn:~# apt install nginxNë vend të defaltit, përdorim konfigurimin nga spojleri më poshtë:
nginx.conf
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;
}
}
}Në konfigurim do të redaktojmë:
- max_size â madhĂ«sia e caches qĂ« nuk kalon hapĂ«sirĂ«n e disponueshme nĂ« disk
- inactive â koha e ruajtjes sĂ« tĂ« dhĂ«nave tĂ« caches qĂ« askush nuk ka aksesuar
- ssl_certificate dhe ssl_certificate_key â rrugĂ«t pĂ«r skedarĂ«t e certifikatĂ«s SSL dhe çelĂ«sit
- proxy_cache_valid â koha e ruajtjes sĂ« tĂ« dhĂ«nave tĂ« caches
- proxy_pass â adresa e serverit origjinal, nga i cili CDN do tĂ« kĂ«rkojĂ« skedarĂ«t pĂ«r caching. NĂ« shembullin tonĂ«, kjo Ă«shtĂ« sayt.in
Siç e shohim, gjithçka është e thjeshtë. Vështirësia mund të lindë vetëm në konfigurimin e kohës së cache-it për shkak të ngjashmërisë së direktivave. inactive dhe proxy_cache_validLe të shikojmë ato me shembullin tonë. Këtu është se çfarë ndodh kur inactive=7d dhe proxy_cache_valid 90d:
- nëse kërkesa nuk përsëritet brenda 7 ditëve, të dhënat do të fshihen nga cache pas skadimit të këtij periudhe.
- nëse kërkesa përsëritet të paktën një herë në 7 ditë, të dhënat në cache do të konsiderohen të skaduara pas 90 ditësh dhe gjatë kërkesës së ardhshme Nginx do t'i përditësojë ato duke i marrë nga serveri origjinal.
Pasi përfundojmë korrigjimin nginx.conf, do të rikonfiguroni:
root@cdn:~# service nginx reloadCDN-ja jonë është plotësisht e gatshme. Për $15/muaj. arritëm pika pranishmërie në tri kontinente dhe 3 TB trafik: 1 TB në çdo lokacion.
Kontrollojmë funksionimin e CDN-së
Të shohim ping-et për CDN-në tonë nga vende të ndryshme gjeografike. Për këtë, çdo shërbim ping-u do të bëjë.
Pika e startit
Host
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 Francisco
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
Singapor
cdn.sayt.in
157.230.240.216
1.7
Japoni, Tokio
cdn.sayt.in
157.230.240.216
74.8
Australi, Sidnej
cdn.sayt.in
157.230.240.216
95.9
Rezultatet janĂ« tĂ« mira. Tani le tĂ« vendosim njĂ« imazh testues nĂ« rrĂ«njĂ«n e faqes kryesore. test.jpg dhe do ta kontrollojmĂ« shpejtĂ«sinĂ« e ngarkesĂ«s sĂ« saj pĂ«rmes CDN. E thĂ«nĂ«, â . PĂ«rmbajtja dorĂ«zohet shpejt.
Do të shkruajmë një skript të vogël për rastin nëse duam të pastrojmë cache-në në pikën e CDN.
purge.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ë hequr tërë cache-në, mjafton ta drejtoni atë, ndonjë file të veçantë mund ta pastrojmë kështu:
root@cdn:~# ./purge.sh /test.jpgNë vend të rezultateve
Në fund, dëshiroj të jap disa këshilla të dobishme, për të kaluar menjëherë mbi pengesat që në kohën e saj më bënë të ndjehem keq:
- Për të rritur besueshmërinë e CDN rekomandohet të konfigurohet DNS Failover, që ndihmon për të ndryshuar shpejt A regjistrimin në rast defekti të serverit. Kjo bëhet në panelin e menaxhimit të DNS-regjistrimeve të domenit
- Websitet me mbulueshmĂ«ri tĂ« gjerĂ« gjeografike padyshim kĂ«rkojnĂ« njĂ« numĂ«r tĂ« madh pikash CDN, por le tĂ« shmangim ekzagjerimin. MĂ« shumĂ« se gjasat, pĂ«rdoruesi nuk do tĂ« vĂ«rejĂ« ndonjĂ« ndryshim tĂ« dukshĂ«m nĂ« krahasim me CDN-nĂ« me pagesĂ«, nĂ«se vendosni serverĂ«t nĂ« 6-7 vende: ĐĐČŃĐŸĐżĐ°, Amerika Veriore (lindja), Amerika Veriore (perĂ«ndimi), Singapuri, Australia, Hong Kong ose Japonia
- Ndonjëherë hostuesit nuk lejojnë përdorimin e serverëve të marrë me qira për qëllime CDN. Prandaj, nëse vendosni të vendosni një rrjet përfundimi të përmbajtjes si shërbim, mos harroni të lexoni rregullat e ofruesit të hostingut përpara se të veproni.
- Kërkoni , për të pasur një ide se si janë të lidhura kontinenti dhe për ta marrë parasysh këtë kur ndërtoni rrjetin e dërgimit të përmbajtjes.
- Provoni të kontrolloni në serverët tuaj. Kështu mund të shihni rajonet më afër pikave CDN dhe ta konfiguroni GeoDNS në mënyrë më të saktë.
- NĂ« varĂ«si tĂ« detyrave, do tĂ« ishte e dobishme tĂ« rregulloni mĂ« tej Nginx pĂ«r kĂ«rkesat specifike tĂ« caching dhe me parasysh ngarkesĂ«n nĂ« server. KĂ«tu mâu ndihmuan shumĂ« artikujt pĂ«r caching nĂ« Nginx â dhe pĂ«rshpejtimin e performancĂ«s nĂ« ngarkesa tĂ« mĂ«dha: dhe
Burimi: habr.com
