Sběr binárních dat na slabém HW

Re:Sběr binárních dat na slabém HW
« Odpověď #15 kdy: 15. 05. 2014, 14:19:26 »
Vidim v mem pripade zasadni problem. Musel bych mit velky soubor a ten chtit posilat. Ja ale soubor nemam. Mam souvisly stream dat (cca 1MB/min), ktery mi generuje jiny program a zapisuje ho na disk do souboru. Ja maximalne muze nastavit vytvareni novych soubou kazdych par minut, abych se vesel do RAM.
No tak to je právě přesně situace, kdy bys měl využít to zmq - data si nabufferuješ v paměti do nějaké libovolné velikosti, jaká se ti bude hodit a pak odešleš přes zmq. Zmq je taková v podstatě jenom obálka kolem klasických socketů, přidávající (kromě výšúrovňových věcí jako publish-subscribe) příjemné vlastnosti jako bufferování, reconnect apod. Takže být tebou bych se vykašlal na nějaký soubory a s chutí bych si napsal krátkou vlastní aplikaci komunikující pomocí zmq. V jazyce dle libosti - Python, C, nebo snad dokonce Erlang? ;)


Tomáš Bartoň

Re:Sběr binárních dat na slabém HW
« Odpověď #16 kdy: 15. 05. 2014, 15:17:05 »
... Chudak server, kdyz mu kazdou minutu dorazi stovky souboru (cca 4 soubory na jednu krabicku). Souborovy system bude mit z tisicu souboru velkou radost. ...

Z jakého důvodu by měl být server chudák nebo by z toho neměl mít souborový systém radost? Máš vůbec představu o výkonu dnešních počítačů? ;)

Já bych to řešil tak, že bych data bufferoval třeba po 1 MB a každý takový soubor nahrál přes ssh na server do složky, kam bych měl právo pouze zapisovat. Takto i kdyby se ti někdo naboural do krabičky a získal přístup na server, tak získá max. obsah aktuálního bufferu. Pokud by ti nakonec vadily ty spousty souborů, tak je můžeš ukládat do stromové struktury adresářů nebo případně úlohou z cronu periodicky spojovat do jednoho.

Ttxman

Re:Sběr binárních dat na slabém HW
« Odpověď #17 kdy: 15. 05. 2014, 15:56:32 »
Zni to zajimave, dokonce jsem nasel nejaky port ZeroMQ na OpenWrt.

Vidim v mem pripade zasadni problem. Musel bych mit velky soubor a ten chtit posilat. Ja ale soubor nemam. Mam souvisly stream dat (cca 1MB/min), ktery mi generuje jiny program a zapisuje ho na disk do souboru. Ja maximalne muze nastavit vytvareni novych soubou kazdych par minut, abych se vesel do RAM.

Takze asi nakonec budu mit 1 soubor na jednu minutu, ktery se bude ukladat do RAM disku. Po skonceni souboru, se zacne novy a stary se posle pres FTP/ HTTP POST/ ... na server. Pokud se to nepovede, odlozi se na SD kartu a zkusi se to pozdeji.
Chudak server, kdyz mu kazdou minutu dorazi stovky souboru (cca 4 soubory na jednu krabicku). Souborovy system bude mit z tisicu souboru velkou radost. Ale ukladat binarni data do MySQL se mi porad zda jako nesmysl, radeji ulozim do db nazev souboru a nejaka metadata.

Delam denodenne se slozkami se stovkami tisic az miliony souboru. Jedinej problem s tim ma GUI systemu, kdyz se s tim pracuje prez programy a ne rucne neni to problem.

Kdybych volil databazi, tak tahle uloha vhledem k absenci relaci je idealni pro nosql. Na MongoDB mame odzkouseny liti stovek dokumentu ("radku") o velikosti kolem 1MB do kolekce ("tabulky") za sekundu. Asi by slo i vic, ale pak prestal stihat RAID (Zkouselo se vytizeni jaky to zvladne - na RAID0 z 6 disku to davalo kolem 400MB/s). Muzes jednim nebo vic programy tlacit do DB a jinym to pak online zpracovavat, jde tam cist z kolekce primo kdyz pribyvaj novy polozky.

Re:Sběr binárních dat na slabém HW
« Odpověď #18 kdy: 15. 05. 2014, 15:57:16 »
Já bych to řešil tak, že bych data bufferoval třeba po 1 MB a každý takový soubor nahrál přes ssh na server do složky, kam bych měl právo pouze zapisovat.
Ještě jeden dobrej fígl, ktrej by se mohl hodit, je nastavit tomu uživateli speciální shell - program, kterej přečte data ze stdin a někam je uloží. Když pak někdo získá přístup ke krabiččce, nemůže nic víc než ukládat soubory. Nemůže se ani přihlásit na server.

Randolf

Re:Sběr binárních dat na slabém HW
« Odpověď #19 kdy: 15. 05. 2014, 16:38:55 »
No ja bych mozna zvolil nejake standardni (=stare) reseni.
Treba scp? :)
SSH muzes nastavit i aby pouzival vypocetne nenarocne sifrovani (RC4, blowfish), pokud Ti nejde o nejake super zabezpeceni.


Re:Sběr binárních dat na slabém HW
« Odpověď #20 kdy: 15. 05. 2014, 17:43:11 »
Z jakého důvodu by měl být server chudák nebo by z toho neměl mít souborový systém radost? Máš vůbec představu o výkonu dnešních počítačů? ;)

Pokud by ti nakonec vadily ty spousty souborů, tak je můžeš ukládat do stromové struktury adresářů nebo případně úlohou z cronu periodicky spojovat do jednoho.
1 soubor kazdou minutu * 4 zarizeni * 60 minut * 24 hodin = 5 760 souboru za den
za mesic * 30 = 172 800 souboru
pro sto zarizeni uz to bude 17 280 000 souboru za mesic o velikost v radech kB na kus. Co jsem kdy pracoval s malymi soubory, vzdy to bylo pomale.

Spojovat se bohuzel bez relativne velkeho vykonu nedaji, nejde jenom o "useknuti", kazdy soubor ma svuj "zacatek a ukonceni". Nebo jak to rict :-)

Ještě jeden dobrej fígl, ktrej by se mohl hodit, je nastavit tomu uživateli speciální shell - program, kterej přečte data ze stdin a někam je uloží. Když pak někdo získá přístup ke krabiččce, nemůže nic víc než ukládat soubory. Nemůže se ani přihlásit na server.
To zni zajimave.

No ja bych mozna zvolil nejake standardni (=stare) reseni.
Treba scp? :)
SSH muzes nastavit i aby pouzival vypocetne nenarocne sifrovani (RC4, blowfish), pokud Ti nejde o nejake super zabezpeceni.
100% by stacilo.


Ja vlastne potrebuju jen prenos souboru a nejaky monitoring. Jak to lepe resit, nez pomoci VPN? Kopirovani na server neni problem to je klient->server spojeni, porad se mi nejvic libi HTTP POST, budu tak mit rovnou v databazi prehled o souborech (nemusim monitorovat ftp adresar, udela si to aplikaci pri nahravani souboru).
Na monitoring bych asi musel mit SSH tunel. Neni uz lepsi VPN?
A kdyz se neco podela, bez vpn se nedostanu do krabicek na ssh. Verjenou ip mit krabicky nebudou. Takze mit dlasi tunel na ssh?

Ja na VPN netrvam, byl to jen napad.
"Kdo v zájmu bezpečí obětuje část své svobody, v konečném důsledku přijde o svobodu i svou bezpečnost."

Marvik

Re:Sběr binárních dat na slabém HW
« Odpověď #21 kdy: 15. 05. 2014, 17:44:56 »
Pokud lze aplikaci nastavit tak aby zapisovala pouze do jednoho souboru s urcenym nazvem ... pak bych vyzkoušel vytvorit pojmenovanou rouru a pustit data  do ni a jinou aplikaci si je kouskovat na bloky jake jsou pro odesilani optimalni ...

Co se tyka zivotnosti usb flash disku ... tusim ze bunka ma cca 100K prepisu ... pri zmene celeho obsahu  8GB 2x denne  (zapis/smazani) je zivotnost vic nez dostacujici ( 120 let ) ... ale tady musi byt pouzit specialni FS (jffs2 a podobne ) nebo k flash disku pristoupit jako memory maping file a ridit si to sam

pro odesilani bych osobne zvolil HTTP protokol s metodou PUT ... je jednoduchy a mam ho otestovany pro podobne ucely  ...

V pripade nutnosti zabezpečeni  pak HTTPS ... se jmenem a heslem pres basic autentizaci az po autentizaci klientskym sertifikatem .... otazka jaky stupen autentizace je dostačující.

Monitoring koncovych zarizeni lze pak provadet na základě posledniho doruceneho datoveho bloku na http server ...

Na serveru pak data ukladat minimalne do stromove struktury   napr rok / den / zarizeni (souboru bude ale velke mnozstvi tak pocitat s dlouhou dobou v pripade fsck ) nebo zvolit jine metody ... to zalezi na dalsim pouziti dat ...

Pro ukladani ti postaci jednododuchy skript v php nebo v necem podobnem co podporuje http server  ....

Radek

Re:Sběr binárních dat na slabém HW
« Odpověď #22 kdy: 15. 05. 2014, 18:09:19 »
Ahoj,
neco podobneho jsem resil, akorat tech krabycek nebylo 1000 ale asi 30 a vykonu maji dost(standartni PC). A ted moje zkusenosti :

Open vpn pro spravu urcite, ale po dobu olympiady byl v cine blokovanej veskerej UDP provoz.

Rozhodne nepouzivat FTP - V CR kde se aplikace ladila a nasazovala prvne do produkce vse OK, ale v cine to pak naprosto zhavarovalo. Routry se snazi byt chytrejsi nez uzivatel a ani pasivni mod FTP nefungoval.

Takze momentalne veskery upload pres HTTPS - odesilana data vypadaji jako klasicky POST request, rozumi tomu i ruzne obskurni transparentni proxy. Rozhodne je potreba podporovat http proxy. Pokud bych vytvarel nejakou podobnou aplikaci, asi bych volil obycejne HTTP a data opatril nejakym HMAC pro overeni puvodu, ponevadz nekteri paranoidni administratori zakazuji i HTTPS. Pokud je potreba data sifrovat neni problem je predtim prohnat nejakou standartni sifrovaci funkci(AES, 3DES, ...).

Radek

Re:Sběr binárních dat na slabém HW
« Odpověď #23 kdy: 15. 05. 2014, 18:20:51 »
Ja vlastne potrebuju jen prenos souboru a nejaky monitoring. Jak to lepe resit, nez pomoci VPN? Kopirovani na server neni problem to je klient->server spojeni, porad se mi nejvic libi HTTP POST, budu tak mit rovnou v databazi prehled o souborech (nemusim monitorovat ftp adresar, udela si to aplikaci pri nahravani souboru).
Na monitoring bych asi musel mit SSH tunel. Neni uz lepsi VPN?
A kdyz se neco podela, bez vpn se nedostanu do krabicek na ssh. Verjenou ip mit krabicky nebudou. Takze mit dlasi tunel na ssh?
Monitoring je hodně široký pojem, to bys asi musel nějak líp specifikovat. Ale zase: fakt bych v tom nehledal složitosti, čím jednodušší cestou v tomhle prostředí půjdeš, tím líp. Např. možná bude stačit si uvědomit, že když krabička posílá data, tak žije. Co víc bys chtěl monitorovat? ;)

Jinak potom jsou samozřejmě standardní věci jako SNMP, ale to už máš spojení opačným směrem, což v popsaným prostředí implikuje nějakou tu VPNku... Stejně tak ssh. Pokud teda na vzdáleným přístupu na krabičky trváš a nechceš vytvářet nějaké vyloženě custom řešení, tak VPN je jasná.
Tím custom řešením myslím nějakou inteligentní komunikaci s krabičkou. V Energomonitoru máme třeba vzdálený update firmware - krabička se jednou za čas zeptá, jestli není potřeba update, a když jo, tak si ho stáhne. Že je k dispozici update jí říká server, takže de facto tímhle způsobem krabičku plně ovládáš, i když na ni nevidíš. Nějakou podobnou cestou bys v případě nouze mohl jít taky - krabička by se jednou za čas zeptala, jestli na ní nechceš přistoupit a v případě že jo, někam by ti vytvořila ssh tunel (zpětnej - takže bys na ni ty vidět nepotřeboval, spojení by šlo na server).
Ale to už je fakt všechno spíš na tvoje zvážení, který řešení je ti sympatičtější, víc odpovídá tvé představě a bude se ti líp spravovat.

Re:Sběr binárních dat na slabém HW
« Odpověď #24 kdy: 15. 05. 2014, 18:25:05 »
Co se tyka zivotnosti usb flash disku ... tusim ze bunka ma cca 100K prepisu ... pri zmene celeho obsahu  8GB 2x denne  (zapis/smazani) je zivotnost vic nez dostacujici ( 120 let ) ... ale tady musi byt pouzit specialni FS (jffs2 a podobne ) nebo k flash disku pristoupit jako memory maping file a ridit si to sam
Obávám se, že tohle je čistá teorie... Moc o tom nevím, ale pokud se nepletu, dává se dneska nějaký ten  wear levelling už i do těch nejlevnějších flashek a pak je otázka, jak moc situaci jffs pomůže. Nevím, ale spolíhat na to bych si fakt netroufl, pokud by to nebylo nějaký průmyslový zařízení s garantovanými parametry...

Re:Sběr binárních dat na slabém HW
« Odpověď #25 kdy: 15. 05. 2014, 18:40:58 »
Monitoring je hodně široký pojem, to bys asi musel nějak líp specifikovat. Ale zase: fakt bych v tom nehledal složitosti, čím jednodušší cestou v tomhle prostředí půjdeš, tím líp. Např. možná bude stačit si uvědomit, že když krabička posílá data, tak žije. Co víc bys chtěl monitorovat? ;)

Nějakou podobnou cestou bys v případě nouze mohl jít taky - krabička by se jednou za čas zeptala, jestli na ní nechceš přistoupit a v případě že jo, někam by ti vytvořila ssh tunel (zpětnej - takže bys na ni ty vidět nepotřeboval, spojení by šlo na server).

To zni rozumne, zarizeni bude ukladat vzdy treba 5 minut data do RAMdisku a pak je posle na server pres HTTPS (jmeno a heslo, certifikaty jsou zbytecne).
Pokud nebude server odpovidat (treba vypadne internet), ulozi se soubor z ramdisku na sd kartua posle se pozdeji. Takze v idealnim stavu se na sd kartu nebude nikdy zapisovat.
Tim se zbavim problemu, jak se na serveru dostane do databaze info o novych souborech, poresi to webova aplikaci pri nahrani.

Zaroven s nahranim se krabicka zepta, jestli ma zapnout vzdaleny pristup. Pokud server odpovi ano, krabicka nahodi ssh tunel. Takze do max. 5 minut budu mit ssh.
Monitoring asi poradne omezim - krabicka posila data, je ok. Krabicka si asi bude delat svou vnitrni statistiku a pokud dojde k problemu, posle data opet pres HTTPS na server (treba nejaky json s daty).
"Kdo v zájmu bezpečí obětuje část své svobody, v konečném důsledku přijde o svobodu i svou bezpečnost."

Re:Sběr binárních dat na slabém HW
« Odpověď #26 kdy: 15. 05. 2014, 19:02:55 »
Tim se zbavim problemu, jak se na serveru dostane do databaze info o novych souborech, poresi to webova aplikaci pri nahrani.
Ano. Oproti nejakymu nahravani pres ftp do adresare, kterej bys musel monitorovat, je to urcite pohodlnejsi.

Zaroven s nahranim se krabicka zepta, jestli ma zapnout vzdaleny pristup. Pokud server odpovi ano, krabicka nahodi ssh tunel. Takze do max. 5 minut budu mit ssh.
Jenom mysli na to, ze mas o neco malo vetsi pravdepodobnost, ze se na zarizeni nedostanes - chyba v tom sw na krabce apod. Ale pokud to jednou odladis a pak do toho nebudes vrtat, melo by to byt v klidu. A v pripade zavady jedne krabky ze sta ti ji proste nekdo posle postou k diagnostice, no, to se da logisticky zvladnout :)

M.

Re:Sběr binárních dat na slabém HW
« Odpověď #27 kdy: 15. 05. 2014, 21:51:59 »
Ještě bych zvážil, zda to nechat jen na protlačení toho mega fajlu a od toho odvozovat stav. Pokud budeš mít krabičky na nedefinovaných Internetových linkách pochybnývch kvalit, tak se ti může stát, že uživatel je spokojen, facebook mu jede, webmail taky, ale cokoliv nad 10 kB neodešleš, protože má zrovna tak zprasen uplink, že víc jak těch pár paketů potvrzující TCP linka nedá...
Pak je lepší posílat i něco nějakou signalizací. Ja to s těma binármáma balíky dělam tak, že když je hotov, prvně MQ posílá bonz s metadaty do DB, že záznam vznikl a příznak, že data ještě nejsou v centrálním úložišti, bokem se to tlačí přes FTP a až to dotlačí, tak jde druhý bonz, co to zaregistruje do DB (používám Oracle, takže ty binární soubory pak registurji jak BFILE a jde s nima hejbat jak souborově, tak přes SQL jako BLOBy) a nastaví data přítomna. Tím pádme vím, že to jede, data vznikají a jen problém v dopravě. Takže signalizaci a ovládání dělat zvlášť a ne v jednom balíku, co pošle i ten záznam z domací webkamery z ložnice. :-)

Re:Sběr binárních dat na slabém HW
« Odpověď #28 kdy: 23. 05. 2014, 14:36:43 »
Trochu jsem si ujasnil, co vsechno potrebuji a mam nekolik dalsich dotazu:

1) Pro nahravani dat na server pouzit HTTPS POST, nebo PUT?

2) Puvodne jsem chtel WiFi router s USB TL-WR842ND za 890 Kc (8MB flash a 32MB RAM).
Jenze do 8MB flash skoro nic nedam a potreboval bych vice RAM na ukladani souboru. S 32MB bych mohl ukladat vzdy cca 1 minutu a pak bych musel odesilat na server.

Doma u televize mam Androidi prehravac Minix Neo X5 mini s Androidem a chodi vyborne.
Na eBay jsem nasel nejlevnejsi za 925 Kc. Ma dual-core 1,5GHz ARMv7 procesor, 1GB DDR3 RAM a 4GB flash.
V linuxu asi nepujde 3D akcelerace grafiky, ale to me vubec nevadi.

Linux mi spotrebuje cca do 50MB RAM (na OpenWrt se bezne vejdu do 10MB) a do zbytku muzu ukladat data. Ve srovnani s 32MB u wifi routeru je to rozdil. Do integrovanych 4GB flash si dam system a jeste mi kolik GB zustane volnych.

Porad jsem resil, jak uzivateli zpristupnit nastaveni. Puvodne jsem chtel mit na SD karte maly (radove jednotky MB) oddil s FAT32 a txt soubor s natavenim, jako to ma malina. Tady je HDMI, takze tam muze bezet nastavovaci TUI/GUI aplikace.

Je rozumna volba, koupit TV prehravac misto wifi routeru? Podle me ano.

Pokud bych nechtel pouzivat HDMI (na 100% tam bude SSH), tak by bylo dobre zakazat USB klavesnice a mysi. Stejne by je nikdo nemel pouzivat. Zkousel jsem na PC v Lubuntu do /etc/modprobe.d/ pridat blacklist na hid, usbhid a hid_generic moduly, ale po restartu klavesnice a mys porad funguje. Nasel jsem jenom par navodu pres xinput, ale to bude asi jen pro X a musi se hledat konkterni zarizeni klavesnice.
Jak v linuxu zakazat USB klavesnice a mysi?

"Kdo v zájmu bezpečí obětuje část své svobody, v konečném důsledku přijde o svobodu i svou bezpečnost."

Re:Sběr binárních dat na slabém HW
« Odpověď #29 kdy: 23. 05. 2014, 14:49:49 »
1) Pro nahravani dat na server pouzit HTTPS POST, nebo PUT?
AFAIK, spravne by PUT melo ukladat nejaka data na danou uri. Tj. je to opak GET - nevim, jak moc dusledne se tohle ma dodrzovat - jestli pomoci GET ma clovek dostat presne to, co tam PUTem ulozil.

POST oproti tomu posila data nejakemu skriptu.

Takže pokud PUTem pošleš data A na uri U a pak na totéž uri PUTem data B, měl by být výsledný efekt stejný, jako bys tam A vůbec neposlal. Oproti tomu pokud pošleš data A POSTem na uri U a pak POSTem data B na totéž uri U, provede se nějaká činnost (daná tím U) prvně nad daty A a potom nad tady B - činnost může mít vedlejší efekty, takže tam neplatí totéž co u PUTu.

Jinak ale v praxi ti to muze byt celkem jedno - kdyz to pouzijes blbe, tak to jenom nebude podle specifikace semantiky http, ale to ti muze byt celkem fuk, pokud je to pro interni ucely...

Jak v linuxu zakazat USB klavesnice a mysi?
Asi by ses mel podivat do dmesg, jak se klavesnice hlasi. Pokud se nepletu, nektere biosy usb klavesnici nejak preonaci, aby vypadala jako "legacy". Ale nejsem si tim ted vubec jisty, snad to nekdo vi lip...