Ako distributovat subory vo vlastnej CDN?

hknmtt

Ako distributovat subory vo vlastnej CDN?
« kdy: 20. 10. 2022, 08:30:41 »
Robim vlastnu/sukromnu CDN a riesim ako distribuovat subory. Pojde o rozne velkosti od par kb az po gigabajty(video).

Vzhladom na to, ze nechcem distribuovat subory 1:1 tak musim riesit distribuciu manualne.

Idea je taka ze ked sa nahra novy subor, tak si ho cdn nody vypytaju lebo je vysoka sanca ze bude ziadany.

Po tyzdni od poslednej navstevy sa subory z nodov same zmazu aby zbytocne nezaberali miesto.

Ak node subor nema lokalne tak presmeruje uzivatela na zdrojovy server a sam si ho stiahnem pre buducu navstevu.

Problem jem ze nechcem zahltit zdrojovy server poziadavkami na subory tak ze DDOSnem sam seba.

Dalsia vec je ako subory posielat - staci websocket, length-value format priamo "po kably", alebo nieco ine?

Kompresia pri prenose je jasna.

Riesit jeden subor naraz alebo paralelizovat - zase kao neodfajcit zdrojovy server ale...?

Skratka, ako dnes CDN bezne riesia distribuciu po technickej stranke?


hknmtt

Re:Ako distributovat subory vo vlastnej CDN?
« Odpověď #1 kdy: 20. 10. 2022, 09:27:44 »
hm, myslim ze asi najlepsie bude ist cestou cache proxy s tym, ze len musim zabezpecit to aby iba jeden process stahoval jeden subor. cize ked pride viac dopytov na jeden subor tak aby sa nezacal stahovat viacnasobne. a plus sa moze servirovat aj nedokonceny subor pokial sa stale stahuje. a taktiez ak klient zavrie spojenie tak aby sa subor na pozadi dotahal.
« Poslední změna: 20. 10. 2022, 09:30:45 od hknmtt »

motyq

Re:Ako distributovat subory vo vlastnej CDN?
« Odpověď #2 kdy: 20. 10. 2022, 10:46:23 »
Kdysi jsem řešil, nakonec jsem pořešil pomocí nginx a jeho `proxy_store` + `proxy_cache`. Jde tam nastavit i po kolika requestech na lokálně neexistující asset se má teprve stáhnout (store) na lokální úložiště.
proxy_store je pěkné v tom, že ti na té nginx nodě dělá stejnou adresářovou strukturu jako na zdroji dat.
Co se týče videa, tam bych tedy doporučova ho rozsekat na nějaké třeba 10MB kusy (aspoň) a netahat vždy všechno, ale fungovat to bude i s velkými soubory.

Pak to fungovalo tak, že se nahodila prázdná noda, a když na ni přišel request který by vrátil 404, tak se poptala okolních nod a asset sosla k sobě a vydala.

Bylo to v podstatě úplně "hloupé" ale velice efektivní a funkční.

Ještě jsem k tomu měl snad nějaké skripty, které uklízely na těch nodách ty proxy_storované objekty po nějaké době - pouze několik "master" nod měly vždycky úplně všechno.

Dnes by ten setup šel polepšit ještě o hromadu věcí jako třeba DNS nebo consul discovery apod...
Možná bych vyhrabal ještě někde config (bylo by nutné ho porovnat na aktuální možnosti nginxu)


hknmtt

Re:Ako distributovat subory vo vlastnej CDN?
« Odpověď #3 kdy: 20. 10. 2022, 11:00:34 »
nginx nemozem pouzit lebo je tam pokrocila logika riadenia pristupu takze tam mam vsetko vo vlastnej rezii.
co sa tyka velkosti suborov, ono sa to tak ci onak chunkuje takze na velkosti nezalezi. akurat ak padne spojenie tak node musi vediet pokracovat v stahovani tam kde skoncil.

nad tym ze nody si tahaju od seba som rozmyslal ale na koniec ostanem pri centralizovanom ulozisku(jeden zdroj pravdy).

Ink

  • *****
  • 561
    • Zobrazit profil
    • E-mail
Re:Ako distributovat subory vo vlastnej CDN?
« Odpověď #4 kdy: 20. 10. 2022, 11:42:42 »
> Vzhladom na to, ze nechcem distribuovat subory 1:1 tak musim riesit distribuciu manualne.

Manualne? CDN je cache, takze se to bezne dela tak, ze si stahuje soubor (nebo jednotlive chunky) z origin serveru - pokud ho nema ulozeny nebo ma zastaraly, ale az je o nej explicitni zajem. Jakmile ma chunk stazeny, muze ho posilat tomu, kdo si ho vyzada.

> Idea je taka ze ked sa nahra novy subor, tak si ho cdn nody vypytaju lebo je vysoka sanca ze bude ziadany.

Fakt to potrebujes?

> Po tyzdni od poslednej navstevy sa subory z nodov same zmazu aby zbytocne nezaberali miesto.

Klidne, ale tech strategii muze byt vic a IMO i jednodussich k implementaci.

> Ak node subor nema lokalne tak presmeruje uzivatela na zdrojovy server a sam si ho stiahnem pre buducu navstevu.

Tohle podle me nechces, uzivatel nema na origin serveru co delat.

> Problem jem ze nechcem zahltit zdrojovy server poziadavkami na subory tak ze DDOSnem sam seba.

Nejlip tudiz udelas, kdyz ty soubory budes stahovat az podle potreby.

> Dalsia vec je ako subory posielat - staci websocket, length-value format priamo "po kably", alebo nieco ine?

Normalne pres HTTP. Schema je uzivatel <-> CDN <-> origin. Zjednodusene receno.


Re:Ako distributovat subory vo vlastnej CDN?
« Odpověď #5 kdy: 20. 10. 2022, 14:20:27 »
podívej se na varnish, přesně tohle umí.

RDa

  • *****
  • 1 996
    • Zobrazit profil
    • E-mail
Re:Ako distributovat subory vo vlastnej CDN?
« Odpověď #6 kdy: 21. 10. 2022, 09:32:21 »
Po tyzdni od poslednej navstevy sa subory z nodov same zmazu aby zbytocne nezaberali miesto.

Proc to mazat? Zabrane misto vas nic nestoji, ani na SSD.

Ja bych to oznacil jen jako potencialne ke smazani - a az prijde pozadavek na natazeni neceho noveho, co potrebuje uvolnit misto, tak az teprve mazat prislusny pocet souboru z tohoto seznamu.

Tj resit to jako normalni cache eviction.