Image source: Infographic vector created by pikisuperstar — www.freepik.com
sisällön jakeluverkkoja (CDN) käyttävät yleensä sivustot ja sovellukset staattisten elementtien lataamisen nopeuttamiseen. Tämä tapahtuu tallentamalla tiedostoja CDN-palvelimille, jotka sijaitsevat eri puolilla maailmaa. Pyydettyään tietoja CDN: n kautta käyttäjä saa ne lähimmältä palvelimelta.
CDNs: n perusperiaatteet ja niiden toimivuus ovat kaikilla suunnilleen samat. Saatuaan pyynnön tiedostosta CDN-palvelin ottaa sen kerran origin-palvelimelta ja siirtää sen sitten käyttäjälle ja kätkee kopion siitä joksikin aikaa. Muut tietopyynnöt käsitellään Välimuistin avulla. Kaikissa CDN: issä on vaihtoehtoja tiedostojen esilataukseen, välimuistin tyhjentämiseen, välimuistin säilyttämisaikoihin ja paljon muuhun.
joskus, eri syistä, joku saattaa huomata tarvitsevansa Oman CDN: n rakentamista, joten esitämme seuraavan oppaan sen toteuttamiseksi.
milloin tarvitset oman CDN: n?
Katsotaanpa tilanteita, joissa saatat joutua luomaan oman CDN: n:
- kun yrität säästää rahaa ja jopa edulliset ratkaisut, kuten BunnyCDN, maksavat sinulle lopulta satoja dollareita kuukaudessa
- kun haluat saada pysyvän välimuistin tai tarvitset taattua kaistanleveyttä ja resursseja
- olemassa olevilla CDN: llä ei ole Pop-levyjä kohdealueellasi
- tarvitset erityisiä sisällön toimitusasetuksia
- haluat nopeuttaa dynaamisen sisällön toimittaminen palvelemalla sitä lähempänä käyttäjiä
- olet huolissasi, että kolmannen osapuolen Cdns saattaa laittomasti kerätä ja käyttää Käyttäjätietoja (Hei siellä, palvelimet, jotka eivät ole GDPR-yhteensopiva) tai harjoittaa muuta laitonta toimintaa
useimmissa muissa tapauksissa on kannattavampaa käyttää olemassa olevia valmiita ratkaisuja.
luodaan oma CDN
rakentaaksesi edes yksinkertaisen sisällönjakeluverkon tarvitset seuraavat:
- verkkotunnus tai aliverkkotunnus
- vähintään kaksi palvelinta eri alueilla. Palvelimet voivat olla oma tai virtuaalinen
- geoDNS-työkalu. Sen avulla käyttäjä, joka lähettää pyynnön verkkotunnukselle, ohjataan lähimmälle palvelimelle
verkkotunnuksen rekisteröinti ja palvelimien tilaaminen
verkkotunnuksen rekisteröinti on helppoa — rekisteröi se vain haluamallesi verkkotunnusvyöhykkeelle. CDN: lle voit käyttää myös aliverkkotunnusta, kuten cdn.domainname.com. tämä koskee seuraavaa esimerkkiä.
palvelimia kannattaa vuokrata sellaisilta alueilta ja maista, joissa kohdeyleisö sijaitsee. Jos projektisi on intercontinental, on kätevää valita hosting-palveluntarjoajista, jotka tarjoavat palvelimia eri puolilla maailmaa, kuten OVH, Leaseweb ja 100tb (dedikoiduille palvelimille), tai Vultr ja DigitalOcean (virtuaalipalvelimille ja pilvipalvelimille).
tilataan yksityiselle CDN: llemme kolme virtuaalipalvelinta eri mantereille. Vultr tarjoaa meille 25 Gt SSD tilaa ja 1TB liikennettä $5/kuukausi. Valitse asennuksen aikana uusin Debian. Tässä ovat palvelimemme:
-
Frankfurt, ip: 199.247.18.199
-
Chicago, ip: 149.28.121.123
-
Singapore, ip: 157.230.240.216
Geodnien määrittäminen
sen varmistamiseksi, että asiakkaat ohjataan oikealle (lähimmälle) palvelimelle lähetettäessä pyyntöjä verkkotunnukseemme tai aliverkkoalueeseemme, tarvitsemme DNS-palvelimen, jossa on geoDNS-toiminnot.
näin geodnit toimivat:
- se saa asiakkaan IP (jos he lähettivät DNS-pyynnön) tai IP rekursiivisen DNS-palvelimen, jota käytetään pyynnön käsittelyyn. Yleisesti ottaen tällaiset rekursiiviset palvelimet ovat yleensä Internet-palveluntarjoajien DNSs.
- asiakkaan IP: n mukaan se yksilöi heidän maansa tai alueensa. Tämä toimenpide edellyttää geoip-tietokannan käyttöä,jotka ovat saatavilla ilman pulaa. On jopa kunnollisia ilmaisia vaihtoehtoja.
- riippuen asiakkaan sijainnista geoDNS palauttaa hänelle lähimmän CDN-palvelimen IP-osoitteen.
GEODNS-toiminnallisuudella varustetun DNS-palvelimen voi rakentaa itse, mutta on parempi käyttää valmiita ratkaisuja, joissa on palvelimia ympäri maailmaa ja out-of-the-box Anycast-vaihtoehto:
- ClouDNS, alkaen $9.95 / kk, GeoDNS-paketti, yksi DNS vikaantuminen on oletusarvoisesti
- Zilore, alkaen $25 / kk, sisältää DNS vikaantumisen
- Amazon Route 53, alkaen $35 / kk 50 miljoonaa geopyyntöä. DNS vikaantuminen on hinnoiteltu erikseen
- DNS helpoksi, alkaen $125 / kk, 10 DNS vikaantuminen
- Cloudflare, Geo ohjaus toiminnallisuus tarjotaan Yrityspaketeissa
tilatessasi geodneja sinun täytyy kiinnittää huomiota Pakettiin sisältyvien pyyntöjen määrään ja pitää mielessä, että todellinen pyyntöjen määrä saattaa ylittää odotuksesi. On miljoonia web crawlers, Skannerit, roskapostittajia ja muita devilry työssä milloin tahansa.
lähes kaikki DNS-palvelut sisältävät hyödyllisen ominaisuuden CDN: n rakentamiseen – DNS vikaantumiseen. Sen avulla voit määrittää toiminnan seurannan niin, että jos palvelin menee alas, järjestelmä ohjaa automaattisesti asiakkaat toimiville palvelimille.
meidän CDN, käytetään ClouDNS ja sen GeoDNS paketti.
lisää profiiliin Uusi DNS-alue ja määritä verkkotunnuksesi nimi. Jos käytät aliverkkotunnusta ja pääkohde on käytössä, älä unohda lisätä olemassa olevia DNS-tietueita heti vyöhykkeen lisäämisen jälkeen. Seuraava vaihe on luoda useita tietueita CDN domain/aliverkkotunnukselle, joista jokaista käytetään määritellyllä alueella. Voit nimetä maanosia tai maita alueiksi, ja osa-aluevaihtoehdot ovat käytettävissä Yhdysvalloissa ja Kanadassa.
esimerkissämme CDN toimii cdn.sayt.in aliverkkotunnus. On lisännyt sayt.in zone, luo ensimmäinen tietue aliverkkotunnukselle ja ohjaa kaikki NA-asiakkaat Chicagon palvelimelle:
Toista tämä vaihe muille alueille ja muista luoda yksi tietue oletusalueille. Tältä lopputulos näyttää:
tekemiseen, viimeinen oletusarvo tarkoittaa pyyntöjä kaikilta määrittelemättömiltä alueilta (Eurooppa, Afrikka, Internetin satelliittikäyttäjät jne.) ohjataan Frankfurtin palvelimelle.
tähän päättyy DNS: n peruskokoonpano. Kaikki mitä on jäljellä on mennä registrar website ja korvata nykyiset nimipalvelimet tarjoamia ClouDNS. Kun niitä päivitetään, asetamme palvelimet.
SSL-varmenteiden asentaminen
CDN toimii HTTPS: llä, joten jos sinulla on jo verkkotunnuksen tai aliverkkotunnuksen SSL-varmenteet, lataa ne kaikille palvelimille, esimerkiksi /etc/ssl/yourdomain/ – hakemistoon.
jos sinulla ei ole varmenteita, voit saada sen ilmaiseksi Let ’ s Encrypt-palvelusta. ACME Shell script on loistava vaihtoehto. Se on käyttäjäystävällinen asiakas ja, mikä tärkeintä, se mahdollistaa suorittaa validointi verkkotunnuksen/aliverkkotunnuksen kautta DNS käyttäen API ClouDNS.
asennamme acme.sh vain yhdellä palvelimella — eurooppalaisella palvelimella (199.247.18.199), ja siltä varmenteet kopioidaan kaikille muille. Asenna se suorittamalla seuraava komento:
root@cdn:~# wget -O - https://get.acme.sh | bash; source ~/.bashrc
asennuksen aikana luodaan CRON-tehtävä varmenteiden automaattiseen päivittämiseen.
verkkotunnuksen todentaminen varmenteen myöntämisen yhteydessä suoritetaan DNS: n kautta API: n avulla, joten Cloudns-profiilissa, jälleenmyyjän API: n alla, Luo uusi API-käyttäjä ja määritä sille salasana. Anna tuloksena oleva auth-id sekä salasana seuraavaan tiedostoon:~/. acme.sh/dnsapi/dns_cloudns.sh (ei saa sekoittaa dns_clouddns.sh). tässä ovat rivit, jotka sinun täytyy poistaa ja muokata:
CLOUDNS_AUTH_ID=<auth-id>CLOUDNS_AUTH_PASSWORD="<password>"
nyt pyydämme CDN: n SSL-sertifikaatin myöntämistä.sayt.in
root@cdn:~# acme.sh --issue --dns dns_cloudns -d cdn.sayt.in --reloadcmd "service nginx reload"
tulevaa käyttöä varten, parametrit, jätimme komennon automaattinen kokoonpano uudelleenkäynnistys jokaisen uusimisen jälkeen varmenteen.
todistuksen saaminen voi kestää jopa kaksi minuuttia, joten älä keskeytä sitä. Jos toimialueen validointivirhe ilmenee, yritä suorittaa komento uudelleen. Lopulta nähdään, mistä sertifikaatit on ladattu.
muista nämä polut, meidän on määriteltävä ne kopioidessamme varmenteita muille palvelimille ja meidän on määritettävä ne palvelimen asetuksissa. Ohita nginx-asetusten uudelleenlatausvirhe, — sitä ei tapahdu täysin määritetyllä palvelimella varmenteen uusimisen aikana.
SSL-varmenteen osalta jäljellä on vain kopioida se kahdelle muulle varmennepolkuja tallentavalle palvelimelle. Luo identtiset hakemistot jokaiselle palvelimelle ja kopioi varmennetiedostot:
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/
automatisoidaksesi varmenteen uusimisen sinun on luotava päivittäinen CRON-tehtävä molemmille palvelimille. Alla on komento sinun pitäisi lisätä CRON työpaikkoja:
scp -r [email protected]:/root/.acme.sh/cdn.sayt.in/* /root/.acme.sh/cdn.sayt.in/ && service nginx reload</pre>
muista, että yhteys origin-etäpalvelimeen edellyttää pääsyä avaimella antamatta salasanaa. Älä unohda luoda sitä.
Nginxin asentaminen ja määrittäminen
staattisen sisällön toimittamiseen käytämme nginxiä, joka on määritetty välimuistin välityspalvelimeksi. Päivitä pakettiluettelot ja asenna se kaikille kolmelle palvelimelle:
root@cdn:~# apt updateroot@cdn:~# apt install nginx
käytä oletusasetusta:
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; } }}
vuonna config, muokataan:
- max_size — cache — koko ei ylitä käytettävissä olevaa levytilaa
- inaktiivinen säilytysaika pyytämättömille välimuistiin tallennetuille tiedoille
- ssl_certificate and ssl_certificate_key — polut SSL — varmenteeseen ja avaimeen
- proxy_cache_valid — säilytysaika välimuistiin tallennetuille tiedoille
proxy_pass-sen Origin-palvelimen osoite, jolta CDN pyytää tietoja välimuistiin tallentamista varten. Esimerkiksi, se on sayt.in
kuten näette, se ei ole rakettitiedettä. Ainoa vaikeus on määrittää retentioaika, koska yhtäläisyyksiä inaktiivinen ja proxy_cache_valid parametrit. Katsotaanpa tarkemmin. Näin käy inaktiivisille=7d ja proxy_cache_valid=90d:
- jos pyyntöä ei toisteta 7 päivän kuluessa, tiedot poistetaan välimuistista
- jos pyyntö toistetaan edes kerran 7 päivän aikana, välimuisti katsotaan vanhentuneeksi 90 päivän jälkeen ja seuraava pyyntö saa Nginxin päivittämään sen origin-palvelimelta
Nginxillä.conf käsitelty, lataa asetukset uudelleen:
root@cdn:~# service nginx reload
joten, meidän CDN on käyttövalmis! $ 15 / kk saimme PoPs kolmella mantereella ja 3TB liikennettä: 1TB kunkin alueen.
tarkistan CDN: n
Katsotaanpa ping: tä CDN: ään eri paikoista. Mikä tahansa ping-palvelu kelpaa tässä tapauksessa.
Ping-palvelin | isäntä | IP | Avg-aika, MSC |
---|---|---|---|
Saksa, Berliini | cdn.sayt.in | 199.247.18.199 | 9.6 |
Alankomaat, Amsterdam | cdn.sayt.in | 199.247.18.199 | 10.1 |
Ranska, Pariisi | cdn.sayt.in | 199.247.18.199 | 16.3 |
Iso-Britannia, Lontoo | cdn.sayt.in | 199.247.18.199 | 14.9 |
Kanada, Toronto | cdn.sayt.in | 149.28.121.123 | 16.2 |
Yhdysvallat, San Francisco | cdn.sayt.in | 149.28.121.123 | 52.7 |
USA, Dallas | cdn.sayt.in | 149.28.121.123 | 23.1 |
Yhdysvallat, Chicago | cdn.sayt.in | 149.28.121.123 | 2.6 |
Yhdysvallat, New-York | cdn.sayt.in | 149.28.121.123 | 19.8 |
Singapore | cdn.sayt.in | 157.230.240.216 | 1.7 |
Japani, Tokio | cdn.sayt.in | 157.230.240.216 | 74.8 |
Australia, Sydney | cdn.sayt.in | 157.230.240.216 | 95.9 |
tulokset ovat hyviä. Nyt laitetaan testikuva otsikolla testi.jpg pääpalvelimeen ja tarkistaa, kuinka nopeasti se latautuu kautta CDN. Sovittu ja tehty. Lataus on nopeaa.
tehdään pieni skripti siltä varalta, että CDN-pisteessä on tyhjennettävä välimuisti.
purge.sh
#!/bin/bashif then echo "Purging all cache" rm -rf /var/cache/cdn/*else echo "Purging " FILE=`echo -n "" | md5sum | awk '{print }'` FULLPATH=/var/cache/cdn/${FILE:31:1}/${FILE:29:2}/${FILE} rm -f "${FULLPATH}"fi
tyhjentää kaikki välimuistin palvelimella, yksinkertaisesti suorita skripti. Jos tarvitset jonkin tiedoston tyhjennetty, vain määrittää sen polku:
root@cdn:~# ./purge.sh /test.jpg
välimuistin tyhjentämiseksi kaikkialla skripti on suoritettava kaikilla CDN-palvelimilla.
johtopäätösten sijasta
lopuksi haluaisin antaa joitakin hyödyllisiä vinkkejä, jotta voit välttää lankeamasta jo selvittämiini sudenkuoppiin:
- mieti tulevan CDN: n elinkelpoisuutta ja ylläpitokustannuksia. Useimmissa tapauksissa on paljon tehokasta ja helpompaa ostaa halpa CDN, joka todennäköisesti on vakaampi ja laadukkaampi.
- CDN: n vikasietoisuuden parantamiseksi on suositeltavaa ottaa käyttöön DNS-vikasietoisuus, jonka avulla voit vaihtaa a-tietuetta nopeasti, jos palvelin rikkoutuu. Voit tehdä sen DNS: n tietueiden ohjauspaneelissa.
- Laaja-alaiset verkkosivustot vaativat paljon Popseja, mutta eivät innostu liikaa. Todennäköisesti käyttäjä ei huomaa eroa CDN: n ja maksullisen välillä, jos sinulla on palvelimia 6-7 paikkakunnalla (Eurooppa, Pohjois-Amerikka (Itä), Pohjois-Amerikka (Länsi), Singapore, Australia, Hong Kong tai Japani).
- joskus palveluntarjoajat eivät salli vuokrattujen palvelimien käyttöä CDNs: lle. Joten, jos etsit luoda CDN palvelu, varmista lukea ylös hosting-palveluntarjoajan ehdot.
- tutki merikaapelikarttaa ymmärtääksesi, miten mantereet ovat yhteydessä toisiinsa, ja käytä tätä tietoa rakentaessasi CDN-verkkoa.
- yritä pingata palvelimet eri paikoista. Näin voit bongata lähimmät PoPs – alueet ja se auttaa geodnien määrittämisessä.