Programiranje

Nevihta ali iskra: izberite svoje orožje v realnem času

Ideja o poslovnem obveščanju v realnem času obstaja že nekaj časa (glejte stran Wikipedije o temi, ki se je začela leta 2006). Toda medtem ko ljudje že vrsto let govorijo o tej ideji, nisem videl, da bi veliko podjetij dejansko sprejelo vizijo in še manj spoznalo koristi, ki jih ta omogoča.

Vsaj del razloga je bilo pomanjkanje orodja za izvajanje BI in analitike v realnem času. Tradicionalna okolja za shranjevanje podatkov so bila močno usmerjena v serijske operacije z izredno visokimi zakasnitvami, so bila neverjetno draga ali oboje.

Za spremembo tega so se pojavile številne zmogljive odprtokodne platforme, enostavne za uporabo. Dve najpomembnejši sta Apache Storm in Apache Spark, ki ponujata možnosti obdelave v realnem času veliko širšemu krogu potencialnih uporabnikov. Oba projekta sta v okviru fundacije Apache Software Foundation in čeprav imata orodji prekrivajoče se zmožnosti, imata vsaka svoje značilnosti in vloge.

Storm: Hadoop obdelave v realnem času

Storm, porazdeljeni računski okvir za obdelavo tokov dogodkov, je začel delovati kot projekt BackType, tržno obveščevalne družbe, ki jo je Twitter kupil leta 2011. Twitter je kmalu odprl projekt in ga postavil na GitHub, vendar se je Storm na koncu preselil v Apache Incubator in septembra 2014 postal projekt na najvišji ravni Apache.

Storm včasih imenujejo Hadoop obdelave v realnem času. Zdi se, da se dokumentacija Storm strinja: "Storm olajša zanesljivo obdelavo neomejenih tokov podatkov in tako v realnem času obdela tisto, kar je Hadoop naredil za serijsko obdelavo."

Za dosego tega cilja je Storm zasnovan za obsežno razširljivost, podpira odpornost na napake s pristopom »hitro odpovedi, samodejni ponovni zagon« in nudi močno zagotovilo, da bodo obdelani vsi nabori. Storm privzeto jamči za „vsaj enkrat“ za sporočila, vendar ponuja tudi možnost izvedbe obdelave „natančno enkrat“.

Storm je napisan predvsem v Clojureju in je zasnovan tako, da podpira "izlive" ožičenja (mislite na vhodne tokove) in "vijake" (moduli za obdelavo in izhod) skupaj kot usmerjeni aciklični graf (DAG), imenovan topologija. Topologije Storm se izvajajo v grozdih in načrtovalec Storm razdeli delo vozliščem okoli gruče na podlagi konfiguracije topologije.

Topologije si lahko predstavljate približno analogne opravilu MapReduce v Hadoopu, razen tiste, ki se Storm osredotoča na obdelavo, ki temelji na toku, v realnem času, topologije pa privzeto delujejo večno ali do ročnega prekinitve. Ko se topologija začne, izlivi vnesejo podatke v sistem in jih predajo sornikom (ki lahko podatke nato predajo naslednjim sornikom), kjer je opravljeno glavno računsko delo. Z napredovanjem obdelave lahko en ali več vijakov podatke zapiše v bazo podatkov ali datotečni sistem, pošlje sporočilo drugemu zunanjemu sistemu ali kako drugače omogoči uporabnikom rezultate izračuna.

Ena od prednosti ekosistema Storm je bogata paleta razpoložljivih izlivov, specializiranih za sprejemanje podatkov iz vseh vrst virov. Čeprav boste morda morali pisati izlive po meri za visoko specializirane aplikacije, obstaja velika verjetnost, da boste našli obstoječ izliv za neverjetno veliko različnih virov - od API-ja za pretakanje Twitterja do Apache Kafke do posrednikov JMS do vsega vmes.

Obstajajo adapterji, ki omogočajo enostavno integracijo z datotečnimi sistemi HDFS, kar pomeni, da Storm po potrebi zlahka komunicira s Hadoopom. Druga moč Storma je podpora večjezičnemu programiranju. Medtem ko Storm sam temelji na Clojureju in deluje na JVM, lahko izlive in vijake pišemo v skoraj katerem koli jeziku, vključno z jeziki, ki niso JVM, ki izkoriščajo protokol za komunikacijo med komponentami z uporabo JSON prek stdin / stdout.

Skratka, Storm je zelo razširljiv, hiter, odporen odprtokodni sistem za porazdeljeno računanje s posebnim poudarkom na obdelavi tokov. Storm se odlikuje po obdelavi dogodkov in prirastnih izračunih, pri čemer v realnem času izračunava tekoče meritve prek tokov podatkov. Storm sicer ponuja tudi primitive, ki omogočajo generični porazdeljeni RPC in jih je teoretično mogoče uporabiti za sestavljanje skoraj vseh distribuiranih računskih opravil, njegova moč pa je očitno obdelava tokov dogodkov.

Spark: porazdeljena obdelava za vse

Spark, še en projekt, primeren za porazdeljeno računanje v realnem času, se je začel kot projekt AMPLab na Kalifornijski univerzi v Berkeleyju, preden se je pridružil Apache Incubatorju in na koncu diplomiral kot najvišji projekt februarja 2014. Tako kot Storm, Spark podpira tok usmerjena obdelava, vendar gre bolj za splošno namensko porazdeljeno računalniško platformo.

Kot tak lahko Spark vidimo kot potencialno nadomestilo za funkcije MapReduce v Hadoopu, medtem ko ima Spark možnost, da se zažene na vrhu obstoječe skupine Hadoop in se za razporejanje virov opira na YARN. Poleg Hadoop YARN lahko Spark nanese na Mesos za razporejanje ali deluje kot samostojna grozd z uporabo vgrajenega razporejevalnika. Če se Spark ne uporablja s Hadoop, je neka vrsta omrežja / porazdeljenega datotečnega sistema (NFS, AFS itd.) Še vedno potrebna, če se izvaja v gruči, zato bo vsako vozlišče imelo dostop do osnovnih podatkov.

Spark je napisan v Scali in podobno kot Storm podpira večjezično programiranje, čeprav Spark nudi posebno podporo API samo za Scala, Java in Python. Spark nima posebne abstrakcije "izliva", vključuje pa adapterje za delo s podatki, shranjenimi v številnih različnih virih, vključno z datotekami HDFS, Cassandra, HBase in S3.

Kjer Spark sija je v svoji podpori za več paradigem obdelave in podpornih knjižnicah. Da, Spark podpira pretočni model, vendar to podporo zagotavlja le eden od več modulov Spark, vključno z namensko vgrajenimi moduli za dostop do SQL, grafičnimi operacijami in strojnim učenjem, skupaj z obdelavo tokov.

Spark ponuja tudi izjemno priročno interaktivno lupino, ki omogoča hitro izdelavo prototipov in analizo raziskovalnih podatkov v realnem času z uporabo API-jev Scala ali Python. Pri delu v interaktivni lupini hitro opazite še eno glavno razliko med Sparkom in Storm: Spark ima bolj "funkcionalen" okus, kjer delo z API-jem bolj poganja veriženje zaporednih klicev metod za priklic primitivnih operacij - v nasprotju z Storm model, ki ga ponavadi vodi ustvarjanje razredov in izvajanje vmesnikov. Noben od pristopov ni boljši ali slabši, toda slog, ki vam je ljubši, lahko vpliva na vašo odločitev, kateri sistem je bolj primeren za vaše potrebe.

Tako kot Storm je tudi Spark zasnovan za obsežno razširljivost, ekipa Spark pa je dokumentirala uporabnike sistema, ki poganja proizvodne grozde s tisočimi vozlišči. Poleg tega je Spark zmagal na nedavnem natečaju Daytona GraySort 2014 in se v najboljšem času obrnil na obremenitev, ki je vključevala razvrščanje 100TB podatkov. Ekipa Spark dokumentira tudi operacije Spark ETL s produkcijskimi delovnimi obremenitvami v več petabajtov.

Spark je hitra, razširljiva in prilagodljiva odprtokodna porazdeljena računalniška platforma, združljiva s Hadoop in Mesos, ki podpira več računskih modelov, vključno s pretakanjem, grafično usmerjenimi operacijami, dostopom do SQL in porazdeljenim strojnim učenjem. Dokumentirano je, da ima Spark izjemno dobro lestvico in je tako kot Storm odlična platforma, na kateri lahko v realnem času zgradimo analitični sistem in sistem poslovne inteligence.

Odločanje

Kako izbirate med Storm in Spark?

Če so vaše zahteve osredotočene predvsem na obdelavo tokov in obdelavo v slogu CEP in začnete projekt na novo z namensko zgrajeno gručo za projekt, bi verjetno favoriziral Storm - še posebej, če so na voljo obstoječi izlivi Storm, ki ustrezajo vašim integracijskim zahtevam . To nikakor ni trdo in hitro pravilo, a takšni dejavniki bi vsaj predlagali začetek nevihte.

Po drugi strani pa, če izkoriščate obstoječo gručo Hadoop ali Mesos in / ali če vaše potrebe po obdelavi vključujejo bistvene zahteve za obdelavo grafov, dostop do SQL ali paketno obdelavo, boste morda želeli najprej pogledati Spark.

Drugi dejavnik, ki ga je treba upoštevati, je večjezična podpora obeh sistemov. Če morate na primer uporabiti kodo, napisano v R ali katerem koli drugem jeziku, ki ga Spark izvorno ne podpira, ima Storm prednost v širši jezikovni podpori. Če morate imeti interaktivno lupino za raziskovanje podatkov s klici API, vam Spark ponuja funkcijo, ki je Storm nima.

Na koncu boste verjetno želeli podrobno analizirati obe platformi, preden sprejmete končno odločitev. Priporočam, da za izdelavo majhnega dokaza o konceptu uporabite obe platformi - nato zaženite lastna merila uspešnosti z delovno obremenitvijo, ki čim bolj zrcali vaše predvidene delovne obremenitve, preden se popolnoma zavežete kateri koli.

Seveda vam ni treba sprejeti odločitve. Glede na vaše delovne obremenitve, infrastrukturo in zahteve boste morda ugotovili, da je idealna rešitev mešanica Storm in Spark - skupaj z drugimi orodji, kot so Kafka, Hadoop, Flume itd. V tem je lepota odprtokodne kode.

Katero koli pot izberete, ta orodja dokazujejo, da se je igra BI v realnem času spremenila. Zmogljive možnosti, ki so bile nekoč na voljo le elitnim, so zdaj dosegljive večini, če ne celo vsem srednje velikim organizacijam. Izkoristite jih.