jak vytvořit svůj vlastní CDN

 Vytvořte si vlastní CDN síť-TutorialZdroj obrázku: Infographic vector vytvořil pikisuperstar — www.freepik.com

sítě pro doručování obsahu (CDN) jsou obecně používány weby a aplikacemi pro urychlení načítání statických prvků. Toho je dosaženo ukládáním souborů do mezipaměti na serverech CDN umístěných v různých oblastech světa. Po vyžádání dat prostřednictvím CDN je uživatel obdrží od nejbližšího serveru.

základní principy CDN a jejich funkčnost jsou pro všechny přibližně stejné. Po obdržení žádosti o soubor jej server CDN jednou vezme ze serveru origin a poté jej přenese uživateli a uloží jeho kopii na určitou dobu. Další požadavky na data jsou zpracovávány pomocí mezipaměti. Všechny CDN mají možnosti předběžného načítání souborů, vymazání mezipaměti, doby uchovávání mezipaměti a mnoho dalšího.

někdy se z různých důvodů může stát, že člověk potřebuje vybudovat vlastní CDN, a proto uvádíme následující návod, jak to realizovat.

kdy potřebujete vlastní CDN?

pojďme se podívat na situace, kdy budete muset vytvořit vlastní CDN:

  • když se snažíte ušetřit peníze a dokonce i cenově dostupná řešení, jako je BunnyCDN, vás nakonec stojí stovky dolarů za měsíc
  • pokud chcete získat trvalou mezipaměť nebo potřebujete zaručenou šířku pásma a zdroje
  • stávající CDN nemají vyskakovací okna ve vaší cílové oblasti
  • potřebujete speciální nastavení doručování obsahu
  • chcete urychlit doručování dynamického obsahu tím, že jej budete obsluhovat blíže uživatelům
  • máte obavy, že CDN třetích stran mohou nelegálně shromažďovat a používat uživatelská data (Ahoj, servery, které nejsou V souladu s GDPR) nebo se zapojit do jiných nezákonných činností

ve většině ostatních případů je životaschopnější používat stávající hotová řešení.

pojďme vytvořit vlastní CDN

k vybudování i jednoduché sítě pro doručování obsahu potřebujete následující:

  • název domény nebo subdoména
  • minimálně dva servery v různých regionech. Servery mohou být dedikované nebo virtuální
  • geodns nástroj. S ním bude uživatel, který odešle požadavek na doménu, přesměrován na nejbližší server

registrace domény a objednávání serverů

registrace názvu domény je snadná-stačí ji zaregistrovat v libovolné zóně domény, kterou preferujete. Pro CDN můžete použít také subdoménu, jako cdn.domainname.com. to je případ následujícího příkladu.

pokud jde o servery, měli byste si je pronajmout v regionech a zemích, kde se nachází vaše cílové publikum. Pokud je váš projekt intercontinental, je vhodné vybrat si z poskytovatelů hostingu, kteří nabízejí servery po celém světě, jako jsou OVH, Leaseweb a 100Tb (pro dedikované servery) nebo Vultr a DigitalOcean(pro virtuální a cloudové servery).

pro naše soukromé CDN objednejme tři virtuální servery na různých kontinentech. Vultr nám nabízí 25 GB SSD prostoru a 1 TB provozu za 5 $ / měsíc. Během instalace vyberte nejnovější Debian. Zde jsou naše servery:

  • Frankfurt nad Mohanem: 199.247.18.199

  • Chicago, ip: 149.28.121.123

  • Singapur, ip: 157.230.240.216

konfigurace geoDNS

abychom zajistili, že klienti budou při odesílání požadavků na naši doménu nebo subdoménu přesměrováni na správné (nejbližší) servery, budeme potřebovat DNS server s funkčností geoDNS.

takto fungují geodny:

  1. získá IP klienta (pokud odeslal požadavek DNS) nebo IP rekurzivního serveru DNS, který se používá pro zpracování požadavku. Obecně řečeno, takové rekurzivní servery jsou obvykle DNSs poskytovatelů internetu.
  2. podle IP klienta identifikuje jejich zemi nebo oblast. Tato operace vyžaduje použití databáze GeoIP, které jsou k dispozici v žádném nedostatku. Existují dokonce slušné bezplatné možnosti.
  3. v závislosti na poloze klienta mu geoDNS vrátí IP adresu nejbližšího serveru CDN.

DNS server s funkčností geodnů je něco, co si můžete vytvořit sami, ale je lepší použít hotová řešení, která mají servery kolem světa a možnost out-of the-box Anycast:

  • ClouDNS, od $9.95 / měsíc, balíček GeoDNS, jeden DNS Failover je standardně poskytován
  • Zilore, od $ 25 / měsíc, zahrnuje DNS Failover
  • Amazon Route 53, od $ 35 / měsíc pro 50 milionů geo-požadavků. DNS Failover je cena zvlášť
  • DNS Snadné, od $ 125 / měsíc, s 10 DNS selhání
  • Cloudflare, Funkce Geo řízení je k dispozici v podnikových balíčcích

při objednávání geodnů musíte věnovat pozornost počtu požadavků obsažených v balíčku a mějte na paměti, že skutečné číslo požadavků může výrazně překročit vaše očekávání. Existují miliony webových prohledávačů, skenery, spammery a další ďábelství v práci v daném okamžiku.

téměř všechny služby DNS obsahují užitečnou funkci pro vytváření CDN-převzetí služeb při selhání DNS. S ním můžete nakonfigurovat monitorování aktivity tak, že pokud server klesne, systém místo toho automaticky přesměruje klienty na pracovní servery.

pro naše CDN použijme ClouDNS a jeho balíček GeoDNS.

v profilu přidejte novou zónu DNS a zadejte název domény. Pokud používáte subdoménu a používá se hlavní doména, nezapomeňte přidat stávající záznamy DNS ihned po přidání zóny. Dalším krokem je vytvoření několika záznamů a pro doménu/subdoménu CDN, z nichž každá bude použita pro zadanou oblast. Kontinenty nebo země můžete označit jako regiony a možnosti podoblasti jsou k dispozici pro USA a Kanadu.

v našem příkladu bude CDN pracovat na cdn.sayt.in subdoména. Po přidání sayt.in zóna, vytvořte první záznam pro subdoménu a nasměrujte všechny klienty NA server Chicago:

Přidat nový záznam DNS

opakujte tento krok pro ostatní regiony a nezapomeňte vytvořit jeden záznam pro výchozí regiony. Zde je konečný výsledek:

záznamy GeoDNS potřebné k vytvoření vlastního CDN

posledním výchozím záznamem jsou požadavky ze všech nespecifikovaných regionů (Evropa ,Afrika, uživatelé satelitního internetu atd.).) směřují na Frankfurtský server.

tím se uzavírá základní konfigurace DNS. Zbývá jen přejít na web registrátora a nahradit aktuální jmenné servery těmi, které poskytuje ClouDNS. Zatímco jsou aktualizovány, nastavíme servery.

instalace SSL certifikátů

naše CDN bude fungovat pomocí HTTPS, takže pokud již máte SSL certifikáty pro doménu nebo subdoménu, nahrajte je na všechny servery, například do adresáře/etc/ssl/ yourdomain/.

pokud nemáte žádné certifikáty, můžete je získat zdarma od Let ‚ s Encrypt. ACME Shell script je skvělá volba. Má uživatelsky přívětivého klienta a co je důležitější, umožňuje provádět validaci domény / subdomény přes DNS pomocí API od ClouDNS.

nainstalujeme acme.sh pouze na jednom serveru — evropském (199.247.18.199) a z něj budou certifikáty zkopírovány do všech ostatních. Chcete-li jej nainstalovat, spusťte následující příkaz:

root@cdn:~# wget -O - https://get.acme.sh | bash; source ~/.bashrc
vstup do režimu celé obrazovky ukončete režim celé obrazovky

během instalace bude vytvořen CRON úkol pro automatickou aktualizaci certifikátů.

ověření domény po vydání certifikátu bude provedeno pomocí DNS pomocí API, takže v profilu ClouDNS v rámci Reseller API vytvořte nového uživatele API a zadejte pro něj heslo. Zadejte výsledné auth-id spolu s heslem do následujícího souboru:~/. acme.sh/dnsapi/dns_cloudns.sh (nesmí být zaměňována s dns_clouddns.sh zde jsou řádky, které je třeba odkomentovat a upravit:

CLOUDNS_AUTH_ID=<auth-id>CLOUDNS_AUTH_PASSWORD="<password>"
vstup do režimu celé obrazovky ukončete režim celé obrazovky

nyní požádáme o vydání certifikátu SSL pro cdn.sayte.v

root@cdn:~# acme.sh --issue --dns dns_cloudns -d cdn.sayt.in --reloadcmd "service nginx reload"
vstup do režimu celé obrazovky ukončete režim celé obrazovky

pro budoucí použití jsme v parametrech nechali příkaz pro automatický restart konfigurace po každém obnovení certifikátu.

proces získání certifikátu může trvat až dvě minuty, takže jej nepřerušujte. V případě, že dojde k chybě ověření domény, zkuste příkaz znovu spustit. Nakonec uvidíme, kde byly certifikáty staženy.

 SSL certifikáty vydávající

Zapamatujte si tyto cesty, budeme je muset zadat při kopírování certifikátů na jiné servery a budeme je muset zadat v nastavení serveru. Ignorujte chybu opětovného načtení nginx config, – nedojde k ní na plně nakonfigurovaném serveru během obnovení certifikátu.

pokud jde o certifikát SSL, vše, co zbývá udělat, je zkopírovat jej na dva další servery, které ukládají cesty certifikátu. Vytvořte identické adresáře na každém serveru a poté zkopírujte soubory certifikátů:

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/
vstup do režimu celé obrazovky ukončete režim celé obrazovky

Chcete-li automatizovat obnovení certifikátu, musíte na obou serverech vytvořit denní úlohu CRON. Níže je příkaz, který byste měli přidat do úloh CRON:

scp -r [email protected]:/root/.acme.sh/cdn.sayt.in/* /root/.acme.sh/cdn.sayt.in/ && service nginx reload</pre>
vstup do režimu celé obrazovky ukončete režim celé obrazovky

mějte na paměti, že připojení ke vzdálenému serveru origin vyžaduje přístup pomocí klíče bez zadání hesla. Nezapomeňte ji vytvořit.

instalace a konfigurace Nginx

pro dodání statického obsahu použijeme Nginx, nakonfigurovaný jako proxy server pro ukládání do mezipaměti. Aktualizujte seznamy balíčků a nainstalujte je na všechny tři servery:

root@cdn:~# apt updateroot@cdn:~# apt install nginx
vstup do režimu celé obrazovky ukončete režim celé obrazovky

místo výchozí konfigurace použijte následující:

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; } }}
vstup do režimu celé obrazovky ukončete režim celé obrazovky

v config, pojďme upravit:

  • max_size — velikost mezipaměti nepřesahující dostupné místo na disku
  • neaktivní — retenční čas pro nevyžádaná data uložená v mezipaměti
  • ssl_certificate a ssl_certificate_key — cesty k certifikátu SSL a klíči
  • proxy_cache_valid — retenční čas pro data uložená v mezipaměti
  • proxy_pass — adresa původního serveru, ze kterého bude CDN požadovat data pro cachování. Pro náš příklad je to sayt.in

jak vidíte, není to žádná raketová věda. Jediným problémem je konfigurace retenčního času vzhledem k podobnostem mezi neaktivními a proxy_cache_valid parametry. Podívejme se blíže. Zde je to, co se stane s inactive=7d a proxy_cache_valid=90d:

  • pokud se požadavek neopakuje do 7 dnů, data jsou vymazána z mezipaměti
  • pokud se požadavek opakuje i jednou během 7 dnů, mezipaměť bude považována za zastaralou po 90 dnech a další požadavek způsobí, že Nginx aktualizuje ze serveru původu

pomocí nginx.conf manipulováno, znovu načíst konfiguraci:

root@cdn:~# service nginx reload
vstup do režimu celé obrazovky ukončete režim celé obrazovky

naše CDN je tedy připraveno k použití! Za $ 15 / měsíc jsme dostali PoPs na třech kontinentech a 3TB provozu: 1TB pro každý region.

kontrola našeho CDN

pojďme se podívat na ping na naše CDN z různých míst. V tomto případě budou provedeny všechny služby ping.

Ping server hostitel IP Avg čas, msec
Německo, Berlín cdn.sayt.in 199.247.18.199 9.6
Nizozemsko, Amsterdam cdn.sayt.in 199.247.18.199 10.1
France, Paris cdn.sayt.in 199.247.18.199 16.3
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
Spojené státy americké, San Francisco cdn.sayt.in 149.28.121.123 52.7
Spojené státy americké, Dallas cdn.sayt.in 149.28.121.123 23.1
Spojené státy americké, Chicago cdn.sayt.in 149.28.121.123 2.6
Spojené státy americké, New York cdn.sayt.in 149.28.121.123 19.8
Singapur cdn.sayt.in 157.230.240.216 1.7
Japonsko, Prefektura Tokio cdn.sayt.in 157.230.240.216 74.8
Austrálie, Sydney cdn.sayte.v 157.230.240.216 95.9

výsledky jsou dobré. Nyní umístíme testovací obrázek s názvem test.jpg na hlavním serveru a zkontrolujte, jak rychle se načte přes CDN. Řekl a udělal. Načítání je rychlé.

udělejme malý skript pro případ, že potřebujeme vymazat mezipaměť v bodě CDN.

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
vstup do režimu celé obrazovky ukončete režim celé obrazovky

Chcete-li vymazat veškerou mezipaměť na serveru, jednoduše spusťte skript. Pokud potřebujete nějaký soubor vymazán, stačí zadat jeho cestu:

root@cdn:~# ./purge.sh /test.jpg 
vstup do režimu celé obrazovky ukončete režim celé obrazovky

Chcete-li vymazat mezipaměť všude skript musí být spuštěn na všech serverech CDN.

místo závěrů

nakonec bych chtěl dát několik užitečných tipů, abyste se vyhnuli pádu do nástrah, které jsem již vyčistil:

  • zvažte náklady na životaschopnost a údržbu vašeho budoucího CDN. Ve většině případů je mnohem efektivnější a jednodušší koupit levný CDN, který bude s největší pravděpodobností stabilnější a bude mít lepší kvalitu.
  • Chcete-li zlepšit odolnost proti chybám CDN, doporučujeme nastavit selhání DNS, které vám umožní rychle přepnout záznam A v případě přerušení serveru. Můžete tak učinit v ovládacím panelu záznamů DNS.
  • webové stránky s širokým pokrytím vyžadují velké množství vyskakovacích oken,ale nepřehánějte. S největší pravděpodobností si uživatel nevšimne rozdílu mezi vaším CDN a placeným, pokud máte servery na 6-7 místech (Evropa ,Severní Amerika (východ), Severní Amerika (Západ), Singapur, Austrálie, Hongkong nebo Japonsko).
  • někdy poskytovatelé hostingu neumožňují používat pronajaté servery pro CDN. Pokud tedy chcete vytvořit službu CDN, přečtěte si podmínky poskytovatele hostingu.
  • prostudujte si podmořskou kabelovou mapu, abyste pochopili, jak jsou kontinenty propojeny, a využijte tyto znalosti při vytváření CDN.
  • zkuste ping servery z různých míst. Tímto způsobem můžete najít regiony nejblíže k PoPs a pomůže vám nakonfigurovat Geodny.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.