Edukiak Bidaltzeko Sareak (CDN) webgune eta aplikazioetan erabiltzen dira, batez ere, elementu estatikoen karga bizkortzeko. Hau eskualde geografiko desberdinetan kokatutako CDN zerbitzarietan fitxategiak cachean jartzeagatik gertatzen da. CDN bidez datuak eskatuz gero, erabiltzaileak hurbilen dagoen zerbitzaritik jasotzen ditu.
Eduki-sare guztien funtzionamendu- eta funtzionamendu-printzipioa gutxi gorabehera berdina da. Fitxategi bat deskargatzeko eskaera jaso ondoren, CDN zerbitzariak behin-behinean hartzen du jatorrizko zerbitzaritik eta erabiltzaileari ematen dio, eta, aldi berean, denbora-tarte jakin baterako katxean gordetzen du. Ondorengo eskaera guztiak cachetik erantzuten dira. CDN guztiek fitxategiak aldez aurretik kargatzeko, cachea garbitzeko, iraungitze-data ezartzeko eta beste aukerak dituzte.
Gertatzen da, arrazoi bategatik edo besteagatik, zure edukia bidaltzeko sarea antolatu behar duzula eta, ondoren, hurrengo bizikleta muntatzeko argibideak lagungarri izan daitezen.

Iturria:
Zure CDNa behar duzunean
Kontuan izan zure CDN propioa exekutatzeko zentzua duten kasuak:
- dirua aurrezteko nahia dagoenean, eta funtzionamendu-kostuak, nahiz eta antzeko CDN merkeak erabiliz hilean ehunka dolar balio du
- cache iraunkor bat edo zerbitzari eta kanal auzokiderik gabeko cache bat lortu nahi badugu
- CDN zerbitzuek ez dute behar duzun eskualdean presentzia punturik
- behar den edukia bidaltzeko ezarpen bereziak
- eduki dinamikoen bidalketa bizkortu nahi dugu produkzio zerbitzaria erabiltzaileengandik hurbilago jarriz
- hirugarrenen CDN zerbitzu batek erabiltzailearen jokabideari buruzko informazioa (kaixo GDPR-ekin bat ez datozen zerbitzuak) edo legez kanpoko beste jarduera batzuetan parte har dezakeen kezka dago.
Beste kasu gehienetan, egokiagoa da lehendik dauden irtenbideak erabiltzea.
Zer behar duzu hasteko
Zoragarria da zure Sistema Autonomoa (AS) baduzu. Harekin, IP bera hainbat zerbitzariri esleitu diezaiekezu eta sare mailan, erabiltzaileak hurbilen dagoenera bideratu. Esan beharra dago /24 helbide blokearekin ere posible dela edukiak bidaltzeko sare bat eraikitzea. Zerbitzari-hornitzaile batzuek iragarki bat egiteko aukera ematen dizute eskuragarri dauden eskualde guztietan erabiltzeko.
IP helbide bloke baten jabe pozik ez bazara, CDN soil bat exekutatzeko beharko duzu:
- domeinu-izena edo azpidomeinua
- gutxienez bi zerbitzari eskualde ezberdinetan. Zerbitzaria dedikatua edo birtuala izan daiteke
- geoDNS tresna. Harekin, erabiltzailea, domeinua zuzenduta, hurbilen dagoen zerbitzarira bideratuko da
Erregistratu domeinu bat eta eskatu zerbitzariak
Domeinuaren erregistroarekin, dena erraza da: edozein zonatan erregistratzen gara edozein erregistratzailerekin. CDN baterako azpidomeinu bat ere erabil dezakezu, adibidez, antzeko zerbait cdn.domeinu-izena.com. Egia esan, gure adibidean, horixe egingo dugu.
Zerbitzariak eskatzeari dagokionez, zure erabiltzaile-audientzia dagoen eskualde eta herrialdeetan alokatu behar dira. Proiektua kontinenteartekoa bada, komenigarria da mundu osoko zerbitzariak aldi berean eskaintzen dituzten ostalaritza-hornitzaileak aukeratzea. Adibideak: , и - zerbitzari dedikatuetarako, и — hodei birtualerako*.
Gure CDN pribaturako, 3 zerbitzari birtual eskatuko ditugu kontinente ezberdinetan. At Vultr zerbitzarian $ 5 hilean lortuko dugu 25GB SSD lekuak eta 1TB trafikoa. Instalatzerakoan, hautatu azken Debian. Gure zerbitzariak:
Frankfurt, ip: 199.247.18.199
Chicago, ip: 149.28.121.123
Singapurren, ip: 157.230.240.216
*Vultr eta DigitalOcean-ek 100 dolarreko kreditua agintzen diete artikuluko esteken bidez erregistratzen diren erabiltzaileei ordainketa-metodo bat gehitu eta berehala. Egileak laudorio txiki bat ere jasotzen du honetatik, orain oso esanguratsua dena. Mesedez, izan ulerkorra.
GeoDNS konfiguratzea
Domeinu edo CDN azpidomeinu batera sartzean erabiltzailea nahi den (hurbilen) zerbitzarira bideratu ahal izateko, geoDNS funtzioa duen DNS zerbitzari bat behar dugu.
GeoDNSren printzipioa eta funtzionamendua honako hau da:
- DNS eskaera bidali duen bezeroaren IPa zehazten du, edo bezeroaren eskaera prozesatzeko erabiltzen den DNS zerbitzari errekurtsiboaren IPa. Horrelako zerbitzari errekurtsiboak hornitzaileen DNS-ak izan ohi dira.
- Bezeroaren IPak bere herrialdea edo eskualdea aitortzen du. Horretarako, GeoIP datu-baseak erabiltzen dira, gaur egun asko daude. Onak daude .
- Bezeroaren kokapenaren arabera, hurbilen dagoen CDN zerbitzariaren IP helbidea ematen dio.
GeoDNS funtzioa duen DNS zerbitzaria izan daiteke , baina hobe da prest dauden soluzioak erabiltzea mundu osoko DNS zerbitzarien sare batekin eta kutxatik:
- tik $ 9.95 hilean, GeoDNS tarifa, lehenespenez DNS hutsegite bat dago
- tik $ 25 hilean, DNS hutsegitea gaituta
- tik $ 35 hilean 50M geo-eskaera garbietarako. DNS hutsegitea bereizita fakturatzen da
- tik $ 125 hilean, 10 DNS hutsegite daude
- , "Geo Steering" eginbidea eskuragarri dago Enterprise planetan
GeoDNS eskatzerakoan, arreta jarri behar duzu tarifan sartutako eskaera kopuruari eta kontuan izan domeinuari egindako eskaera kopuruak itxaropenak hainbat aldiz gaindi ditzakeela. Milioika armiarmak, eskanerrek, spammer-ek eta beste izpiritu gaiztoek etengabe lan egiten dute.
DNS zerbitzu ia guztiek CDN bat eraikitzeko ezinbesteko zerbitzu bat dute - DNS Failover. Haren laguntzarekin, zure zerbitzarien funtzionamenduaren jarraipena konfigura dezakezu eta, bizi-zantzurik ezean, funtzionatzen ez duen zerbitzari baten helbidea automatikoki ordezkatu dezakezu DNS erantzunetan babeskopia batekin.
Gure CDN eraikitzeko, erabiliko dugu , GeoDNS tarifa.
Gehitu dezagun DNS eremu berri bat zure kontu pertsonalean, zure domeinua zehaztuz. Azpidomeinu batean CDN bat eraikitzen ari bagara, eta domeinu nagusia dagoeneko erabiltzen bada, eremua gehitu eta berehala, ez ahaztu lehendik dauden DNS erregistroak gehitzea. Hurrengo urratsa CDN domeinu / azpidomeinurako hainbat A-erregistro sortzea da, eta horietako bakoitza zehaztu dugun eskualdean aplikatuko da. Kontinenteak edo herrialdeak eskualde gisa zehaztu ditzakezu, azpieskualdeak eskuragarri daude AEBetarako eta Kanadarako.
Gure kasuan, CDN azpidomeinu batean planteatuko da cdn.sayt.in. Zona bat gehituz esan.in, sortu lehen A-erregistroa azpidomeinurako eta seinalatu Ipar Amerika osoa Chicagoko zerbitzarira:

Errepikatu dezagun ekintza beste eskualdeetarako, lehenetsitako eskualdeetarako sarrera bat sortzea gogoratuz. Hona hemen zer gertatzen den azkenean:

Pantaila-argazkiko azken sarrera lehenetsiak esan nahi du zehaztu gabeko eskualde guztiak (eta hauek dira Europa, Afrika, satelite bidezko Interneteko erabiltzaileak, etab.) Frankfurteko zerbitzarira bidaliko direla.
Honek oinarrizko DNS konfigurazioa osatzen du. Domeinu-erregistratzailearen webgunera joan eta egungo domeinu NSak ClouDNS-ek emandakoekin ordezkatzea geratzen da. Eta NSak eguneratuko diren bitartean, zerbitzariak prestatuko ditugu.
SSL ziurtagiriak instalatzea
Gure CDNak HTTPS bidez funtzionatuko du, beraz, dagoeneko domeinu edo azpidomeinu baterako SSL ziurtagiriak badituzu, kargatu zerbitzari guztietan, adibidez, direktoriora. /etc/ssl/zuredomeinua/
Ziurtagiririk ez badago, doako bat lor dezakezu Let's Encrypt-en. Horretarako ezin hobea . Bezeroa erosoa eta konfiguratzeko erraza da, eta garrantzitsuena, domeinu/azpidomeinu bat DNS bidez balioztatzeko aukera ematen du ClouDNS APIaren bidez.
Acme.sh zerbitzarietako batean bakarrik instalatuko dugu - Europako 199.247.18.199, eta bertatik ziurtagiriak beste guztietan kopiatuko dira. Instalatzeko, exekutatu:
root@cdn:~# wget -O - https://get.acme.sh | bash; source ~/.bashrcGidoia instalatzean, CRON lan bat sortuko da ziurtagiriak gehiago berritzeko gure parte-hartzerik gabe.
Ziurtagiri bat jaulkitzean, domeinua DNS erabiliz egiaztatuko da APIa erabiliz, beraz, Reseller API menuko ClouDNS kontu pertsonalean, erabiltzaile-API berri bat sortu eta pasahitz bat ezarri behar duzu. Pasahitz batekin lortzen den autentifikazio-identifikazioa fitxategian idatziko da ~/.acme.sh/dnsapi/dns_cloudns.sh (Ez nahastu fitxategiarekin dns_clouddns.sh). Hona hemen iruzkinak kendu eta editatu behar diren lerroak:
CLOUDNS_AUTH_ID=<auth-id>
CLOUDNS_AUTH_PASSWORD="<пароль>"
Orain SSL ziurtagiria eskatuko dugu cdn.sayt.in
root@cdn:~# acme.sh --issue --dns dns_cloudns -d cdn.sayt.in --reloadcmd "service nginx reload"Aukeretan, etorkizunerako, web zerbitzariaren konfigurazioa automatikoki birkargatzeko komando bat zehaztu dugu etorkizunean ziurtagiriaren balio-epea berritu ondoren.
Ziurtagiria lortzeko prozesu osoa 2 minutu iraun dezake, ez eten. Domeinua baliozkotzeko errore bat gertatzen bada, saiatu berriro komandoa exekutatzen. Amaieran ziurtagiriak non igo diren ikusiko dugu:

Gogoratu bide hauek, ziurtagiria beste zerbitzari batzuetara kopiatzerakoan zehaztu beharko dira, baita web zerbitzariaren ezarpenetan ere. Ez diogu kasurik egiten Nginx konfigurazioak birkargatzeko erroreari - ez da guztiz konfiguratutako zerbitzari batean egongo ziurtagiriak eguneratzean.
SSLrako geratzen zaigun ziurtagiria beste bi zerbitzarietara kopiatzea da, fitxategien bidea mantenduz. Sor ditzagun direktorio berdinak horietako bakoitzean eta egin dezagun kopia bat:
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/
Ziurtagiriak aldizka eguneratzeko, sortu egunero CRON lan bat bi zerbitzarietan komandoarekin:
scp -r root@199.247.18.199:/root/.acme.sh/cdn.sayt.in/* /root/.acme.sh/cdn.sayt.in/ && service nginx reload
Kasu honetan, urruneko iturburu zerbitzarirako sarbidea konfiguratu behar da , hau da. pasahitza sartu gabe. Ez ahaztu egiteaz.
Nginx instalatzea eta konfiguratzea
Eduki estatikoa hornitzeko, caching proxy zerbitzari gisa konfiguratutako Nginx erabiliko dugu. Eguneratu pakete zerrendak eta instalatu hiru zerbitzarietan:
root@cdn:~# apt update
root@cdn:~# apt install nginxLehenetsiaren ordez, beheko spoiler-eko konfigurazioa erabiltzen dugu:
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;
}
}
}Editatu konfigurazioan:
- gehienez_tamaina — cachearen tamaina, eskuragarri dagoen diskoko espazioa gainditu gabe
- inactive - Inork atzitu ez dituen cacheko datuen biltegiratze-denbora
- ssl_ziurtagiria и ssl_ziurtagiria_gakoa — SSL ziurtagiri eta gako fitxategietarako bideak
- proxy_cache_valid - cachean gordetako datuak gordetzeko denbora
- proxy_pass — CDNak cachean gordetzeko fitxategiak eskatuko dituen jatorrizko zerbitzariaren helbidea. Gure adibidean, hau esan.in
Ikusten duzun bezala, dena erraza da. Zailtasuna bakarrik sor daiteke caching denbora ezartzeko zuzentarauen antzekotasuna dela eta inactive и proxy_cache_valid. Azter ditzagun gure adibidearekin. Hona hemen zer gertatzen den noiz inaktibo=7d и proxy_cache_valid 90d:
- 7 eguneko epean eskaera errepikatzen ez bada, epe hori igaro ondoren datuak cachetik ezabatuko dira
- eskaera gutxienez 7 egunean behin errepikatzen bada, cacheko datuak 90 egun igaro ondoren zaharkituta geratuko dira eta Nginx-ek hurrengo eskaerarekin eguneratuko ditu, jatorrizko zerbitzaritik hartuta.
Bukatu da editatzen nginx.conf, kargatu berriro konfigurazioa:
root@cdn:~# service nginx reloadGure CDN prest dago. $ 15 hilean. hiru kontinenteetako presentzia puntuak eta 3 TB trafikoa jaso ditugu: 1 TB kokapen bakoitzean.
CDNren lana egiaztatzea
Ikus ditzagun kokapen geografiko desberdinetatik gure CDNra egindako ping-ak. Edozein ping zerbitzu funtzionatuko du horretarako.
Abiatzeko puntua
Ostalaria
IP
Batez besteko denbora, ms
Alemania Berlin
cdn.sayt.in
199.247.18.199
9.6
Herbehereak, Amsterdam
cdn.sayt.in
199.247.18.199
10.1
Frantzia Paris
cdn.sayt.in
199.247.18.199
16.3
Britainia Handia, Londres
cdn.sayt.in
199.247.18.199
14.9
Kanada, Toronto
cdn.sayt.in
149.28.121.123
16.2
AEB, San Frantzisko
cdn.sayt.in
149.28.121.123
52.7
AEB, Dallas
cdn.sayt.in
149.28.121.123
23.1
AEB, Chicago
cdn.sayt.in
149.28.121.123
2.6
AEB, New York
cdn.sayt.in
149.28.121.123
19.8
Singapurren
cdn.sayt.in
157.230.240.216
1.7
Japonia Tokio
cdn.sayt.in
157.230.240.216
74.8
Australia, Sydney
cdn.sayt.in
157.230.240.216
95.9
Emaitzak onak dira. Orain probako irudi bat jarriko dugu gune nagusiaren erroan test.jpg eta egiaztatu bere deskarga abiadura CDN bidez. Esaten da - . Edukia azkar bidaltzen da.
Idatz dezagun script txiki bat CDN puntuko cachea garbitu nahi badugu.
garbitu.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
Cache osoa ezabatzeko, exekutatu besterik ez dago, honela garbi daiteke beste fitxategi bat:
root@cdn:~# ./purge.sh /test.jpgOndorioen ordez
Azkenik, aholku baliagarri batzuk eman nahi ditut momentu hartan burua mindu zidan arrastelua berehala zapaltzeko:
- CDNren akatsen tolerantzia areagotzeko, DNS Failover konfiguratzea gomendatzen da, zerbitzariaren matxura gertatuz gero A erregistroa azkar aldatzen laguntzen duena. Hau domeinuaren kontrol paneleko DNS erregistroetan egiten da.
- Estaldura geografiko zabala duten guneek, dudarik gabe, CDN kopuru handia behar dute, baina ez gaitezen fanatiko izan. Seguruenik, erabiltzaileak ez du desberdintasun handirik nabarituko ordaindutako CDN batekin alderatuta zerbitzariak 6-7 kokapenetan jartzen badituzu: Europa, Ipar Amerika (ekialdea), Ipar Amerika (mendebaldea), Singapur, Australia, Hong Kong edo Japonia.
- Batzuetan, ostalariek ez dute onartzen alokatutako zerbitzariak CDN helburuetarako erabiltzea. Hori dela eta, bat-batean edukiak bidaltzeko sarea zerbitzu gisa zabaltzea erabakitzen baduzu, ez ahaztu aldez aurretik ostalaritza-hornitzaile jakin baten arauak irakurtzea.
- Arakatu kontinenteak nola konektatzen diren irudikatzeko eta hori kontuan hartzea edukiak emateko sare bat eraikitzeko orduan
- Saiatu egiaztatzen zure zerbitzarietara. Horrela CDN puntuetatik hurbilen dauden eskualdeak ikusi eta GeoDNS zuzenago konfiguratu dezakezu
- Zereginen arabera, erabilgarria izango da Nginx cache-ko eskakizun zehatzetarako doitzea eta zerbitzariaren karga kontuan hartuta. Nginx cacheari buruzko artikuluek asko lagundu zidaten honetan - eta karga astunetan lanaren azelerazioa: и
Iturria: www.habr.com
