Ang Content Delivery Networks (CDNs) ay ginagamit sa mga website at application lalo na para mapabilis ang paglo-load ng mga static na elemento. Nangyayari ito dahil sa pag-cache ng mga file sa mga server ng CDN na matatagpuan sa iba't ibang mga heograpikal na rehiyon. Sa pamamagitan ng paghiling ng data sa pamamagitan ng CDN, natatanggap ito ng user mula sa pinakamalapit na server.
Ang prinsipyo ng pagpapatakbo at paggana ng lahat ng network ng paghahatid ng nilalaman ay halos pareho. Pagkatanggap ng kahilingang mag-download ng file, kinukuha ito ng CDN server nang isang beses mula sa orihinal na server at ibibigay ito sa user, kasabay ng pag-cache nito para sa isang tinukoy na tagal ng panahon. Lahat ng kasunod na kahilingan ay sinasagot mula sa cache. Ang lahat ng mga CDN ay may mga opsyon upang mag-preload ng mga file, i-clear ang cache, itakda ang petsa ng pag-expire, at higit pa.
Nangyayari na, para sa isang kadahilanan o iba pa, kailangan mong ayusin ang iyong sariling network ng paghahatid ng nilalaman, at pagkatapos - hayaan ang mga tagubilin para sa pag-assemble ng susunod na bike ay makakatulong sa amin.
Isaalang-alang ang mga kaso kung saan ang pagpapatakbo ng iyong sariling CDN ay may katuturan:
kapag may pagnanais na makatipid ng pera, at mga gastos sa pagpapatakbo kahit na gumagamit ng murang mga CDN tulad ng BunnyCDN halaga ng ilang daang dolyar sa isang buwan
kung gusto naming makakuha ng permanenteng cache o cache na walang server at channel na mga kapitbahay
Ang mga serbisyo ng CDN ay walang mga punto ng presensya sa rehiyon na kailangan mo
anumang espesyal na setting ng paghahatid ng nilalaman na kinakailangan
gusto naming pabilisin ang paghahatid ng dynamic na content sa pamamagitan ng paglalagay ng production server na mas malapit sa mga user
may alalahanin na ang isang third-party na serbisyo ng CDN ay maaaring ilegal na mangolekta o gumamit ng impormasyon tungkol sa pag-uugali ng user (hello non-GDPR-compliant na mga serbisyo) o makisali sa iba pang ilegal na aktibidad
Sa karamihan ng iba pang mga kaso, mas angkop na gumamit ng mga umiiral nang handa na solusyon.
Ano ang kailangan mong simulan
Napakaganda kung mayroon kang sariling Autonomous System (AS). Gamit ito, maaari kang magtalaga ng parehong IP sa ilang mga server at ayon sa tagubiling ito sa antas ng network, idirekta ang mga user sa pinakamalapit. Ito ay nagkakahalaga na sabihin na kahit na may /24 address block, posible na bumuo ng isang network ng paghahatid ng nilalaman. Binibigyang-daan ka ng ilang provider ng server na gumawa ng anunsyo para magamit sa lahat ng rehiyong magagamit nila.
Kung hindi ka masaya na may-ari ng isang bloke ng mga IP address, para magpatakbo ng isang simpleng CDN kakailanganin mo:
domain name o subdomain
hindi bababa sa dalawang server sa magkaibang mga rehiyon. Ang server ay maaaring maging dedikado o virtual
tool ng geoDNS. Sa pamamagitan nito, ang gumagamit, na natugunan ang domain, ay ididirekta sa pinakamalapit na server
Magrehistro ng domain at mag-order ng mga server
Sa pagpaparehistro ng domain, ang lahat ay simple - nagrerehistro kami sa anumang zone sa anumang registrar. Maaari ka ring gumamit ng subdomain para sa isang CDN, halimbawa tulad ng cdn.domainname.com. Sa totoo lang, sa aming halimbawa, gagawin namin iyon.
Tulad ng para sa pag-order ng mga server, dapat na arkilahin ang mga ito sa mga rehiyon at bansa kung saan matatagpuan ang iyong madla ng gumagamit. Kung intercontinental ang proyekto, maginhawang pumili ng mga hosting provider na nag-aalok ng mga server sa buong mundo nang sabay-sabay. Mga halimbawa: OVH, lease web ΠΈ 100TB - para sa mga nakalaang server, Vultr ΠΈ DigitalOcean β para sa virtual na ulap*.
Para sa aming pribadong CDN, mag-o-order kami ng 3 virtual server sa iba't ibang kontinente. Sa Vultr sa server para sa $5/buwan kukunin namin 25GB SSD mga lugar at 1TB ng trapiko. Kapag nag-i-install, piliin ang pinakabagong Debian. Ang aming mga server:
Frankfurt, ip: 199.247.18.199
Tsikago, ip: 149.28.121.123
Singgapur, ip: 157.230.240.216
*Nangangako ang Vultr at DigitalOcean ng $100 na kredito sa mga user na nagparehistro sa pamamagitan ng mga link sa artikulo kaagad pagkatapos magdagdag ng paraan ng pagbabayad. Nakatanggap din ang may-akda ng isang maliit na papuri mula dito, na napakahalaga para sa kanya ngayon. Mangyaring maging maunawain.
Pagse-set up ng geoDNS
Upang maidirekta ang user sa gustong (pinakamalapit) na server kapag nag-a-access ng domain o CDN subdomain, kailangan namin ng DNS server na may geoDNS function.
Ang prinsipyo at pagpapatakbo ng geoDNS ay ang mga sumusunod:
Tinutukoy ang IP ng client na nagpadala ng kahilingan sa DNS, o ang IP ng recursive DNS server na ginagamit kapag pinoproseso ang kahilingan ng kliyente. Ang ganitong mga recursive server ay karaniwang mga DNS-s ng mga provider.
Kinikilala ng IP ng kliyente ang kanyang bansa o rehiyon. Para dito, ginagamit ang mga database ng GeoIP, kung saan napakarami na ngayon. May mga magaling libreng mga pagpipilian.
Depende sa lokasyon ng kliyente, binibigyan siya ng IP address ng pinakamalapit na CDN server.
DNS server na may geoDNS function ay maaaring mag-ipon nang mag-isa, ngunit mas mainam na gumamit ng mga handa na solusyon sa isang network ng mga DNS server sa buong mundo at Anycast mula sa kahon:
CloudDNS mula sa $9.95/buwan, GeoDNS taripa, bilang default mayroong isang DNS Failover
Zilore mula sa $25/buwan, pinagana ang DNS Failover
Amazon Route 53 mula sa $35/buwan para sa isang netong 50M geo-request. Ang DNS Failover ay sinisingil nang hiwalay
CloudFlare, available ang feature na "Geo Steering" sa mga Enterprise plan
Kapag nag-order ng geoDNS, dapat mong bigyang pansin ang bilang ng mga kahilingan na kasama sa taripa at tandaan na ang aktwal na bilang ng mga kahilingan sa domain ay maaaring lumampas sa mga inaasahan nang ilang beses. Milyun-milyong spider, scanner, spammer at iba pang masasamang espiritu ang walang pagod na nagtatrabaho.
Halos lahat ng serbisyo ng DNS ay may kasamang kailangang-kailangan na serbisyo para sa pagbuo ng CDN - DNS Failover. Sa tulong nito, maaari mong i-set up ang pagsubaybay sa pagpapatakbo ng iyong mga server at, sa kawalan ng mga palatandaan ng buhay, awtomatikong palitan ang address ng isang hindi gumaganang server ng isang backup na isa sa mga tugon sa DNS.
Upang bumuo ng aming CDN, gagamitin namin CloudDNS, taripa ng GeoDNS.
Magdagdag tayo ng bagong DNS zone sa iyong personal na account, na tumutukoy sa iyong domain. Kung tayo ay nagtatayo ng CDN sa isang subdomain, at ang pangunahing domain ay ginagamit na, pagkatapos kaagad pagkatapos idagdag ang zone, huwag kalimutang idagdag ang umiiral na gumaganang mga tala ng DNS. Ang susunod na hakbang ay gumawa ng ilang A-record para sa CDN domain / subdomain, bawat isa ay ilalapat sa rehiyon na aming tinukoy. Maaari mong tukuyin ang mga kontinente o bansa bilang mga rehiyon, ang mga sub-rehiyon ay magagamit para sa USA at Canada.
Sa aming kaso, ang CDN ay itataas sa isang subdomain cdn.sayt.in. Sa pamamagitan ng pagdaragdag ng isang zone sayt.in, lumikha ng unang A-record para sa subdomain at ituro ang lahat ng North America sa server sa Chicago:
Ulitin natin ang pagkilos para sa ibang mga rehiyon, na inaalala na gumawa ng isang entry para sa mga default na rehiyon. Narito kung ano ang mangyayari sa dulo:
Ang huling default na entry sa screenshot ay nangangahulugan na ang lahat ng hindi natukoy na mga rehiyon (at ito ay Europe, Africa, satellite Internet user, atbp.) ay ipapadala sa server sa Frankfurt.
Kinukumpleto nito ang pangunahing pag-setup ng DNS. Nananatili itong pumunta sa website ng domain registrar at palitan ang kasalukuyang mga domain NS ng mga ibinigay ng ClouDNS. At habang ina-update ang mga NS, ihahanda namin ang mga server.
Pag-install ng mga SSL certificate
Ang aming CDN ay gagana sa HTTPS, kaya kung mayroon ka nang mga SSL certificate para sa isang domain o subdomain, i-upload ang mga ito sa lahat ng mga server, halimbawa, sa direktoryo /etc/ssl/yourdomain/
Kung walang mga sertipiko, maaari kang makakuha ng libre mula sa Let's Encrypt. Perpekto para dito ACME Shellscript. Ang kliyente ay maginhawa at madaling i-set up, at higit sa lahat, pinapayagan ka nitong patunayan ang isang domain/subdomain sa pamamagitan ng DNS sa pamamagitan ng ClouDNS API.
Mag-i-install kami ng acme.sh sa isa lang sa mga server - European 199.247.18.199, kung saan kokopyahin ang mga certificate sa lahat ng iba pa. Upang i-install, patakbuhin ang:
Sa panahon ng pag-install ng script, isang CRON na trabaho ang gagawin para sa karagdagang pag-renew ng mga sertipiko nang hindi kami nakikilahok.
Kapag nag-isyu ng certificate, susuriin ang domain gamit ang DNS gamit ang API, kaya sa personal na account ng ClouDNS sa menu ng Reseller API, kailangan mong lumikha ng bagong user API at magtakda ng password para dito. Ang magreresultang auth-id na may password ay isusulat sa file ~/.acme.sh/dnsapi/dns_cloudns.sh (hindi malito sa file dns_clouddns.sh). Narito ang mga linyang kailangang i-uncomment at i-edit:
Sa mga opsyon, para sa hinaharap, tinukoy namin ang isang command na awtomatikong i-reload ang configuration ng web server pagkatapos ng bawat pag-renew ng panahon ng validity ng certificate sa hinaharap.
Ang buong proseso ng pagkuha ng sertipiko ay maaaring tumagal ng hanggang 2 minuto, huwag itong matakpan. Kung may nangyaring error sa pagpapatunay ng domain, subukang patakbuhin muli ang command. Sa dulo makikita natin kung saan na-upload ang mga sertipiko:
Tandaan ang mga landas na ito, kakailanganin nilang tukuyin kapag kinokopya ang sertipiko sa iba pang mga server, pati na rin sa mga setting ng web server. Hindi namin binibigyang pansin ang error sa pag-reload ng mga config ng Nginx - hindi ito magiging ganap na naka-configure na server kapag nag-a-update ng mga sertipiko.
Ang natitira na lang namin para sa SSL ay kopyahin ang natanggap na sertipiko sa dalawang iba pang mga server habang pinapanatili ang landas sa mga file. Gumawa tayo ng parehong mga direktoryo sa bawat isa sa kanila at gumawa ng kopya:
Para regular na mag-update ng mga certificate, gumawa ng pang-araw-araw na trabaho ng CRON sa parehong mga server gamit ang command:
scp -r [email protected]:/root/.acme.sh/cdn.sayt.in/* /root/.acme.sh/cdn.sayt.in/ && service nginx reload
Sa kasong ito, dapat na i-configure ang access sa remote source server sa pamamagitan ng susi, ibig sabihin. nang hindi naglalagay ng password. Huwag kalimutang gawin ito.
Pag-install at pag-configure ng Nginx
Upang maghatid ng static na nilalaman, gagamitin namin ang Nginx na na-configure bilang isang caching proxy server. I-update ang mga listahan ng package at i-install ito sa lahat ng tatlong server:
max_size β ang laki ng cache, hindi lalampas sa magagamit na espasyo sa disk
hindi aktibo - oras ng imbakan ng naka-cache na data na walang na-access
ssl_certificate ΠΈ ssl_certificate_key β mga landas sa SSL certificate at mga pangunahing file
proxy_cache_valid - oras ng imbakan ng naka-cache na data
proxy_pass β address ng orihinal na server kung saan hihingi ang CDN ng mga file para sa pag-cache. Sa aming halimbawa, ito sayt.in
Tulad ng nakikita mo, ang lahat ay simple. Ang kahirapan ay maaari lamang lumitaw sa pagtatakda ng oras ng pag-cache dahil sa pagkakapareho ng mga direktiba hindi aktibo ΠΈ proxy_cache_valid. Suriin natin ang mga ito sa ating halimbawa. Narito kung ano ang mangyayari kapag hindi aktibo=7d ΠΈ proxy_cache_valid 90d:
kung ang kahilingan ay hindi naulit sa loob ng 7 araw, ang data ay tatanggalin mula sa cache pagkatapos ng panahong ito
kung ang kahilingan ay paulit-ulit nang hindi bababa sa isang beses bawat 7 araw, ang data sa cache ay ituturing na lipas na pagkatapos ng 90 araw at ang Nginx ay ia-update ito sa susunod na kahilingan, na kukunin ito mula sa orihinal na server
Tapos na mag-edit nginx.conf, i-reload ang configuration:
root@cdn:~# service nginx reload
Ang aming CDN ay handa na. Para sa $15/buwan. nakatanggap kami ng mga punto ng presensya sa tatlong kontinente at 3 TB ng trapiko: 1 TB sa bawat lokasyon.
Sinusuri ang gawain ng CDN
Tingnan natin ang mga ping sa aming CDN mula sa iba't ibang heyograpikong lokasyon. Ang anumang serbisyo ng ping ay gagana para dito.
Great Britain, London
cdn.sayt.in
199.247.18.199
14.9
Canada, Toronto
cdn.sayt.in
149.28.121.123
16.2
USA, San Francisco
cdn.sayt.in
149.28.121.123
52.7
USA, Dallas
cdn.sayt.in
149.28.121.123
23.1
USA, Chicago
cdn.sayt.in
149.28.121.123
2.6
USA, New York
cdn.sayt.in
149.28.121.123
19.8
Singgapur
cdn.sayt.in
157.230.240.216
1.7
Japan Tokyo
cdn.sayt.in
157.230.240.216
74.8
Australia, Sydney
cdn.sayt.in
157.230.240.216
95.9
Maganda ang mga resulta. Ngayon ay maglalagay kami ng isang pagsubok na imahe sa ugat ng pangunahing site test.jpg at suriin ang bilis ng pag-download nito sa pamamagitan ng CDN. Sinabi na - tapos na. Mabilis na naihatid ang nilalaman.
Sumulat tayo ng isang maliit na script kung sakaling gusto nating i-clear ang cache sa CDN point. purge.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
Upang tanggalin ang buong cache, patakbuhin lamang ito, maaaring linisin ang isang hiwalay na file tulad nito:
root@cdn:~# ./purge.sh /test.jpg
Sa halip na mga konklusyon
Sa wakas, gusto kong magbigay ng ilang kapaki-pakinabang na tip upang agad na matapakan ang kalaykay na nagpasakit ng aking ulo noong panahong iyon:
Upang mapataas ang fault tolerance ng CDN, inirerekumenda na i-configure ang DNS Failover, na tumutulong upang mabilis na baguhin ang A record kung sakaling magkaroon ng pagkasira ng server. Ginagawa ito sa control panel ng mga DNS record ng domain.
Ang mga site na may malawak na heyograpikong saklaw ay walang alinlangan na nangangailangan ng malaking bilang ng mga CDN, ngunit huwag tayong maging panatiko. Malamang na hindi mapapansin ng user ang isang makabuluhang pagkakaiba kumpara sa isang bayad na CDN kung maglalagay ka ng mga server sa 6-7 na lokasyon: Europe, North America (silangan), North America (west), Singapore, Australia, Hong Kong o Japan
Minsan hindi pinapayagan ng mga hoster ang paggamit ng mga inuupahang server para sa mga layunin ng CDN. Samakatuwid, kung bigla kang magpasya na mag-deploy ng network ng paghahatid ng nilalaman bilang isang serbisyo, huwag kalimutang basahin nang maaga ang mga panuntunan ng isang partikular na hosting provider.
Galugarin mapa ng komunikasyon sa ilalim ng dagatupang kumatawan kung paano konektado ang mga kontinente at isaalang-alang ito kapag bumubuo ng network ng paghahatid ng nilalaman
Subukan mong suriin mga ping mula sa iba't ibang lugar sa iyong mga server. Sa ganitong paraan makikita mo ang mga rehiyong pinakamalapit sa mga CDN point at mas maayos na i-configure ang GeoDNS
Depende sa mga gawain, magiging kapaki-pakinabang ang pag-fine-tune ng Nginx para sa mga partikular na kinakailangan sa pag-cache at isinasaalang-alang ang pagkarga sa server. Ang mga artikulo tungkol sa Nginx cache ay nakatulong sa akin ng malaki dito - dito at pagpapabilis ng trabaho sa ilalim ng mabibigat na karga: dito ΠΈ dito