Enhavaj Liveraj Retoj (CDN) estas uzataj en retejoj kaj aplikoj ĉefe por akceli la ŝarĝon de senmovaj elementoj. Ĉi tio okazas pro la kaŝmemoro de dosieroj sur CDN-serviloj situantaj en malsamaj geografiaj regionoj. Petante datumojn per CDN, la uzanto ricevas ĝin de la plej proksima servilo.
La principo de funkciado kaj funkcieco de ĉiuj enhavo-liveraj retoj estas proksimume la sama. Ricevinte peton elŝuti dosieron, la CDN-servilo prenas ĝin unufoje de la origina servilo kaj donas ĝin al la uzanto, samtempe konservante ĝin dum difinita tempodaŭro. Ĉiuj postaj petoj estas responditaj el la kaŝmemoro. Ĉiuj CDN-oj havas eblojn por antaŭŝargi dosierojn, forigi la kaŝmemoron, agordi la limdaton kaj pli.
Okazas, ke, ial aŭ alia, vi devas organizi vian propran enhavan liveran reton, kaj poste - la instrukcioj por kunmeti la sekvan biciklon helpi nin.
Konsideru la kazojn kie ruli vian propran CDN havas sencon:
kiam estas deziro ŝpari monon, kaj kurantaj kostoj eĉ kiam oni uzas malmultekostajn CDNojn kiel KunikletoCDN sumo al kelkcent dolaroj monate
se ni volas akiri konstantan kaŝmemoron aŭ kaŝmemoron sen servilo kaj kanalo najbaroj
CDN-servoj ne havas punktojn de ĉeesto en la regiono, kiun vi bezonas
ajna speciala enhavo livero agordojn necesas
ni volas akceli la liveron de dinamika enhavo metante la produktan servilon pli proksime al uzantoj
estas zorgo, ke triaparta CDN-servo povas kontraŭleĝe kolekti aŭ uzi informojn pri uzantkonduto (saluton ne-konformaj al GDPR-servoj) aŭ okupiĝi pri aliaj kontraŭleĝaj agadoj.
En la plej multaj aliaj kazoj, estas pli konvene uzi ekzistantajn pretajn solvojn.
Kion vi bezonas por komenci
Estas mirinde se vi havas vian propran Aŭtonoman Sistemon (AS). Per ĝi, vi povas atribui la saman IP al pluraj serviloj kaj laŭ ĉi tiu instrukcio ĉe la retonivelo, direktu uzantojn al la plej proksima. Indas diri, ke eĉ kun la adresbloko /24, eblas konstrui enhavan liveran reton. Iuj servilprovizantoj permesas vin fari anoncon por uzo en ĉiuj regionoj disponeblaj al ili.
Se vi ne estas feliĉa posedanto de bloko de IP-adresoj, tiam por ruli simplan CDN vi bezonos:
domajna nomo aŭ subdomajno
almenaŭ du serviloj en malsamaj regionoj. La servilo povas esti aŭ dediĉita aŭ virtuala
geoDNS-ilo. Per ĝi, la uzanto, adresinte la domajnon, estos direktita al la plej proksima servilo
Registri domajnon kaj mendi servilojn
Kun domajna registrado, ĉio estas simpla - ni registras en iu ajn zono ĉe iu registristo. Vi ankaŭ povas uzi subdomajnon por CDN, ekzemple ion similan cdn.domainname.com. Efektive, en nia ekzemplo, ni faros ĝuste tion.
Koncerne mendi servilojn, ili devus esti luitaj en la regionoj kaj landoj, kie troviĝas via uzantspektantaro. Se la projekto estas interkontinenta, tiam estas oportune elekti gastigantajn provizantojn, kiuj ofertas servilojn tra la tuta mondo samtempe. Ekzemploj: OVH, luo retejo и 100Tb - por dediĉitaj serviloj, Vultr и Digitalulocean — por virtuala nubo*.
Por nia privata CDN, ni mendos 3 virtualajn servilojn sur malsamaj kontinentoj. Ĉe Vultr sur la servilo por $ 5/monato ni ricevos 25GB SSD lokoj kaj 1TB da trafiko. Kiam vi instalas, elektu la plej novan Debianon. Niaj serviloj:
Frankfurto, ip: 199.247.18.199
Ĉikago, ip: 149.28.121.123
Сингапур, ip: 157.230.240.216
* Vultr kaj DigitalOcean promesas $100-krediton al uzantoj, kiuj registras per la ligiloj en la artikolo tuj post aldoni pagmetodon. La aŭtoro ricevas ankaŭ de ĉi tio komplimenton, kiu nun estas tre signifa por li. Bonvolu esti komprenema.
Agordi geoDNS
Por ke la uzanto estu direktita al la dezirata (plej proksima) servilo dum aliro al domajno aŭ CDN-subdomajno, ni bezonas DNS-servilon kun la funkcio geoDNS.
La principo kaj operacio de geoDNS estas kiel sekvas:
Specifas la IP de la kliento kiu sendis la DNS-peton, aŭ la IP de la rekursiva DNS-servilo kiu estas uzata dum prilaborado de la kliento-peto. Tiaj rekursiaj serviloj estas kutime DNS-oj de provizantoj.
La IP de la kliento rekonas lian landon aŭ regionon. Por tio, GeoIP-datumbazoj estas uzataj, el kiuj estas multaj hodiaŭ. Estas bonaj senpagaj elektoj.
Depende de la loko de la kliento, donas al li la IP-adreson de la plej proksima CDN-servilo.
DNS-servilo kun geoDNS-funkcio povas esti kunveni mem, sed estas pli bone uzi pretajn solvojn kun reto de DNS-serviloj tra la mondo kaj Anycast el la skatolo:
CloudDNS el $ 9.95/monato, GeoDNS tarifo, defaŭlte ekzistas unu DNS-malsukceso
Amazona Itinero 53 el $ 35/monato por netaj 50M geo-petoj. DNS-malsukceso estas fakturita aparte
DNS Facila el $ 125/monato, estas 10 DNS-malsukcesigoj
cloudflare, "Geo-Stirado" funkcio estas havebla en Enterprise-planoj
Mendante geoDNS, vi devas atenti la nombron da petoj inkluzivitaj en la tarifo kaj memoru, ke la reala nombro da petoj al la domajno povas plurfoje superi atendojn. Milionoj da araneoj, skaniloj, spamistoj kaj aliaj malbonaj spiritoj laboras senlace.
Preskaŭ ĉiuj DNS-servoj inkluzivas nemalhaveblan servon por konstrui CDN - DNS Failover. Kun ĝia helpo, vi povas agordi monitoradon de la funkciado de viaj serviloj kaj, en foresto de signoj de vivo, aŭtomate anstataŭigi la adreson de nefunkcianta servilo per rezerva en DNS-respondoj.
Por konstrui nian CDN, ni uzos CloudDNS, GeoDNS tarifo.
Ni aldonu novan DNS-zonon en via persona konto, specifante vian domajnon. Se ni konstruas CDN sur subdomajno, kaj la ĉefa domajno jam estas uzata, tuj post aldoni la zonon, ne forgesu aldoni la ekzistantajn funkciajn DNS-rekordojn. La sekva paŝo estas krei plurajn A-rekordojn por la CDN-domajno / subdomajno, ĉiu el kiuj estos aplikita al la regiono, kiun ni specifis. Vi povas specifi kontinentojn aŭ landojn kiel regionojn, subregionoj disponeblas por Usono kaj Kanado.
En nia kazo, la CDN estos levita sur subdomajno cdn.sayt.in. Aldonante zonon sayt.in, kreu la unuan A-rekordon por la subdomajno kaj direktu la tutan Nordamerikon al la servilo en Ĉikago:
Ni ripetu la agon por aliaj regionoj, memorante krei unu eniron por la defaŭltaj regionoj. Jen kio okazas finfine:
La lasta defaŭlta eniro en la ekrankopio signifas, ke ĉiuj nespecifitaj regionoj (kaj ĉi tiuj estas Eŭropo, Afriko, satelitaj retuzantoj, ktp.) estos senditaj al la servilo en Frankfurto.
Ĉi tio kompletigas la bazan DNS-agordon. Restas iri al la retejo de la domajna registristo kaj anstataŭigi la nunajn domajnan NS-ojn per tiuj eldonitaj de ClouDNS. Kaj dum la NS-oj estos ĝisdatigitaj, ni preparos la servilojn.
Instalado de SSL-atestiloj
Nia CDN funkcios per HTTPS, do se vi jam havas SSL-atestilojn por domajno aŭ subdomajno, alŝutu ilin al ĉiuj serviloj, ekzemple, al la dosierujo. /etc/ssl/via domajno/
Se ne ekzistas atestiloj, vi povas ricevi senpagan de Let's Encrypt. Perfekte por ĉi tio ACME Shellscript. La kliento estas oportuna kaj facile instalebla, kaj plej grave, ĝi permesas vin validigi domajnon/subdomajnon per DNS per la API de ClouDNS.
Ni instalos acme.sh sur nur unu el la serviloj - Eŭropa 199.247.18.199, de kiu atestiloj estos kopiitaj al ĉiuj aliaj. Por instali, rulu:
Dum la instalado de la skripto, CRON-laboro estos kreita por plua renovigo de atestiloj sen nia partopreno.
Eldonante atestilon, la domajno estos kontrolita per DNS per la API, do en la persona konto de ClouDNS en la Reseller API-menuo, vi devas krei novan uzantan API kaj agordi pasvorton por ĝi. La rezulta aŭt-id kun pasvorto estos skribita en la dosiero ~/.acme.sh/dnsapi/dns_cloudns.sh (ne konfuzu kun dosiero dns_clouddns.sh). Jen la linioj kiuj devas esti nekomentitaj kaj redaktitaj:
En la ebloj, por la estonteco, ni specifis komandon por aŭtomate reŝargi la agordon de la retservilo post ĉiu renovigo de la validecperiodo de atestilo en la estonteco.
La tuta procezo por akiri atestilon povas daŭri ĝis 2 minutojn, ne interrompu ĝin. Se okazas eraro pri validado de domajna, provu ruli la komandon denove. Je la fino ni vidos kie la atestiloj estis alŝutitaj:
Memoru ĉi tiujn vojojn, ili devos esti specifitaj dum kopiado de la atestilo al aliaj serviloj, same kiel en la agordoj de la retservilo. Ni ne atentas la eraron de reŝargi Nginx-agordojn - ĝi ne estos sur plene agordita servilo dum ĝisdatigo de atestiloj.
Restas nur por SSL kopii la ricevitan atestilon al du aliaj serviloj konservante la vojon al la dosieroj. Ni kreu la samajn dosierujojn sur ĉiu el ili kaj faru kopion:
maksimuma_grandeco — la grandeco de la kaŝmemoro, ne superante la disponeblan diskspacon
neaktiva - konservada tempo de kaŝmemoritaj datumoj, kiujn neniu aliris
ssl_atestilo и ssl_certificate_key — vojoj al SSL-atestilo kaj ŝlosilaj dosieroj
proxy_cache_valid - konservada tempo de kaŝmemoritaj datumoj
prokura_paso — adreso de la origina servilo de kiu la CDN petos dosierojn por kaŝmemoro. En nia ekzemplo, ĉi tio sayt.in
Kiel vi povas vidi, ĉio estas simpla. Malfacilo povas ekesti nur en agordo de la kaŝmemortempo pro la simileco de la direktivoj neaktiva и proxy_cache_valid. Ni analizu ilin per nia ekzemplo. Jen kio okazas kiam neaktiva=7d и proxy_cache_valid 90d:
se la peto ne ripetas ene de 7 tagoj, tiam la datumoj estos forigitaj el la kaŝmemoro post ĉi tiu periodo
se la peto ripetiĝas almenaŭ unufoje ĉiun 7 tagojn, tiam la datumoj en la kaŝmemoro estos konsiderataj malnoviĝintaj post 90 tagoj kaj Nginx ĝisdatigos ĝin kun la sekva peto, prenante ĝin de la origina servilo.
Finis redakti nginx.conf, reŝargu la agordon:
root@cdn:~# service nginx reload
Nia CDN estas preta. Por $15/monato. ni ricevis punktojn de ĉeesto sur tri kontinentoj kaj 3 TB de trafiko: 1 TB en ĉiu loko.
Kontrolante la laboron de CDN
Ni rigardu la pingojn al nia CDN de malsamaj geografiaj lokoj. Ajna ping-servo funkcios por tio.
La rezultoj estas bonaj. Nun ni metos testan bildon en la radikon de la ĉefa retejo testo.jpg kaj kontrolu ĝian elŝutan rapidon per CDN. Oni diras - farita. Enhavo estas liverita rapide.
Ni skribu malgrandan skripton, se ni volas forigi la kaŝmemoron sur la CDN-punkto. purigi.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
Por forigi la tutan kaŝmemoron, simple rulu ĝin, aparta dosiero povas esti purigita jene:
root@cdn:~# ./purge.sh /test.jpg
Anstataŭ konkludoj
Fine, mi volas doni kelkajn utilajn konsiletojn por tuj transpaŝi la rastilon, kiu tiam dolorigis mian kapon:
Por pliigi la misfunkciadon de la CDN, oni rekomendas agordi DNS Failover, kiu helpas rapide ŝanĝi la A-rekordon en kazo de paneo de servilo. Ĉi tio estas farita en la kontrolpanelo DNS-rekordoj de la domajno.
Retejoj kun larĝa geografia kovrado sendube postulas grandan nombron da CDN-oj, sed ni ne estu fanatikaj. Plej verŝajne, la uzanto ne rimarkos gravan diferencon kompare kun pagita CDN, se vi metas servilojn en 6-7 lokoj: Eŭropo, Nordameriko (oriente), Nordameriko (okcidente), Singapuro, Aŭstralio, Honkongo aŭ Japanio.
Foje gastigantoj ne permesas la uzon de luitaj serviloj por CDN-celoj. Tial, se vi subite decidas disfaldi enhavan liveran reton kiel servon, ne forgesu legi la regulojn de aparta gastiganta provizanto anticipe.
Esploru subakva komunika maporeprezenti kiel la kontinentoj estas konektitaj kaj konsideri tion dum konstruado de enhavo-livera reto
Provu kontroli pings el diversaj lokoj al viaj serviloj. Tiel vi povas vidi la plej proksimajn regionojn al la CDN-punktoj kaj agordi GeoDNS pli ĝuste
Depende de la taskoj, estos utile agordi Nginx por specifaj kaŝmemorpostuloj kaj konsiderante la ŝarĝon sur la servilo. La artikoloj pri Nginx-kaŝmemoro multe helpis min en ĉi tio - tie kaj akcelo de laboro sub pezaj ŝarĝoj: tie и tie