Byggja og stilla CDN

Content Delivery Networks (CDN) eru notuð í vefsíðum og forritum fyrst og fremst til að flýta fyrir hleðslu á kyrrstæðum þáttum. Þetta gerist vegna skyndiminni skráa á CDN netþjónum sem staðsettir eru á mismunandi landfræðilegum svæðum. Með því að biðja um gögn í gegnum CDN fær notandinn þau frá næsta netþjóni.

Meginreglan um rekstur og virkni allra efnisafhendingarneta er um það bil sú sama. Eftir að hafa fengið beiðni um að hlaða niður skrá tekur CDN þjónninn hana í eitt skipti frá upprunalega þjóninum og gefur notandanum hana á sama tíma og setur hana í skyndiminni í tiltekinn tíma. Öllum síðari beiðnum er svarað úr skyndiminni. Öll CDN hafa möguleika til að forhlaða skrám, hreinsa skyndiminni, stilla fyrningardagsetningu og fleira.

Það kemur fyrir að þú þarft af einni eða annarri ástæðu að skipuleggja þitt eigið efnisnet og þá - láttu leiðbeiningarnar um að setja saman næsta hjól hjálpa okkur.

Byggja og stilla CDN
Heimild: Infographic vektor búin til af pikisuperstar - www.freepik.com

Þegar þú þarft þitt eigið CDN

Íhugaðu tilvikin þar sem skynsamlegt er að keyra þitt eigið CDN:

  • þegar það er löngun til að spara peninga og rekstrarkostnað jafnvel þegar þú notar ódýr CDN eins og BunnyCDN nema nokkur hundruð dollara á mánuði
  • ef við viljum fá varanlegt skyndiminni eða skyndiminni án netþjóns og rásar nágranna
  • CDN þjónusta er ekki með staði á svæðinu sem þú þarft
  • allar sérstakar stillingar fyrir afhendingu efnis sem krafist er
  • við viljum flýta fyrir afhendingu kraftmikils efnis með því að koma framleiðsluþjóninum nær notendum
  • það eru áhyggjur af því að CDN-þjónusta þriðja aðila gæti safnað eða notað upplýsingar um hegðun notenda á ólöglegan hátt (halló þjónustur sem ekki samræmast GDPR) eða tekið þátt í annarri ólöglegri starfsemi

Í flestum öðrum tilvikum er réttara að nota tilbúnar lausnir sem fyrir eru.

Hvað þarftu til að byrja

Það er dásamlegt ef þú ert með þitt eigið sjálfstætt kerfi (AS). Með því geturðu úthlutað sama IP til nokkurra netþjóna og samkvæmt þessari fyrirmæli á netkerfi, beina notendum að næsta. Það er þess virði að segja að jafnvel með /24 vistfangablokkinni er hægt að byggja upp efnisafhendingarnet. Sumir netþjónar leyfa þér að senda tilkynningu til notkunar á öllum svæðum sem þeim standa til boða.

Ef þú ert ekki ánægður eigandi blokkar af IP-tölum, þá þarftu að keyra einfalt CDN:

  • lén eða undirlén
  • að minnsta kosti tveir netþjónar á mismunandi svæðum. Miðlarinn getur annað hvort verið hollur eða sýndur
  • geoDNS tól. Með því verður notandi, sem hefur ávarpað lénið, vísað á næsta netþjón

Skráðu lén og pantaðu netþjóna

Með lénaskráningu er allt einfalt - við skráum okkur á hvaða svæði sem er hjá hvaða skrásetjara sem er. Þú getur líka notað undirlén fyrir CDN, til dæmis eitthvað eins og cdn.domainname.com. Reyndar, í okkar dæmi, munum við gera einmitt það.

Hvað varðar pöntun á netþjónum, þá ætti að leigja þá á þeim svæðum og löndum þar sem notendahópurinn þinn er staðsettur. Ef verkefnið er alþjóðlegt, þá er þægilegt að velja hýsingaraðila sem bjóða upp á netþjóna um allan heim í einu. Dæmi: Ovh, Leiguvefur и 100Tb - fyrir sérstaka netþjóna, Vultr и DigitalOcean — fyrir sýndarský*.

Fyrir einka CDN okkar munum við panta 3 sýndarþjóna í mismunandi heimsálfum. Kl Vultr á þjóninum fyrir $5/mán við munum fá 25GB SSD stöðum og 1TB af umferð. Þegar þú setur upp skaltu velja nýjustu Debian. Netþjónar okkar:

Byggja og stilla CDN Frankfurt, IP: 199.247.18.199

Byggja og stilla CDN Chicago, IP: 149.28.121.123

Byggja og stilla CDN Singapore, IP: 157.230.240.216

* Vultr og DigitalOcean lofa $100 inneign til notenda sem skrá sig í gegnum tenglana í greininni strax eftir að hafa bætt við greiðslumáta. Höfundur fær líka smá hrós af þessu sem er mjög merkilegt fyrir hann núna. Vinsamlegast vertu skilningsríkur.

Setja upp geoDNS

Til þess að hægt sé að vísa notandanum á þann (nálægasta) netþjón sem óskað er eftir við aðgang að léni eða CDN undirléni, þurfum við DNS netþjón með geoDNS aðgerðinni.

Meginreglan og rekstur geoDNS er sem hér segir:

  1. Tilgreinir IP biðlarans sem sendi DNS beiðnina, eða IP endurkvæma DNS þjónsins sem er notaður þegar unnið er úr beiðni viðskiptavinarins. Slíkir endurkvæmir netþjónar eru venjulega DNS-kerfi veitenda.
  2. IP-tala viðskiptavinarins viðurkennir land hans eða svæði. Til þess eru notaðir GeoIP gagnagrunnar sem eru mjög margir í dag. Það eru góðir ókeypis valkostir.
  3. Það fer eftir staðsetningu viðskiptavinarins, gefur honum IP tölu næsta CDN netþjóns.

DNS þjónn með geoDNS virka getur verið setja saman sjálfur, en það er betra að nota tilbúnar lausnir með neti DNS netþjóna um allan heim og Anycast úr kassanum:

  • CloudDNS frá $9.95/mán, GeoDNS gjaldskrá, sjálfgefið er einn DNS Failover
  • Zilore frá $25/mán, DNS-bilun virkt
  • Amazon leið 53 frá $35/mán fyrir nettó 50M landfræðilegar beiðnir. DNS Failover er innheimt sérstaklega
  • DNS gert auðvelt frá $125/mán, það eru 10 DNS-bilanir
  • Cloudflare, „Geo Steering“ eiginleiki er fáanlegur í Enterprise áætlunum

Þegar þú pantar geoDNS ættir þú að huga að fjölda beiðna sem eru innifalin í gjaldskránni og hafa í huga að raunverulegur fjöldi beiðna til lénsins getur farið nokkrum sinnum fram úr væntingum. Milljónir köngulóa, skanna, ruslpósts og annarra illra anda vinna sleitulaust.

Næstum öll DNS þjónusta inniheldur ómissandi þjónustu til að byggja upp CDN - DNS Failover. Með hjálp þess geturðu sett upp eftirlit með rekstri netþjónanna þinna og, ef engin lífsmerki sjást, skipt sjálfkrafa út heimilisfangi netþjóns sem virkar fyrir öryggisafrit í DNS svörum.

Til að byggja upp CDN okkar munum við nota CloudDNS, GeoDNS gjaldskrá.

Við skulum bæta við nýju DNS svæði á persónulega reikningnum þínum og tilgreina lénið þitt. Ef við erum að byggja upp CDN á undirléni og aðallénið er þegar í notkun, þá strax eftir að svæðið hefur verið bætt við, ekki gleyma að bæta við núverandi starfandi DNS færslum. Næsta skref er að búa til nokkrar A-skrár fyrir CDN lénið / undirlénið, sem hver um sig verður notuð á svæðið sem við tilgreindum. Þú getur tilgreint heimsálfur eða lönd sem svæði, undirsvæði eru fáanleg fyrir Bandaríkin og Kanada.

Í okkar tilviki verður CDN hækkað á undirléni cdn.sayt.in. Með því að bæta við svæði sagði.in, búðu til fyrstu A-skrána fyrir undirlénið og bentu allri Norður-Ameríku á netþjóninn í Chicago:

Byggja og stilla CDN
Við skulum endurtaka aðgerðina fyrir önnur svæði, muna eftir að búa til eina færslu fyrir sjálfgefna svæðin. Hér er það sem gerist á endanum:

Byggja og stilla CDN

Síðasta sjálfgefna færslan í skjámyndinni þýðir að öll ótilgreind svæði (og þetta eru Evrópa, Afríka, gervihnattanetnotendur osfrv.) verða send á netþjóninn í Frankfurt.

Þetta lýkur grunnuppsetningu DNS. Það er eftir að fara á vefsíðu lénsritara og skipta út núverandi léns-NSs með þeim sem gefin eru út af ClouDNS. Og á meðan NSs verða uppfærðar munum við undirbúa netþjónana.

Uppsetning SSL vottorða

CDN okkar mun vinna yfir HTTPS, þannig að ef þú ert nú þegar með SSL vottorð fyrir lén eða undirlén skaltu hlaða þeim upp á alla netþjóna, til dæmis í möppuna /etc/ssl/lénið þitt/

Ef það eru engin vottorð geturðu fengið ókeypis frá Let's Encrypt. Fullkomið fyrir þetta ACME Shellscript. Viðskiptavinurinn er þægilegur og auðvelt að setja upp og síðast en ekki síst gerir hann þér kleift að staðfesta lén/undirlén með DNS í gegnum CloudDNS API.

Við munum setja upp acme.sh á aðeins einum af netþjónunum - European 199.247.18.199, þaðan verða vottorð afrituð til allra hinna. Til að setja upp skaltu keyra:

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

Við uppsetningu handritsins verður CRON starf búið til til frekari endurnýjunar skírteina án þátttöku okkar.

Þegar þú gefur út vottorð verður lénið athugað með DNS með því að nota API, þannig að í ClouDNS persónulega reikningnum í Reseller API valmyndinni þarftu að búa til nýtt notenda-API og setja lykilorð fyrir það. Auth-auðkennið sem myndast með lykilorði verður skrifað í skrána ~/.acme.sh/dnsapi/dns_cloudns.sh (ekki að rugla saman við skrá dns_clouddns.sh). Hér eru línurnar sem þarf að afskrifa og breyta:

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

Nú munum við biðja um SSL vottorð fyrir cdn.sayt.in

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

Í valkostunum, fyrir framtíðina, höfum við tilgreint skipun til að endurhlaða sjálfkrafa uppsetningu vefþjónsins eftir hverja endurnýjun á gildistíma vottorðsins í framtíðinni.

Allt ferlið við að fá vottorð getur tekið allt að 2 mínútur, ekki trufla það. Ef lénsprófunarvilla kemur upp skaltu reyna að keyra skipunina aftur. Í lokin munum við sjá hvar skírteinunum hefur verið hlaðið upp:

Byggja og stilla CDN

Mundu þessar slóðir, þær þarf að tilgreina þegar skírteinið er afritað á aðra netþjóna, sem og í stillingum vefþjónsins. Við gefum ekki gaum að villunni við að endurhlaða Nginx stillingar - það verður ekki á fullstilltum netþjóni þegar vottorð eru uppfærð.

Allt sem við eigum eftir fyrir SSL er að afrita móttekna vottorðið á tvo aðra netþjóna á meðan við höldum slóðinni að skránum. Við skulum búa til sömu möppur á hverja þeirra og gera afrit:

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/

Til að uppfæra vottorð reglulega skaltu búa til daglegt CRON starf á báðum netþjónum með skipuninni:

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

Í þessu tilviki verður að stilla aðgang að ytri upprunaþjóninum með lykli, þ.e. án þess að slá inn lykilorð. Ekki gleyma að gera það.

Að setja upp og stilla Nginx

Til að þjóna kyrrstæðu efni munum við nota Nginx stillt sem skyndiminni umboðsþjón. Uppfærðu pakkalistana og settu hann upp á öllum þremur netþjónunum:

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

Í stað sjálfgefna notum við stillinguna frá spoilernum hér að neðan:
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;
    }
  }
}

Breyta í stillingum:

  • hámarksstærð — stærð skyndiminni, ekki meiri en tiltækt pláss
  • óvirkt - Geymslutími gagna í skyndiminni sem enginn fékk aðgang að
  • ssl_vottorð и ssl_vottorðslykill — slóðir að SSL vottorði og lykilskrám
  • proxy_cache_valid - geymslutími gagna í skyndiminni
  • proxy_pass — heimilisfang upprunalega netþjónsins sem CDN mun biðja um skrár frá til að vista í skyndiminni. Í okkar dæmi, þetta sagði.in

Eins og þú sérð er allt einfalt. Erfiðleikar geta aðeins komið upp við að stilla skyndiminni tíma vegna líkt tilskipana óvirkt и proxy_cache_valid. Við skulum greina þau með dæmi okkar. Hér er það sem gerist hvenær óvirkt=7d и proxy_cache_valid 90d:

  • ef beiðnin er ekki endurtekin innan 7 daga, þá verður gögnunum eytt úr skyndiminni eftir þetta tímabil
  • ef beiðnin er endurtekin að minnsta kosti einu sinni á 7 daga fresti, þá verða gögnin í skyndiminni talin úrelt eftir 90 daga og Nginx mun uppfæra þau með næstu beiðni og taka þau af upprunalega þjóninum

Búið að breyta nginx.conf, endurhlaða stillinguna:

root@cdn:~# service nginx reload

CDN okkar er tilbúið. Fyrir $15/mán. við fengum staði í þremur heimsálfum og 3 TB umferð: 1 TB á hverjum stað.

Athugaðu verk CDN

Við skulum skoða pingin á CDN okkar frá mismunandi landfræðilegum stöðum. Öll ping þjónusta mun virka fyrir þetta.

Sjósetningarstaður
Gestgjafi
IP
Meðaltími, frk

Þýskaland Berlín
cdn.sayt.in
199.247.18.199
9.6

Holland, Amsterdam
cdn.sayt.in
199.247.18.199
10.1

Frakkland París
cdn.sayt.in
199.247.18.199
16.3

Stóra-Bretland, London
cdn.sayt.in
199.247.18.199
14.9

Kanada, Toronto
cdn.sayt.in
149.28.121.123
16.2

Bandaríkin, San Francisco
cdn.sayt.in
149.28.121.123
52.7

Bandaríkin, Dallas
cdn.sayt.in
149.28.121.123
23.1

Bandaríkin, Chicago
cdn.sayt.in
149.28.121.123
2.6

BNA, New York
cdn.sayt.in
149.28.121.123
19.8

Singapore
cdn.sayt.in
157.230.240.216
1.7

Japan Tókýó
cdn.sayt.in
157.230.240.216
74.8

Ástralía, Sydney
cdn.sayt.in
157.230.240.216
95.9

Árangurinn er góður. Nú munum við setja prófunarmynd í rót aðalsíðunnar test.jpg og athugaðu niðurhalshraðann í gegnum CDN. Það er sagt - gert. Efni er afhent hratt.

Við skulum skrifa lítið handrit ef við viljum hreinsa skyndiminni á CDN punktinum.
hreinsa.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

Til að eyða öllu skyndiminni skaltu bara keyra það, sérstaka skrá er hægt að þrífa svona:

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

Í stað niðurstaðna

Að lokum vil ég gefa nokkrar gagnlegar ábendingar til að stíga strax yfir hrífuna sem gerði mér illt í höfðinu á þeim tíma:

  • Til að auka bilanaþol CDN er mælt með því að stilla DNS Failover, sem hjálpar til við að breyta A-skránni fljótt ef miðlari bilar. Þetta er gert í DNS-skrám stjórnborðsins á léninu.
  • Síður með mikla landfræðilega útbreiðslu þurfa eflaust mikinn fjölda CDN, en við skulum ekki vera ofstækisfull. Líklegast mun notandinn ekki taka eftir verulegum mun miðað við greitt CDN ef þú setur netþjóna á 6-7 staði: Evrópu, Norður Ameríka (austur), Norður Ameríka (vestur), Singapúr, Ástralía, Hong Kong eða Japan
  • Stundum leyfa hýsingaraðilar ekki notkun leigðra netþjóna í CDN tilgangi. Þess vegna, ef þú ákveður skyndilega að setja upp efnisafhendingarnet sem þjónustu, ekki gleyma að lesa reglur tiltekins hýsingaraðila fyrirfram
  • Kannaðu fjarskiptakort neðansjávarað tákna hvernig heimsálfurnar eru tengdar og taka tillit til þess þegar byggt er upp efnisafhendingarnet
  • Reyndu að athuga pingar frá mismunandi stöðum á netþjóna þína. Þannig geturðu séð þau svæði sem eru næst CDN punktunum og stillt GeoDNS réttari
  • Það fer eftir verkefnum, það mun vera gagnlegt að fínstilla Nginx fyrir sérstakar skyndiminniskröfur og taka tillit til álagsins á þjóninum. Greinarnar um Nginx skyndiminni hjálpuðu mér mikið í þessu - hér og hröðun vinnu undir miklu álagi: hér и hér

Heimild: www.habr.com