Content Delivery Networks (CDN) se na webech a aplikacích používají především k urychlení načítání statických prvků. K tomu dochází v důsledku ukládání souborů do mezipaměti na serverech CDN umístěných v různých geografických oblastech. Vyžádáním dat přes CDN je uživatel obdrží z nejbližšího serveru.
Princip fungování a funkčnost všech sítí pro doručování obsahu je přibližně stejný. Po obdržení požadavku na stažení souboru jej CDN server jednorázově převezme z původního serveru a předá jej uživateli a zároveň jej uloží do mezipaměti po určenou dobu. Všechny následující požadavky jsou zodpovězeny z mezipaměti. Všechny CDN mají možnosti pro předběžné načtení souborů, vymazání mezipaměti, nastavení data vypršení platnosti a další.
Stává se, že z toho či onoho důvodu potřebujete zorganizovat svou vlastní síť pro doručování obsahu, a pak - ať nám pomůže návod na sestavení dalšího kola.
Zvažte případy, kdy provozování vlastního CDN dává smysl:
když je touha ušetřit peníze a provozní náklady i při použití levných CDN, jako jsou BunnyCDN ve výši několika set dolarů měsíčně
pokud chceme získat trvalou mezipaměť nebo mezipaměť bez sousedů serveru a kanálu
Služby CDN nemají body přítomnosti v regionu, který potřebujete
jakákoli potřebná speciální nastavení doručování obsahu
chceme urychlit doručování dynamického obsahu umístěním produkčního serveru blíže uživatelům
existuje obava, že služba CDN třetí strany může nezákonně shromažďovat nebo používat informace o chování uživatelů (ahoj služby, které nejsou v souladu s GDPR) nebo se zapojit do jiných nezákonných aktivit
Ve většině ostatních případů je vhodnější použít stávající hotová řešení.
Co potřebujete pro začátek
Je skvělé, pokud máte svůj vlastní autonomní systém (AS). S ním můžete přiřadit stejnou IP několika serverům a podle tohoto návodu na úrovni sítě nasměrujte uživatele na nejbližší. Stojí za zmínku, že i s adresovým blokem /24 je možné vybudovat síť pro doručování obsahu. Někteří poskytovatelé serverů vám umožňují učinit oznámení pro použití ve všech jim dostupných oblastech.
Pokud nejste šťastným vlastníkem bloku IP adres, pak ke spuštění jednoduchého CDN budete potřebovat:
název domény nebo subdoména
alespoň dva servery v různých regionech. Server může být dedikovaný nebo virtuální
nástroj geoDNS. S ním bude uživatel, který adresuje doménu, přesměrován na nejbližší server
Zaregistrujte si doménu a objednejte servery
S registrací domény je vše jednoduché – registrujeme se v jakékoli zóně u jakéhokoli registrátora. Můžete také použít subdoménu pro CDN, například něco jako cdn.domainname.com. Ve skutečnosti v našem příkladu uděláme právě to.
Pokud jde o objednávání serverů, měly by být pronajímány v regionech a zemích, kde se nachází vaše uživatelské publikum. Pokud je projekt mezikontinentální, pak je vhodné zvolit poskytovatele hostingu, kteří nabízejí servery po celém světě najednou. Příklady: OVH, pronájem webu и 100 TB - pro dedikované servery, Vultr и DigitalOcean — pro virtuální cloud*.
Pro naše privátní CDN objednáme 3 virtuální servery na různých kontinentech. Na Vultr na serveru pro 5 $/měs dostaneme 25GB SSD místa a 1 TB provozu. Při instalaci vyberte nejnovější Debian. Naše servery:
Frankfurt, ip: 199.247.18.199
Chicago, ip: 149.28.121.123
Singapore, ip: 157.230.240.216
* Společnosti Vultr a DigitalOcean slibují kredit 100 $ uživatelům, kteří se zaregistrují prostřednictvím odkazů v článku ihned po přidání platební metody. Autor z toho dostává i malou pochvalu, která je pro něj nyní velmi příznačná. Prosím o pochopení.
Nastavení geoDNS
Aby byl uživatel při přístupu na doménu nebo subdoménu CDN přesměrován na požadovaný (nejbližší) server, potřebujeme DNS server s funkcí geoDNS.
Princip a fungování geoDNS je následující:
Určuje IP klienta, který odeslal požadavek DNS, nebo IP rekurzivního serveru DNS, který se používá při zpracování požadavku klienta. Takové rekurzivní servery jsou obvykle DNS poskytovatelů.
IP klienta rozpoznává jeho zemi nebo region. K tomu slouží GeoIP databáze, kterých je dnes velké množství. Existují dobré bezplatné možnosti.
V závislosti na umístění klienta mu dá IP adresu nejbližšího CDN serveru.
DNS server s funkcí geoDNS může být sestavit sami, ale je lepší používat hotová řešení se sítí DNS serverů po celém světě a Anycast z krabice:
CloudDNS z 9.95 $/měs, tarif GeoDNS, standardně je jeden DNS Failover
Cloudflare, Funkce "Geo Steering" je k dispozici v plánech Enterprise
Při objednávání geoDNS byste měli věnovat pozornost počtu požadavků zahrnutých v tarifu a mít na paměti, že skutečný počet požadavků na doménu může několikanásobně předčit očekávání. Miliony pavouků, skenerů, spammerů a dalších zlých duchů neúnavně pracují.
Téměř všechny služby DNS obsahují nepostradatelnou službu pro budování CDN - DNS Failover. S jeho pomocí si můžete nastavit sledování provozu vašich serverů a při absenci známek života automaticky nahradit v DNS odpovědích adresu nefunkčního serveru za záložní.
K vytvoření našeho CDN použijeme CloudDNS, tarif GeoDNS.
Pojďme přidat novou zónu DNS do vašeho osobního účtu s uvedením vaší domény. Pokud budujeme CDN na subdoméně a hlavní doména je již používána, pak ihned po přidání zóny nezapomeňte přidat stávající funkční DNS záznamy. Dalším krokem je vytvoření několika A-záznamů pro CDN doménu / subdoménu, z nichž každý bude aplikován na region, který jsme zadali. Jako regiony můžete určit kontinenty nebo země, podoblasti jsou dostupné pro USA a Kanadu.
V našem případě bude CDN vytvořena na subdoméně cdn.sayt.in. Přidáním zóny sayt.in, vytvořte první záznam A pro subdoménu a nasměrujte celou Severní Ameriku na server v Chicagu:
Zopakujme akci pro další oblasti a nezapomeňme vytvořit jednu položku pro výchozí oblasti. Co se stane na konci:
Poslední výchozí položka na snímku obrazovky znamená, že všechny nespecifikované regiony (a to jsou Evropa, Afrika, uživatelé satelitního internetu atd.) budou odeslány na server ve Frankfurtu.
Tím je základní nastavení DNS dokončeno. Zbývá přejít na stránky registrátora domén a nahradit stávající doménové NS těmi, které vydává ClouDNS. A zatímco se budou aktualizovat NS, připravíme servery.
Instalace SSL certifikátů
Naše CDN bude fungovat přes HTTPS, takže pokud již máte certifikáty SSL pro doménu nebo subdoménu, nahrajte je na všechny servery, například do adresáře /etc/ssl/vasedomena/
Pokud certifikáty neexistují, můžete získat zdarma jeden od Let's Encrypt. Na to ideální ACME Shellscript. Klient je pohodlný a snadno se nastavuje a hlavně umožňuje validovat doménu/subdoménu pomocí DNS přes ClouDNS API.
Acme.sh nainstalujeme pouze na jeden ze serverů - evropský 199.247.18.199, ze kterého budou certifikáty zkopírovány na všechny ostatní. Chcete-li nainstalovat, spusťte:
Během instalace skriptu bude vytvořena úloha CRON pro další obnovu certifikátů bez naší účasti.
Při vydávání certifikátu bude doména zkontrolována pomocí DNS pomocí API, takže v osobním účtu ClouDNS v nabídce Reseller API je potřeba vytvořit nové uživatelské API a nastavit pro něj heslo. Výsledné auth-id s heslem bude zapsáno do souboru ~/.acme.sh/dnsapi/dns_cloudns.sh (neplést se souborem dns_clouddns.sh). Zde jsou řádky, které je třeba odkomentovat a upravit:
V možnostech jsme pro budoucnost určili příkaz pro automatické opětovné načtení konfigurace web serveru po každém obnovení doby platnosti certifikátu v budoucnu.
Celý proces získání certifikátu může trvat až 2 minuty, nepřerušujte jej. Pokud dojde k chybě ověření domény, zkuste příkaz spustit znovu. Na konci uvidíme, kam byly certifikáty nahrány:
Pamatujte si tyto cesty, bude nutné je zadat při kopírování certifikátu na jiné servery a také v nastavení webového serveru. Chybě při opětovném načítání konfigurací Nginx nevěnujeme pozornost - při aktualizaci certifikátů nebude na plně nakonfigurovaném serveru.
Pro SSL nám zbývá pouze zkopírovat přijatý certifikát na dva další servery při zachování cesty k souborům. Vytvořme stejné adresáře na každém z nich a udělejme kopii:
Chcete-li certifikáty pravidelně aktualizovat, vytvořte denní úlohu CRON na obou serverech pomocí příkazu:
scp -r [email protected]:/root/.acme.sh/cdn.sayt.in/* /root/.acme.sh/cdn.sayt.in/ && service nginx reload
V tomto případě musí být nakonfigurován přístup ke vzdálenému zdrojovému serveru podle klíče, tj. bez zadání hesla. Nezapomeňte to udělat.
Instalace a konfigurace Nginx
K poskytování statického obsahu použijeme Nginx nakonfigurovaný jako mezipaměťový proxy server. Aktualizujte seznamy balíčků a nainstalujte je na všechny tři servery:
max_size — velikost mezipaměti nepřesahující dostupné místo na disku
neaktivní - doba uložení dat uložených v mezipaměti, ke kterým nikdo neměl přístup
ssl_certificate и ssl_certificate_key — cesty k certifikátům SSL a souborům klíčů
proxy_cache_valid - doba uložení dat uložených v mezipaměti
proxy_pass — adresa původního serveru, ze kterého bude CDN požadovat soubory pro ukládání do mezipaměti. V našem příkladu toto sayt.in
Jak vidíte, vše je jednoduché. Potíže mohou nastat pouze při nastavení doby ukládání do mezipaměti kvůli podobnosti směrnic neaktivní и proxy_cache_valid. Pojďme je analyzovat na našem příkladu. Zde je to, co se stane, když neaktivní=7d и proxy_cache_valid 90d:
pokud se požadavek do 7 dnů nezopakuje, pak budou data po uplynutí této doby z cache vymazána
pokud se požadavek opakuje alespoň jednou za 7 dní, data v mezipaměti budou po 90 dnech považována za zastaralá a Nginx je aktualizuje s dalším požadavkem a vezme je z původního serveru
Úpravy dokončeny nginx.conf, znovu načtěte konfiguraci:
root@cdn:~# service nginx reload
Naše CDN je připraveno. Za 15 $/měs. získali jsme body přítomnosti na třech kontinentech a 3 TB provozu: 1 TB v každé lokalitě.
Kontrola práce CDN
Podívejme se na pingy na naše CDN z různých geografických míst. K tomu bude fungovat jakákoli služba ping.
Velká Británie, Londýn
cdn.sayt.in
199.247.18.199
14.9
Kanada, 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
Singapore
cdn.sayt.in
157.230.240.216
1.7
Japonsko Tokio
cdn.sayt.in
157.230.240.216
74.8
Austrálie, Sydney
cdn.sayt.in
157.230.240.216
95.9
Výsledky jsou dobré. Nyní umístíme testovací obrázek do kořenového adresáře hlavního webu test.jpg a zkontrolujte jeho rychlost stahování přes CDN. Říká se - hotovo. Obsah je doručen rychle.
Napíšeme si malý skript pro případ, že bychom chtěli vymazat mezipaměť na CDN bodu. 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
Chcete-li smazat celou mezipaměť, stačí ji spustit, samostatný soubor lze vyčistit takto:
root@cdn:~# ./purge.sh /test.jpg
Namísto závěrů
Nakonec bych chtěl dát několik užitečných tipů, abych mohl okamžitě překročit hrábě, ze kterého mě tehdy bolela hlava:
Pro zvýšení odolnosti CDN proti chybám se doporučuje nakonfigurovat DNS Failover, který pomáhá rychle změnit záznam A v případě poruchy serveru. To se provádí v ovládacím panelu DNS záznamy domény.
Stránky s širokým geografickým pokrytím bezpochyby vyžadují velké množství CDN, ale nebuďme fanatičtí. S největší pravděpodobností uživatel nezaznamená významný rozdíl ve srovnání s placenou CDN, pokud umístíte servery do 6-7 míst: Evropa, Severní Amerika (východ), Severní Amerika (západ), Singapur, Austrálie, Hong Kong nebo Japonsko.
Někdy hostitelé nepovolují použití pronajatých serverů pro účely CDN. Pokud se tedy náhle rozhodnete nasadit jako službu síť pro doručování obsahu, nezapomeňte si předem přečíst pravidla konkrétního poskytovatele hostingu
Prozkoumat podvodní komunikační mapareprezentovat, jak jsou kontinenty propojeny, a vzít to v úvahu při budování sítě pro doručování obsahu
Zkuste zkontrolovat pingy z různých míst na vaše servery. Tímto způsobem můžete vidět regiony nejblíže bodům CDN a správněji nakonfigurovat GeoDNS
V závislosti na úkolech bude užitečné Nginx doladit pro konkrétní požadavky na ukládání do mezipaměti a s ohledem na zatížení serveru. V tom mi hodně pomohly články o Nginx cache - zde a zrychlení práce při velkém zatížení: zde и zde