Προγραμματισμός

Storm ή Spark: Επιλέξτε το όπλο σας σε πραγματικό χρόνο

Η ιδέα της επιχειρηματικής ευφυΐας σε πραγματικό χρόνο υπάρχει εδώ και αρκετό καιρό (δείτε τη σελίδα της Wikipedia σχετικά με το θέμα που ξεκίνησε το 2006). Όμως, ενώ οι άνθρωποι μιλούν για την ιδέα εδώ και χρόνια, δεν έχω δει πολλές επιχειρήσεις να αγκαλιάζουν το όραμα, πολύ λιγότερο συνειδητοποιούν τα οφέλη που προσφέρει.

Τουλάχιστον μέρος του λόγου ήταν η έλλειψη εργαλείων για την εφαρμογή BI και analytics σε πραγματικό χρόνο. Τα παραδοσιακά περιβάλλοντα αποθήκευσης δεδομένων ήταν σε μεγάλο βαθμό προσανατολισμένα σε λειτουργίες παρτίδας με εξαιρετικά υψηλές καθυστερήσεις, ήταν απίστευτα ακριβές ή και τα δύο.

Μια σειρά από ισχυρές, εύχρηστες πλατφόρμες ανοιχτού κώδικα έχουν προκύψει για να το αλλάξουν αυτό. Δύο από τα πιο αξιοσημείωτα είναι τα Apache Storm και Apache Spark, τα οποία προσφέρουν δυνατότητες επεξεργασίας σε πραγματικό χρόνο σε ένα πολύ μεγαλύτερο εύρος πιθανών χρηστών. Και τα δύο είναι έργα στο Apache Software Foundation και ενώ τα δύο εργαλεία παρέχουν αλληλεπικαλυπτόμενες δυνατότητες, το καθένα έχει ξεχωριστά χαρακτηριστικά και ρόλους για να παίξει.

Storm: Το Hadoop της επεξεργασίας σε πραγματικό χρόνο

Το Storm, ένα κατανεμημένο πλαίσιο υπολογισμού για την επεξεργασία ροής συμβάντων, ξεκίνησε τη ζωή του ως έργο του BackType, μιας εταιρείας πληροφοριών μάρκετινγκ που αγόρασε το Twitter το 2011. Το Twitter σύντομα άνοιξε το έργο και το έβαλε στο GitHub, αλλά ο Storm τελικά μετακόμισε στο Apache Incubator και έγινε έργο υψηλού επιπέδου Apache τον Σεπτέμβριο του 2014.

Το Storm έχει μερικές φορές αναφέρεται ως Hadoop της επεξεργασίας σε πραγματικό χρόνο. Η τεκμηρίωση του Storm φαίνεται να συμφωνεί: "Το Storm καθιστά εύκολη την αξιόπιστη επεξεργασία μη περιορισμένων ροών δεδομένων, κάνοντας για επεξεργασία σε πραγματικό χρόνο αυτό που έκανε ο Hadoop για επεξεργασία παρτίδας."

Για να επιτύχει αυτό το σκοπό, το Storm έχει σχεδιαστεί για μαζική επεκτασιμότητα, υποστηρίζει ανοχή σφαλμάτων με μια προσέγγιση "γρήγορης αποτυχίας, αυτόματης επανεκκίνησης" στις διαδικασίες και προσφέρει μια ισχυρή εγγύηση ότι κάθε πλειάδα θα υποβληθεί σε επεξεργασία. Η προεπιλογή του Storm σε μια εγγύηση «τουλάχιστον μία φορά» για τα μηνύματα, αλλά προσφέρει τη δυνατότητα εφαρμογής της επεξεργασίας «ακριβώς μία φορά».

Το Storm γράφεται πρωτίστως στο Clojure και έχει σχεδιαστεί για να υποστηρίζει καλωδιώσεις «στόμια» (σκεφτείτε ροές εισόδου) και «μπουλόνια» (μονάδες επεξεργασίας και εξόδου) μαζί ως κατευθυνόμενο ακυκλικό γράφημα (DAG) που ονομάζεται τοπολογία. Οι τοπολογίες καταιγίδας εκτελούνται σε συστάδες και ο προγραμματιστής Storm διανέμει εργασίες σε κόμβους γύρω από το σύμπλεγμα, με βάση τη διαμόρφωση τοπολογίας.

Μπορείτε να θεωρήσετε τις τοπολογίες ως περίπου ανάλογες με μια εργασία του MapReduce στο Hadoop, εκτός από το ότι η Storm επικεντρώνεται στην επεξεργασία σε πραγματικό χρόνο, σε ροή, οι τοπολογίες είναι προεπιλεγμένες να εκτελούνται για πάντα ή έως ότου τερματιστούν χειροκίνητα. Μόλις ξεκινήσει μια τοπολογία, οι σωλήνες φέρνουν δεδομένα στο σύστημα και παραδίδουν τα δεδομένα σε μπουλόνια (τα οποία με τη σειρά τους μπορούν να μεταφέρουν δεδομένα σε επόμενα μπουλόνια) όπου γίνεται η κύρια υπολογιστική εργασία. Καθώς εξελίσσεται η επεξεργασία, ένα ή περισσότερα μπουλόνια ενδέχεται να γράφουν δεδομένα σε μια βάση δεδομένων ή ένα σύστημα αρχείων, να στέλνουν ένα μήνυμα σε άλλο εξωτερικό σύστημα ή να κάνουν τα αποτελέσματα του υπολογισμού διαθέσιμα στους χρήστες.

Ένα από τα πλεονεκτήματα του οικοσυστήματος Storm είναι μια πλούσια σειρά διαθέσιμων στομίων εξειδικευμένων για τη λήψη δεδομένων από όλους τους τύπους πηγών. Παρόλο που ίσως χρειαστεί να γράψετε προσαρμοσμένα στόμια για πολύ εξειδικευμένες εφαρμογές, υπάρχει μια καλή πιθανότητα να βρείτε ένα υπάρχον στόμιο για μια απίστευτα μεγάλη ποικιλία πηγών - από το API ροής Twitter έως το Apache Kafka έως τους μεσίτες JMS σε όλα τα ενδιάμεσα.

Υπάρχουν προσαρμογείς για να είναι εύκολο να ενσωματωθούν σε συστήματα αρχείων HDFS, πράγμα που σημαίνει ότι το Storm μπορεί εύκολα να λειτουργήσει με το Hadoop εάν χρειαστεί. Ένα άλλο πλεονέκτημα του Storm είναι η υποστήριξή του για πολυγλωσσικό προγραμματισμό. Ενώ το ίδιο το Storm βασίζεται στο Clojure και τρέχει στο JVM, τα στόμια και τα μπουλόνια μπορούν να γραφτούν σε σχεδόν οποιαδήποτε γλώσσα, συμπεριλαμβανομένων των μη JVM γλωσσών που εκμεταλλεύονται ένα πρωτόκολλο για την επικοινωνία μεταξύ των στοιχείων που χρησιμοποιούν το JSON over stdin / stdout.

Εν ολίγοις, το Storm είναι ένα πολύ επεκτάσιμο, γρήγορο, ανεκτικό σε σφάλματα σύστημα ανοιχτού κώδικα για κατανεμημένους υπολογισμούς, με ιδιαίτερη έμφαση στην επεξεργασία ροής. Το Storm υπερέχει στην επεξεργασία συμβάντων και στον αυξητικό υπολογισμό, υπολογίζοντας τις κυλιόμενες μετρήσεις σε πραγματικό χρόνο σε ροές δεδομένων. Ενώ το Storm παρέχει επίσης πρωτόγονα για να επιτρέψει το γενικό κατανεμημένο RPC και μπορεί θεωρητικά να χρησιμοποιηθεί για τη συναρμολόγηση σχεδόν οποιασδήποτε κατανεμημένης εργασίας υπολογισμού, η ισχύς του είναι σαφώς επεξεργασία ροής γεγονότων.

Spark: Κατανεμημένη επεξεργασία για όλους

Το Spark, ένα άλλο έργο που είναι κατάλληλο για κατανεμημένους υπολογισμούς σε πραγματικό χρόνο, ξεκίνησε ως έργο του AMPLab στο Πανεπιστήμιο της Καλιφόρνια στο Μπέρκλεϊ πριν από την ένταξή του στο Apache Incubator και τελικά αποφοίτησε ως έργο ανώτερου επιπέδου τον Φεβρουάριο του 2014. Όπως το Storm, το Spark υποστηρίζει τη ροή -προσανατολισμένη επεξεργασία, αλλά είναι περισσότερο μια πλατφόρμα κατανεμημένων υπολογιστών γενικής χρήσης.

Ως εκ τούτου, το Spark μπορεί να θεωρηθεί ως πιθανή αντικατάσταση των λειτουργιών MapReduce του Hadoop, ενώ το Spark έχει τη δυνατότητα να τρέχει πάνω από ένα υπάρχον σύμπλεγμα Hadoop, βασιζόμενο στο YARN για τον προγραμματισμό πόρων. Εκτός από το Hadoop YARN, το Spark μπορεί να στρώσει πάνω από το Mesos για προγραμματισμό ή να τρέξει ως αυτόνομο σύμπλεγμα χρησιμοποιώντας τον ενσωματωμένο προγραμματιστή του. Σημειώστε ότι εάν το Spark δεν χρησιμοποιείται με το Hadoop, απαιτείται κάποιος τύπος συστήματος δικτύου / κατανεμημένων αρχείων (NFS, AFS κ.ο.κ.) εάν εκτελείται σε ένα σύμπλεγμα, οπότε κάθε κόμβος θα έχει πρόσβαση στα υποκείμενα δεδομένα.

Το Spark είναι γραμμένο σε Scala και, όπως το Storm, υποστηρίζει πολυγλωσσικό προγραμματισμό, αν και το Spark παρέχει συγκεκριμένη υποστήριξη API μόνο για Scala, Java και Python. Το Spark δεν έχει τη συγκεκριμένη αφαίρεση ενός "spout", αλλά περιλαμβάνει προσαρμογείς για εργασία με δεδομένα που είναι αποθηκευμένα σε πολλές διαφορετικές πηγές, συμπεριλαμβανομένων αρχείων HDFS, Cassandra, HBase και S3.

Όπου το Spark shines υποστηρίζει πολλαπλά παραδείγματα επεξεργασίας και τις υποστηρικτικές βιβλιοθήκες. Ναι, το Spark υποστηρίζει ένα μοντέλο ροής, αλλά αυτή η υποστήριξη παρέχεται μόνο από μία από τις πολλές μονάδες Spark, συμπεριλαμβανομένων των ειδικά σχεδιασμένων ενοτήτων για πρόσβαση SQL, λειτουργίες γραφημάτων και μηχανική εκμάθηση, καθώς και επεξεργασία ροής.

Το Spark παρέχει επίσης ένα εξαιρετικά εύχρηστο διαδραστικό κέλυφος που επιτρέπει γρήγορη και βρώμικη ανάλυση πρωτοτύπων και διερευνητικών δεδομένων σε πραγματικό χρόνο χρησιμοποιώντας τα API Scala ή Python. Δουλεύοντας στο διαδραστικό κέλυφος, παρατηρείτε γρήγορα μια άλλη σημαντική διαφορά μεταξύ του Spark και του Storm: Το Spark έχει περισσότερο μια «λειτουργική» γεύση, όπου η εργασία με το API οδηγείται περισσότερο μέσω της αλυσίδας διαδοχικών μεθόδων κλήσεων για επίκληση πρωτόγονων λειτουργιών - σε αντίθεση με το Μοντέλο καταιγίδας, το οποίο τείνει να οδηγείται με τη δημιουργία τάξεων και την εφαρμογή διεπαφών. Καμία προσέγγιση δεν είναι καλύτερη ή χειρότερη, αλλά το στυλ που προτιμάτε μπορεί να επηρεάσει την απόφασή σας σχετικά με το ποιο σύστημα ταιριάζει καλύτερα στις ανάγκες σας.

Όπως το Storm, το Spark έχει σχεδιαστεί για μαζική επεκτασιμότητα και η ομάδα του Spark έχει τεκμηριώσει τους χρήστες του συστήματος που εκτελούν συστάδες παραγωγής με χιλιάδες κόμβους. Επιπλέον, ο Spark κέρδισε τον πρόσφατο διαγωνισμό Daytona GraySort του 2014, μετατρέποντας τον καλύτερο χρόνο σε ένα φορτωμένο φορτίο εργασίας που αποτελείται από ταξινόμηση 100TB δεδομένων. Η ομάδα του Spark τεκμηριώνει επίσης τις λειτουργίες Spark ETL με φόρτο εργασίας στην πολλαπλή σειρά Petabyte.

Το Spark είναι μια γρήγορη, κλιμακούμενη και ευέλικτη πλατφόρμα υπολογιστών ανοιχτού κώδικα, συμβατή με Hadoop και Mesos, η οποία υποστηρίζει διάφορα υπολογιστικά μοντέλα, όπως streaming, κεντρικές γραφικές παραστάσεις, πρόσβαση SQL και κατανεμημένη μηχανική εκμάθηση. Το Spark έχει τεκμηριωθεί ότι έχει εξαιρετική κλίμακα και, όπως το Storm, είναι μια εξαιρετική πλατφόρμα για την κατασκευή ενός συστήματος ανάλυσης και επιχειρηματικής ευφυΐας σε πραγματικό χρόνο.

Λήψη της απόφασής σας

Πώς επιλέγετε μεταξύ Storm και Spark;

Εάν οι απαιτήσεις σας επικεντρώνονται κυρίως στην επεξεργασία ροής και στην επεξεργασία τύπου CEP και ξεκινάτε ένα έργο Greenfield με ένα ειδικά σχεδιασμένο σύμπλεγμα για το έργο, θα προτιμούσα μάλλον το Storm - ειδικά όταν υπάρχουν υπάρχοντα στόμια Storm που ταιριάζουν με τις απαιτήσεις ενσωμάτωσής σας . Αυτό σε καμία περίπτωση δεν είναι ένας σκληρός και γρήγορος κανόνας, αλλά τέτοιοι παράγοντες θα έδειχναν τουλάχιστον την αρχή με το Storm.

Από την άλλη πλευρά, εάν αξιοποιείτε ένα υπάρχον σύμπλεγμα Hadoop ή Mesos ή / και εάν οι ανάγκες επεξεργασίας σας περιλαμβάνουν σημαντικές απαιτήσεις για επεξεργασία γραφημάτων, πρόσβαση SQL ή επεξεργασία παρτίδας, ίσως θελήσετε να δείτε πρώτα το Spark.

Ένας άλλος παράγοντας που πρέπει να ληφθεί υπόψη είναι η πολυγλωσσική υποστήριξη των δύο συστημάτων. Για παράδειγμα, εάν πρέπει να αξιοποιήσετε κώδικα γραμμένο σε R ή οποιαδήποτε άλλη γλώσσα που δεν υποστηρίζεται εγγενώς από το Spark, τότε το Storm έχει το πλεονέκτημα της ευρύτερης γλωσσικής υποστήριξης. Με τον ίδιο τρόπο, εάν πρέπει να έχετε ένα διαδραστικό κέλυφος για εξερεύνηση δεδομένων χρησιμοποιώντας κλήσεις API, τότε το Spark σας προσφέρει μια δυνατότητα που δεν διαθέτει το Storm.

Στο τέλος, πιθανότατα θα θέλετε να πραγματοποιήσετε μια λεπτομερή ανάλυση και των δύο πλατφορμών προτού λάβετε μια τελική απόφαση. Προτείνω να χρησιμοποιήσετε και τις δύο πλατφόρμες για να δημιουργήσετε μια μικρή απόδειξη της έννοιας - στη συνέχεια, εκτελέστε τα δικά σας κριτήρια αξιολόγησης με ένα φόρτο εργασίας που αντικατοπτρίζει τους αναμενόμενους φόρτους εργασίας σας όσο το δυνατόν πιο κοντά πριν δεσμευτείτε πλήρως σε κανένα από αυτά.

Φυσικά, δεν χρειάζεται να λάβετε ούτε / ή απόφαση. Ανάλογα με το φόρτο εργασίας σας, την υποδομή και τις απαιτήσεις σας, μπορεί να διαπιστώσετε ότι η ιδανική λύση είναι ένα μείγμα Storm και Spark - μαζί με άλλα εργαλεία όπως Kafka, Hadoop, Flume και ούτω καθεξής. Εκεί βρίσκεται η ομορφιά του ανοιχτού κώδικα.

Όποια διαδρομή κι αν επιλέξετε, αυτά τα εργαλεία αποδεικνύουν ότι το παιχνίδι BI σε πραγματικό χρόνο έχει αλλάξει. Οι ισχυρές επιλογές που είναι διαθέσιμες μόνο σε λίγες ελίτ, είναι πλέον προσβάσιμες από τους περισσότερους, αν όχι όλους, μεσαίου μεγέθους έως μεγάλους οργανισμούς. Επωφεληθείτε από αυτά.