Fórum Root.cz
Hlavní témata => Server => Téma založeno: YourDog 08. 07. 2021, 17:53:12
-
Ahoj, chtěl bych se zeptat na váš názor, co si myslíte že bude rychlejší pro web crawlera napsaného v Pythonu.
4x Raspberry Pi 4 - 4GB verze, nebo v Intel NUC 4x virtualní stroj, případně 4 instance v Kubernetes (ve kterém ještě neumím) na jednom fyzickem stroji? 4 Pi 4GB se zdrojema a kartama vyjdou jen o trochu levněji, ale...
otázka je v tuhle chvíli síťová aktivita.. internet mám 100 Mbit, ale napadá mě jestli třeba ty Pi nemůžou benefitovat že mají každý svůj 1 Gbit port, i když jsou pomalejší na CPU. NUC s i5 (4C/8T) bude mnohem výkonější i když udělám 4x VM s 2 thready každý, ale sdílí jeden port a napadá mě jestli tam pak nebude vznikat nějaký čekání a přehlcenost množstvím paketů, IP adres nebo tak něco?
Třeba je to blbost ale napadá mě připodobnění k HDD že tam to s menšímy soubory taky zpomaluje IOPS. A ještě na ně bude 4x více požadavků.
Ukládat se do databaze na stejné síti budou až větší kusy a rovnou z RAM, takže v případě Pi by neměl být problém že system startuje z SD.
4x to chci pouštět, protože to lépe vytíží linku. Asi by se ten program dal napsat lépe aby to zvládl s jedním spuštěním, ale z budoucího hlediska je to lepší mít škálovatelný a taky nejsou prostoje když se na jednom něco pokazí. Ještě přidávám nákres jak by to mohlo vypadat.
(https://i.stack.imgur.com/dkIyc.jpg)
-
V první řadě záleží, co přesně bude ten web crawler dělat.
-
ale napadá mě jestli třeba ty Pi nemůžou benefitovat že mají každý svůj 1 Gbit port
Nevidim ze bys mel potrebnou konektivitu ani na jednu stranu - uzke hrdlo mas v pripojce na internet. Az ji zvednes nad 1Gb/s, tak bude uzke hrdlo pripojeni k databazi, ktere taky musis zvednout nad 1Gb/s, protoze pochybuji ze mas jinej switch. Pak se da bavit o tom, ze 4 stroje budou lepsi, nez jeden pripojeny beznym 1Gb/s.
A jak psal Ondrej, zalezi co to bude delat - jaky je pomer v objemu mezi vstupem/vystupem, jake jsou latence - dokazes tu ulohu vytizit aby te omezovalo CPU, nebo to bude omezeno jednou ze siti - interni/externi.
Celkove se takoveto veci nedelaji stylem "napisu dotaz na root", ale udelas si benchmarky a srovnas to - pokud nemas zadnou predeslou zkusenost.
-
ale napadá mě jestli třeba ty Pi nemůžou benefitovat že mají každý svůj 1 Gbit port
Nevidim ze bys mel potrebnou konektivitu ani na jednu stranu - uzke hrdlo mas v pripojce na internet. Az ji zvednes nad 1Gb/s, tak bude uzke hrdlo pripojeni k databazi, ktere taky musis zvednout nad 1Gb/s, protoze pochybuji ze mas jinej switch. Pak se da bavit o tom, ze 4 stroje budou lepsi, nez jeden pripojeny beznym 1Gb/s.
A jak psal Ondrej, zalezi co to bude delat - jaky je pomer v objemu mezi vstupem/vystupem, jake jsou latence - dokazes tu ulohu vytizit aby te omezovalo CPU, nebo to bude omezeno jednou ze siti - interni/externi.
Celkove se takoveto veci nedelaji stylem "napisu dotaz na root", ale udelas si benchmarky a srovnas to - pokud nemas zadnou predeslou zkusenost.
Tak já zas nejsem úplnej jantar, jen dělám v jiné oblasti a tohle je spíš hobby projekt, že se učím dělat s daty/texty a tím crawlerem je chci sbírat. Už mi funguje na desktopu (cca 25mbps)... na RPi3 stejnej program beží tak 50-60% rychlostí, ale ty operace nevytežují CPU a tak nevím proč je to pomalejší. To Pi3 má jen 300 mbit port a tak mě napadlo, jestli kromě maximální rychlosti není třeba i limit na maximální počet spojení nějaký buffer nebo něco... s tím třeba měly v minulosti problém některý routery že měly malou NAT tabulky a při stahovani P2P při velkém počtu spojení se to prostě odpojilo...
Je pravda že ty VM můžu zkusit aniž bych něco z toho kupoval a pak uvidim jestli je to společně 4x rychlejší a sežere to celých 100 mbit nebo to bude mít společně rychlost jen jako ta jedna instance. Ale více Pi4 nezkusím aniž bych je koupil.
Jinak DB je ted na 1Gbit ale do té se tak často nepřistupuje tam se jednou za čas nahraje velkej soubor a do budoucna chci upgradovat na více portů, bud koupím kartu nebo to pak utahne novy Synology s M.2 cache.
-
V první řadě záleží, co přesně bude ten web crawler dělat.
Klasicky jako třeba seznambot, chodit na různé stránky a ukládat je do DB pro další zpracování...v průměru je velikost asi 55kb. Jak jsem psal výše, ono to Pi3 na kterém jsem to testoval jede pomaleji, ted je otazka proč, když se to při testu nikam neukladalo jen do RAM. Asi to bude chtit zkusit koupit alespon jedno to Pi4 a napsat si nějaky benchmark.
-
Aj toto je riesenie :
VMware ESXi Free Hypervisor - bezplatny a podporovany na Intel NUC zariadeniach, nie si obmedzovany OS, nainstalujes si OS aky len chces. Niektore NUC maju M.2 (2280), PCIe x4 Gen 4 NVME (vacsi vykon ako RPi) a SATA port, takze das viac diskov do vnutra a mozes ich pridelovat virtualom.
Jednoducha sprava virtualnych masin cez prehliadac a samozrejme tvorba snapshotov, ked chces nieco testovat a vratit sa o krok spat, co na fyzickom hardveri neurobis (iba image disku), na virtuale bez problemu, par klikov. Kazdemu virtualu mozes dat az 8GB RAM :
VM1 (8GB RAM), napr. DB1 (M.2 PCIe x4 Gen 4 NVME), NIC1, OS1
VM2 (8GB RAM), napr. DB2 (M.2 PCIe x4 Gen 4 NVME), NIC2, OS2
VM3 (8GB RAM), napr. webserver1 (SATA SSD), USB NIC1, OS3
VM4 (8GB RAM), napr. webserver2 (SATA SSD), USB NIC2, OS4
Staci dat do vyhladavaca "Intel NUC VMWare Home Lab" a najde ti napr. velmi dobru stranku https://williamlam.com
https://williamlam.com/2021/01/esxi-on-11th-gen-intel-nuc-panther-canyon-tiger-canyon.html
-
Jaký důvod je 4x ve virtuálu? Nelze to spustit vícekrát/ve více procesech? Nebo jen lehké kontejnery lxc?
-
To bol len priklad. Virtualov moze byt kludne viac a s roznymi OS napr. 32bit/64bit Linux/Unix/BSD/Win/MacOS X/Solaris/Other...
Priklad2:
VM1 (4GB RAM), napr. DB1 (M.2 PCIe x4 Gen 4 NVME), NIC1, OS1
VM2 (4GB RAM), napr. DB2 (M.2 PCIe x4 Gen 4 NVME), NIC2, OS2
VM3 (4GB RAM), napr. webserver1 (SATA SSD), USB NIC1, OS3
VM4 (4GB RAM), napr. webserver2 (SATA SSD), USB NIC2, OS4
VM5 (4GB RAM), napr. webserver3 (M.2 PCIe x4 Gen 4 NVME), NIC1, OS5
VM6 (4GB RAM), napr. webserver4 (M.2 PCIe x4 Gen 4 NVME), NIC1, OS6
VM7 (4GB RAM), napr. webserver5 (SATA SSD), USB NIC1, OS7
VM8 (4GB RAM), napr. webserver6 (SATA SSD), USB NIC2, OS8
-
To je mi jasné, ale ptám se autora dotazu, k čemu virtuály pro crawling webu.
-
To je mi jasné, ale ptám se autora dotazu, k čemu virtuály pro crawling webu.
To je asi úplně jedno. Stejně všechno pojede s jednou veřejnou IP adresou (pochybuju, že by jich měl víc), takže se snadno a rychle dostane na blacklisty a providerovi začnou chodit stížnosti. Hodně štěstí!
-
To je mi jasné, ale ptám se autora dotazu, k čemu virtuály pro crawling webu.
To je asi úplně jedno. Stejně všechno pojede s jednou veřejnou IP adresou (pochybuju, že by jich měl víc), takže se snadno a rychle dostane na blacklisty a providerovi začnou chodit stížnosti. Hodně štěstí!
neni problem mit temer neomezene mnoho IP adres pres placenou proxi
-
To je mi jasné, ale ptám se autora dotazu, k čemu virtuály pro crawling webu.
Kvuli škálovatelnosti a proto že se více instancema vykrývají hluchá místa jako timeouty, crashe a neefetivní kod. Ale je pravda že by to mohlo fungovat stejně když to teď pustím 4x na jednom stroji, ale chci mít možnost to pustit na více strojích, asi by bylo lepší neučit se z toho udělat kubernetes balík v dnešní době.
-
To je mi jasné, ale ptám se autora dotazu, k čemu virtuály pro crawling webu.
To je asi úplně jedno. Stejně všechno pojede s jednou veřejnou IP adresou (pochybuju, že by jich měl víc), takže se snadno a rychle dostane na blacklisty a providerovi začnou chodit stížnosti. Hodně štěstí!
Jo, takže se na to mam rovnou vykašlat?
Já nevím jakou máš zkušenost, ale to mi přijde jak 90. léta. Ja mam zkušenost že i při bezohledném scrapování dat z jednoho webu to nikoho nezajímá. Bud mají tak velkej provoz že není možný si ani všimnout a nebo nemají nástroje tohle poznat, to by se ten web musel šíleně zbrzdit aby to někdo začal řešit.
Věc druhá, já nedělám žádnej scraper webů, ale slušnej crawler co respektuje robots.txt a návštěvy na stejné adrese dělá s mezerama jako ostatní akceptovaní crawleři.
A co se týče IP, ano mam jednu neveřejnou která jednou za čas rotuje, ale VPS stojí pár korun a u providera se taky za nějaky poplatek da koupit 5 IP. Proxy mam taky vyzkoušené, ale to je pomalejší a v případě slušného chování to asi ani není potřeba.
-
To bol len priklad. Virtualov moze byt kludne viac a s roznymi OS napr. 32bit/64bit Linux/Unix/BSD/Win/MacOS X/Solaris/Other...
Priklad2:
VM1 (4GB RAM), napr. DB1 (M.2 PCIe x4 Gen 4 NVME), NIC1, OS1
VM2 (4GB RAM), napr. DB2 (M.2 PCIe x4 Gen 4 NVME), NIC2, OS2
VM3 (4GB RAM), napr. webserver1 (SATA SSD), USB NIC1, OS3
VM4 (4GB RAM), napr. webserver2 (SATA SSD), USB NIC2, OS4
VM5 (4GB RAM), napr. webserver3 (M.2 PCIe x4 Gen 4 NVME), NIC1, OS5
VM6 (4GB RAM), napr. webserver4 (M.2 PCIe x4 Gen 4 NVME), NIC1, OS6
VM7 (4GB RAM), napr. webserver5 (SATA SSD), USB NIC1, OS7
VM8 (4GB RAM), napr. webserver6 (SATA SSD), USB NIC2, OS8
Ok diky.. Jak je na tom VMWare s vykonem? Já mam jen zkušenost s Hyper-V a Virtual Boxem a ten Box je pomalej, ale Hyper-V jede vícemeně jak na daném HW.
-
To je mi jasné, ale ptám se autora dotazu, k čemu virtuály pro crawling webu.
Kvuli škálovatelnosti a proto že se více instancema vykrývají hluchá místa jako timeouty, crashe a neefetivní kod. Ale je pravda že by to mohlo fungovat stejně když to teď pustím 4x na jednom stroji, ale chci mít možnost to pustit na více strojích, asi by bylo lepší neučit se z toho udělat kubernetes balík v dnešní době.
V pripade stahovani z netu, neni problem pustit nekolik vlaken na 1 cpu, protoze ty sitove reakcni doby jsou tak dlouhe ze klidne muzete tahat desitky pokud ne stovky domen naraz nez zacnete narazet na limity CPU. Kopirovani dat nebo jemne parsovani v rozumnem jazyce nevytezuje cpu. Idealni stav je, aby jste vytizil jak pripojeni tak CPU, s tim ze mit silnejsi CPU je snazsi nez lepsi linku.. a od toho se odviji optimalizace a architektura systemu (napr. cast co taha data, a cast co je parsuje je vhodne mit oddelene, je lze mit pustene takyy v asymetrickem pomeru).
Ad zda si toho provozovatel vsimne: samozrejme ze ano - po stazeni par set GB ze spatne nakonfigurovaneho serveru (povolene Indexes) provozovatel zavedl dodatecnou autentizaci na heslo. Ale rekl bych ze za to nemuzu jenom ja, protoze informace o te chybe byla prvne zindexovana Googlem, takze mnoho dalsich lidi, co neco opravuje, te vlastnosti nejspis vyuzilo a pak uz to bylo napadne.
-
Suma vstupu - balast = 10% výstupu?
Tak bych to dal na ty RPi.
Jsou místa, kde můžeš crawlit zdarma, aniž bys někoho obtěžoval. Možná v noci na konektivitě ve škole, v kavárně, v práci na WIFI pro zaměstnance, u babči na DSL. RPi se vleze všude. To neobtěžoval je zásadni! Někam jebneš crawluj.csv a výsledky zazipuješ a uploaduješ někam. WatchDoga uděláš třeba z ESP.
Za 300 jsou RPi like ovoceazeleniny. Zcrawlovaná data sypej na ramdisk, nic nezapisuj. Udělej si cron.job na úlohy, co mají přijít do cronu, update.job pro aktualizace crawlera...
Kdysi jsem takhle crawlil, ošustil jsem všechny stránky v čr za měsíc a půl. Jen ne do hloubky.
Dneska bych zase použil RPI, zamontoval je do 1U case a prdnul to do DC6. Za litr měsíčně si to žije svým životem na 1GbE.
Těch věcí, kolik se do 1U vleze, je hrozně moc. Konektivitu dostaneš IPv6 zadarmiko, zbytek NAT.
RPi můžeš nahradit VPS, ale tam bych použil filtr. Tj. jde o to získat data, ořezat je a okamžitě poslat dál. VPS filtruje balast, za 200Kč získáš získáš konektivitu, předzpracuješ data, aby to prolezlo přes DSL a zpracuješ doma.
-
Doplnění: Zrovna včera jsem viděl reklamu na VPS za 29 Kč (běžně tak 100 Kč).
Nějaké směšné systémové prostředky (tuším necelé GB RAM a disk do pěti GB), ale mělo veřejnou IP a za 30 Kč se jich dá pustit třeba deset.
Něco podobného by šlo i na Amazoním cloudu, generovat si je automaticky. Ale u Amazoního cloudu pozor na přenosy, oni mají sice "neomezenou" konektivitu, ale platí se tam nějaký 1 šprušlík za XY přenesených dat. Když těch dat přeneseš hodně, náklady lezou strmě nahoru. Nicméně Amazoní i jiné Cloudy běžně dávají nějaké drobné "na vyzkoušení služeb". Pokud by byly třeba 200 Kč měsíčně moc...
EDIT: Pokud by ses do toho pustil, dej vědět, jak získáváš seznam webových stránek v ČR. Já šel tupou cestou prohledávání seznamu vydaných SSL certifikátů a druhou "horší" cestou skenování "českých" IPv4 adres. To je bohužel celkem bolest, protože adresní prostor IPv4 je poměrně rozbitý a navíc, pokud je na nějaké webové adrese víc serverů, bez správného požadavku máš peška. Řešení je samozřejmě po adresy, na kterých webový server žije, zkusit reverzní DNS dotaz. No někdy to pomůže... Docela rád bych znal tvojí cestu.
Doplnění: Nezkoušej Crawlovat Google, crawlování nesnáší a při pokusu o vyhledávání bys pak musel řešit pokaždé captcha a navíc tě můžou zařadit na blacklist...což někteří poskytovatelé hodně špatně nesou. Jestli se podobně chová seznam nebo Bing nevím. Mimo to, chování Google se mohlo změnit. Už to jsou léta, co jsem to provozoval....jéééé chtěl jsem udělat vyhledávač, abych konkurovatl Google a měl vlastní DuckDuck ;D
-
Díky za info, napíšu do zprávy...
-
Tri veci, co ma napadaju k teme:
- bottleneck sa hlada "jednoducho"... Zacal by som iotop, iostat, sar, htop a podobnymi. Ked veci nebudu zjavne, tak nasadit cokolvek z repertoaru http://www.brendangregg.com/linuxperf.html
- aj nie je nutnost vlastneho kravleru, tak https://yacy.net/ ma pekny kravler a funkcny i pre lokalne pouzitie
- otazka, ci app pustat v kontajneri, alebo na virtualkach je "zcestna". Ak nejde o akademicke cvicenie, ale o serioznu app, tak musi byt nakodena tak, aby single app dokazala vyuzit cely server (fyzicky). Inak by to mohlo znamenat mrhanie prostriedkami, alebo nutnost k danej app na dany server prilepit inu app, aby sa doplnali co do spotreby zdrojov. Mam overene v praxi, ze pouzivanim "epol" (https://man7.org/linux/man-pages/man7/epoll.7.html, v jave je to nio balicek) je mozne na jednom threade "pocuvat" na milione endpointov (ip:port) a v jednom threade sa aplikacia ani nezapoti, ked ma odpovedat kratkymi spravami na kratke requesty (TCP). Latencia (95p) bola pod milisekundu. Pripadne odporucam mrknut 10k problem (https://en.wikipedia.org/wiki/C10k_problem) a jeho nastupcovia.
-
Doplnění: Nezkoušej Crawlovat Google, crawlování nesnáší a při pokusu o vyhledávání bys pak musel řešit pokaždé captcha a navíc tě můžou zařadit na blacklist...což někteří poskytovatelé hodně špatně nesou. Jestli se podobně chová seznam nebo Bing nevím.
Tohle je snad lepší řešit obecně tím, že budu respektovat robots.txt, ne? Pak nemusím zkoumat, jak to ten který web snáší, crawler to zjistí automaticky.
-
Doplnění: Nezkoušej Crawlovat Google, crawlování nesnáší a při pokusu o vyhledávání bys pak musel řešit pokaždé captcha a navíc tě můžou zařadit na blacklist...což někteří poskytovatelé hodně špatně nesou. Jestli se podobně chová seznam nebo Bing nevím.
Tohle je snad lepší řešit obecně tím, že budu respektovat robots.txt, ne? Pak nemusím zkoumat, jak to ten který web snáší, crawler to zjistí automaticky.
Crawlování je žádoucí, bez toho by se jinak nic nevyhledalo, nefungovala by ani heureka nic. Ale stále se z toho dělá šedá zóna nebo něco co dělají hackeři/spameři aby získali seznam emailu a podobně a plete se to s bezohledným scrapingem webů a dat, co shazuje weby.
Jinak ten google robots.txt je dost perverzní, to jsem ještě neviděl :D https://www.google.com/robots.txt (https://www.google.com/robots.txt)