Programovanie

Storm or Spark: Vyberte si svoju zbraň v reálnom čase

Myšlienka business inteligencie v reálnom čase existuje už nejaký čas (pozri stránku Wikipedia o tejto téme, ktorá sa začala v roku 2006). Ale zatiaľ čo ľudia o tejto myšlienke hovoria už roky, nevidel som, že by mnohé podniky prijali túto víziu, tým menej si uvedomovali výhody, ktoré umožňuje.

Prinajmenšom jedným z dôvodov bol nedostatok nástrojov na implementáciu BI a analytiky v reálnom čase. Tradičné prostredia na skladovanie dát boli silne orientované na dávkové operácie s extrémne vysokou latenciou, boli neuveriteľne drahé alebo oboje.

Bolo zmenených niekoľko výkonných a ľahko použiteľných platforiem otvoreného zdroja. Dva z najpozoruhodnejších sú Apache Storm a Apache Spark, ktoré ponúkajú možnosti spracovania v reálnom čase oveľa širšiemu okruhu potenciálnych používateľov. Oba sú projektmi v rámci Apache Software Foundation, a hoci tieto dva nástroje poskytujú prekrývajúce sa schopnosti, každý z nich má charakteristické vlastnosti a úlohy, ktoré majú hrať.

Storm: Hadoop spracovania v reálnom čase

Storm, distribuovaný výpočtový rámec pre spracovanie toku udalostí, začal svoj život ako projekt spoločnosti BackType, spoločnosti zaoberajúcej sa marketingovým spravodajstvom, ktorú kúpila spoločnosť Twitter v roku 2011. Twitter tento projekt čoskoro otvoril a umiestnil ho na GitHub, ale Storm sa nakoniec presunul do inkubátora Apache. a v septembri 2014 sa stal projektom najvyššej úrovne Apache.

Storm sa niekedy označoval ako Hadoop spracovania v reálnom čase. Zdá sa, že dokumentácia Stormu súhlasí: „Storm uľahčuje spoľahlivé spracovanie nespútaných tokov dát, robí pre spracovanie v reálnom čase to, čo Hadoop pre dávkové spracovanie.“

Na dosiahnutie tohto cieľa je Storm navrhnutý pre rozsiahlu škálovateľnosť, podporuje odolnosť voči chybám s prístupom k procesom „rýchle zlyhanie, automatické reštartovanie“ a ponúka silnú záruku, že bude spracovaná každá n-tica. Storm predvolene poskytuje „aspoň raz“ záruku na správy, ponúka však tiež možnosť implementovať spracovanie „presne raz“.

Storm je napísaný primárne v Clojure a je navrhnutý tak, aby podporoval elektroinštalácie „chrliče“ (myslím vstupné toky) a „skrutky“ (moduly spracovania a výstupu) spolu ako smerovaný acyklický graf (DAG) nazývaný topológia. Topológie Storm bežia na klastroch a plánovač Storm distribuuje prácu do uzlov okolo klastra na základe konfigurácie topológie.

Topológie si môžete myslieť ako zhruba analogické s úlohou MapReduce v programe Hadoop, až na to, že vzhľadom na to, že sa Storm zameriava na spracovanie v reálnom čase, na streame, sú topológie predvolene spustené navždy alebo kým nebudú ručne ukončené. Akonáhle je topológia spustená, výtoky prinesú údaje do systému a odovzdajú ich skrutkám (ktoré môžu zase odovzdať údaje nasledujúcim skrutkám), kde sa vykonáva hlavná výpočtová práca. V priebehu spracovania môže jedna alebo viac skrutiek zapisovať údaje do databázy alebo súborového systému, posielať správy do iného externého systému alebo inak sprístupňovať výsledky výpočtu používateľom.

Jednou zo silných stránok ekosystému Storm je bohatá škála dostupných výtokov špecializovaných na príjem dát zo všetkých typov zdrojov. Aj keď možno budete musieť písať vlastné výtoky pre vysoko špecializované aplikácie, existuje veľká šanca, že môžete nájsť existujúci výtok pre neuveriteľne širokú škálu zdrojov - od rozhrania API pre streamovanie cez Twitter, cez Apache Kafka, cez JMS brokerov až po všetko medzi tým.

Existujú adaptéry, ktoré uľahčujú integráciu so súborovými systémami HDFS, čo znamená, že Storm môže v prípade potreby ľahko spolupracovať s Hadoop. Ďalšou silnou stránkou Stormu je jeho podpora viacjazyčného programovania. Zatiaľ čo samotný Storm je založený na Clojure a beží na JVM, chrliče a skrutky je možné písať takmer v akomkoľvek jazyku, vrátane jazykov iných ako JVM, ktoré využívajú protokol na komunikáciu medzi komponentmi pomocou JSON cez stdin / stdout.

Stručne povedané, Storm je veľmi škálovateľný, rýchly a na chyby odolný systém otvoreného zdroja pre distribuované výpočty so zvláštnym zameraním na spracovanie toku. Storm vyniká spracovaním udalostí a prírastkovým výpočtom, výpočtom postupných metrík v reálnom čase na základe tokov údajov. Zatiaľ čo Storm poskytuje aj primitívy, ktoré umožňujú generické distribuované RPC a možno ich teoreticky použiť na zostavenie takmer akejkoľvek úlohy distribuovaného výpočtu, jeho silnou stránkou je jednoznačne spracovanie toku udalostí.

Spark: Distribuované spracovanie pre všetkých

Spark, ďalší projekt vhodný pre distribuované výpočty v reálnom čase, začal ako projekt AMPLab na Kalifornskej univerzite v Berkeley, potom sa pripojil k inkubátoru Apache a nakoniec vo februári 2014 ukončil štúdium na najvyššej úrovni. Rovnako ako Storm, aj Spark podporuje stream -orientované spracovanie, ale jedná sa skôr o univerzálnu distribuovanú výpočtovú platformu.

Spark ako taký možno považovať za potenciálnu náhradu za funkcie MapReduce Hadoop, zatiaľ čo Spark má schopnosť bežať nad existujúcim klastrom Hadoop a pri plánovaní zdrojov sa spolieha na YARN. Okrem Hadoop YARN môže Spark vrstviť aj nad Mesos pre plánovanie alebo bežať ako samostatný klaster pomocou svojho vstavaného plánovača. Upozorňujeme, že ak sa Spark nepoužíva s programom Hadoop, je pri prevádzke v klastri stále potrebný nejaký typ sieťového / distribuovaného súborového systému (NFS, AFS atď.), Takže každý uzol bude mať prístup k základným údajom.

Spark je napísaný v Scale a rovnako ako Storm podporuje viacjazyčné programovanie, aj keď Spark poskytuje špecifickú podporu API iba pre Scala, Java a Python. Spark nemá špecifickú abstrakciu „výtoku“, ale obsahuje adaptéry na prácu s údajmi uloženými v mnohých rôznych zdrojoch, vrátane súborov HDFS, Cassandra, HBase a S3.

Where Spark shines je v jeho podpore viacerých paradigiem spracovania a podporných knižníc. Áno, Spark podporuje model streamovania, ale túto podporu poskytuje iba jeden z niekoľkých modulov Spark, vrátane účelových modulov pre prístup SQL, operácie grafov a strojové učenie, spolu so spracovaním toku.

Spark tiež poskytuje mimoriadne praktický interaktívny shell, ktorý umožňuje rýchle a špinavé vytváranie prototypov a prieskumné analýzy dát v reálnom čase pomocou API Scala alebo Python. Pri práci v interaktívnom prostredí si rýchlo všimnete ďalší zásadný rozdiel medzi Sparkom a Stormom: Spark má skôr „funkčnú“ príchuť, kde je práca s API riadená skôr reťazením po sebe nasledujúcich volaní metód na vyvolanie primitívnych operácií - na rozdiel od Storm model, ktorý má tendenciu byť poháňaný vytváraním tried a implementáciou rozhraní. Ani jeden z prístupov nie je lepší ani horší, ale preferovaný štýl môže mať vplyv na vaše rozhodnutie, ktorý systém bude lepšie vyhovovať vašim potrebám.

Rovnako ako Storm, aj Spark je navrhnutý pre rozsiahlu škálovateľnosť a tím Spark zdokumentoval používateľov systému, ktorý prevádzkuje produkčné klastre s tisíckami uzlov. Okrem toho Spark zvíťazil v nedávnej súťaži Daytona GraySort z roku 2014 a získal najlepší čas na prenosné pracovné zaťaženie pozostávajúce z triedenia 100 TB dát. Tím Spark tiež dokumentuje operácie Spark ETL s výrobnými pracovnými záťažami vo viacerých radoch petabajtov.

Spark je rýchla, škálovateľná a flexibilná distribuovaná výpočtová platforma s otvoreným zdrojom, kompatibilná s programami Hadoop a Mesos, ktorá podporuje niekoľko výpočtových modelov vrátane streamovania, operácií zameraných na grafy, prístupu SQL a distribuovaného strojového učenia. Spark bol zdokumentovaný vo výnimočnom rozsahu a rovnako ako Storm je vynikajúcou platformou, na ktorej je možné vybudovať analytický systém a systém business intelligence v reálnom čase.

Vaše rozhodnutie

Ako si vyberáte medzi Storm a Spark?

Ak sú vaše požiadavky primárne zamerané na spracovanie toku a spracovanie v štýle CEP a začínate projekt na zelenej lúke s účelovým klastrom pre tento projekt, pravdepodobne by som uprednostnil Storm - najmä ak sú k dispozícii existujúce výtoky Storm, ktoré zodpovedajú vašim požiadavkám na integráciu . To v žiadnom prípade nie je tvrdým a rýchlym pravidlom, ale takéto faktory by naznačovali aspoň začiatok Stormu.

Na druhej strane, ak využívate existujúci klaster Hadoop alebo Mesos a / alebo ak vaše potreby spracovania zahŕňajú podstatné požiadavky na spracovanie grafov, prístup SQL alebo dávkové spracovanie, možno by ste sa mali najskôr pozrieť na Spark.

Ďalším faktorom, ktorý je potrebné zvážiť, je viacjazyčná podpora týchto dvoch systémov. Napríklad, ak potrebujete využiť kód napísaný v jazyku R alebo inom jazyku, ktorý Spark natívne nepodporuje, Storm má výhodu širšej jazykovej podpory. Z rovnakého dôvodu, ak musíte mať interaktívny shell na prieskum údajov pomocou volaní API, potom vám Spark ponúkne funkciu, ktorú Storm nemá.

Nakoniec budete pravdepodobne chcieť urobiť podrobnú analýzu oboch platforiem pred konečným rozhodnutím. Odporúčam použiť obe platformy na vytvorenie malého dôkazu o koncepcii - potom spustite svoje vlastné referenčné hodnoty s pracovným zaťažením, ktoré čo najpresnejšie zrkadlí vaše očakávané pracovné zaťaženia, skôr ako sa plne zaviažete.

Samozrejme, nemusíte robiť nijaké rozhodnutie. V závislosti na vašom pracovnom zaťažení, infraštruktúre a požiadavkách môžete zistiť, že ideálnym riešením je kombinácia Storm a Spark - spolu s ďalšími nástrojmi ako Kafka, Hadoop, Flume atď. V tom tkvie krása otvoreného zdroja.

Nech si zvolíte ktorúkoľvek trasu, tieto nástroje ukazujú, že BI hra v reálnom čase sa zmenila. Výkonné možnosti, ktoré boli kedysi dostupné len pre elitu, sú teraz v dosahu väčšiny, ak nie všetkých, stredne veľkých až veľkých organizácií. Využite ich.

$config[zx-auto] not found$config[zx-overlay] not found