miten rakentaa oma CDN

Luo oma CDN-verkko-opetusohjelmaImage 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:

  1. 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.
  2. 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.
  3. 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:

Lisää uusi DNS-tietue

Toista tämä vaihe muille alueille ja muista luoda yksi tietue oletusalueille. Tältä lopputulos näyttää:

GeoDNS records, jota tarvitaan oman CDN: n

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
Siirry kokoruututilaan poistu kokoruututilasta

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>"
Siirry kokoruututilaan poistu kokoruututilasta

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"
Siirry kokoruututilaan poistu kokoruututilasta

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.

SSL-varmenteita myöntävät

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/
Siirry kokoruututilaan poistu kokoruututilasta

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>
Siirry kokoruututilaan poistu kokoruututilasta

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
Siirry kokoruututilaan poistu kokoruututilasta

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; } }}
Siirry kokoruututilaan poistu kokoruututilasta

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
Siirry kokoruututilaan poistu kokoruututilasta

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
Siirry kokoruututilaan poistu kokoruututilasta

tyhjentää kaikki välimuistin palvelimella, yksinkertaisesti suorita skripti. Jos tarvitset jonkin tiedoston tyhjennetty, vain määrittää sen polku:

root@cdn:~# ./purge.sh /test.jpg 
Siirry kokoruututilaan poistu kokoruututilasta

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ä.

Vastaa

Sähköpostiosoitettasi ei julkaista.