versiune semnificativă a sistemului de procesare distribuită a evenimentelor , remarcabil prin trecerea la o nouă arhitectură, realizată în limbajul Java, în locul limbajului Clojure utilizat anterior.
Proiectul permite organizarea procesării garantate a diferitelor evenimente în timp real. De exemplu, Storm poate fi aplicat pentru analiza fluxurilor de date în timp real, executarea sarcinilor de învățare automată, organizația calculului continuu, implementarea RPC, ETL etc. Sistemul suportă clusterizare, crearea de configurații rezistente la defecțiuni, modul de procesare garantată a datelor și are o viteză mare de procesare, suficientă pentru a gestiona mai mult de un milion de cereri pe secundă pe un nod al clusterului.
Este suportată integrarea cu diferite sisteme de procesare a cozii și tehnologii de baze de date. Arhitectura Storm preconizează recepționarea și procesarea fluxurilor de date nestructurate, actualizate constant, cu utilizarea unor procesatori complexi arbitrare, cu posibilitatea de secționare între diferitele etape ale calculului. Proiectul a fost predat comunității Apache după achiziția de către Twitter a companiei BackType, care a dezvoltat inițial cadrul. În practică, Storm a fost utilizat la BackType pentru analiza reflecției evenimentelor în microbloguri, prin compararea în timp real a noilor tweet-uri și link-urilor utilizate în acestea (de exemplu, s-a evaluat modul în care link-urile externe sau anunțurile publicate în Twitter sunt retransmise de alți participanți).
Funcționalitatea Storm este comparabilă cu platforma Hadoop, principala diferență fiind că datele nu sunt stocate în depozit, ci vin din exterior și sunt procesate în timp real. În Storm nu există un strat încorporat pentru organizarea unui depozit, iar interogarea analitică începe să fie aplicată datelor primite până când este anulată (în vreme ce în Hadoop se utilizează lucrări MapReduce care ocupă timp final, în Storm se folosește ideea „topologiilor” care se execută continuu). Execuția procesatorilor poate fi distribuită pe mai multe servere - Storm își paralelizează automat lucrul cu fluxurile pe diferite noduri ale clusterului.
Inițial, sistemul a fost scris în Clojure și rulează în interiorul unei mașini virtuale JVM. La fundația Apache a fost lansată o inițiativă pentru migrarea Storm pe un nou nucleu, scris în Java, ale cărui rezultate au fost propuse în versiunea Apache Storm 2.0. Toate componentele de bază ale platformei au fost rescrise în Java. Suportul pentru scrierea manivelor în Clojure a fost păstrat, dar acum este oferit sub formă de bindinguri. Pentru a rula Storm 2.0.0 este necesar să aveți Java 8. Modelul de procesare multi-thread a fost complet revizuit, ceea ce a permis obținerea unor îmbunătățiri semnificative ale performanței (pentru anumite topologii, întârzierile au fost reduse cu 50-80%).
În noua versiune a fost introdus un nou API de tipizat Streams, care permite definirea handlerilor folosind operații în stilul programării funcționale. Noul API este implementat deasupra API-ului de bază standard și suportă combinarea automată a operațiunilor pentru a optimiza procesarea acestora. În API-ul Windowing pentru operații de fereastră a fost adăugat suport pentru salvarea și recuperarea stării în backend.
În planificatorul de rulare a handlerilor a fost adăugat suport pentru a lua în considerare resurse suplimentare în timpul deciziilor, fără a se limita la
CPU și memorie, cum ar fi parametrii rețelei și GPU. S-au făcut numeroase îmbunătățiri legate de integrarea cu platforma . Sistemul de control al accesului a fost extins, permițând crearea de grupuri de administratori și delegarea tokenurilor. Au fost adăugate îmbunătățiri legate de suportul SQL și metrici. În interfața de administrator au fost introduse noi comenzi pentru depanarea stării clusterului.
Domeniile de aplicare ale Storm:
- Procesarea fluxurilor de date noi sau actualizări ale Bazei de Date în timp real;
- Calculuri continue: Storm poate efectua interogări continue și procesa fluxuri continue, transmitând rezultatele procesării clientului în timp real.
- Apelul la proceduri distribuite la distanță (RPC): Storm poate fi utilizat pentru a asigura paralelismul în execuția cererilor consumatoare de resurse. Sarcina („topologia”) în Storm reprezintă o funcție distribuită pe noduri, care așteaptă primirea mesajelor ce trebuie procesate. După primirea mesajului, funcția îl procesează în context local și returnează rezultatul. Un exemplu de utilizare a RPC-ului distribuit poate fi procesarea paralelă a interogărilor de căutare sau efectuarea operațiunilor pe un set mare de mulțimi.
Caracteristici ale Storm:
- Un model simplu de programare, care simplifică semnificativ procesarea datelor în timp real;
- Suport pentru toate limbile de programare. Există module pentru limbile Java, Ruby și Python, adaptarea pentru alte limbaje nu este complicată datorită unui protocol de comunicare foarte simplu, pentru implementarea căruia este nevoie de aproximativ 100 de linii de cod;
- Toleranță la erori: pentru a rula o sarcină de procesare a datelor, este necesar să se formeze un fișier jar cu codul. Storm va distribui autonom acest fișier jar pe nodurile clusterei, va conecta handler-ii asociați și va organiza monitorizarea. La finalizarea sarcinii, codul va fi deconectat automat pe toate nodurile;
- Scalabilitate orizontală. Toate calculele sunt efectuate în mod paralel, iar în cazul creșterii încărcării, este suficient să conectați noi noduri la cluster;
- Fiabilitate. Storm garantează că fiecare mesaj primit va fi procesat complet cel puțin o dată. Un mesaj va fi procesat o singură dată doar în cazul absenței erorilor în trecerea prin toate handler-ele, iar în caz de probleme, încercările nereușite de procesare vor fi repetate.
- Viteză. Codul Storm este scris cu un accent pe performanță ridicată și utilizează pentru schimbul rapid de mesaje un sistem .
Sursa: opennet.ro
