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

Το είχε με το Apache Storm; Ο ερωδιός σπρώχνει τη διάσωση

Πέρυσι, το Twitter έριξε δύο βόμβες. Πρώτον, δεν θα χρησιμοποιούσε πλέον το Apache Storm στην παραγωγή. Δεύτερον, το είχε αντικαταστήσει με ένα οικιακό σύστημα επεξεργασίας δεδομένων, Heron.

Παρά την κυκλοφορία ενός χαρτιού που περιγράφει λεπτομερώς την αρχιτεκτονική του Heron, η εναλλακτική λύση του Twitter έναντι του Storm παρέμεινε κρυμμένη στα κέντρα δεδομένων του Twitter. Όλα αυτά άλλαξαν την περασμένη εβδομάδα όταν το Twitter κυκλοφόρησε τον Heron με άδεια ανοιχτού κώδικα. Τι είναι λοιπόν ο Heron και πού ταιριάζει στον κόσμο της επεξεργασίας δεδομένων σε κλίμακα;

Μια μηχανή επεξεργασίας δεδομένων κατευθυνόμενου ακυκλικού γραφήματος (DAG), η Heron είναι μια άλλη καταχώρηση σε ένα πολύ γεμάτο πεδίο αυτήν τη στιγμή. Αλλά ο Ηρώνας δεν είναι "βλέμμα κι εγώ!" λύση ή μια προσπάθεια μετατροπής κινητήρων DAG σε ισοδύναμα μεγάλων δεδομένων του FizzBuzz.

Ο Heron μεγάλωσε από πραγματικές ανησυχίες που είχε το Twitter με τη μεγάλη ανάπτυξη τοπολογιών Storm. Αυτά περιελάμβαναν δυσκολίες με το προφίλ και το σκεπτικό σχετικά με τους εργαζομένους του Storm όταν κλιμακώθηκαν σε επίπεδο δεδομένων και σε επίπεδο τοπολογίας, τη στατική φύση της κατανομής πόρων σε σύγκριση με ένα σύστημα που εκτελείται σε Mesos ή YARN, έλλειψη υποστήριξης αντίστροφης πίεσης και άλλα.

Αν και το Twitter θα μπορούσε να έχει υιοθετήσει το Apache Spark ή το Apache Flink, αυτό θα περιλάμβανε την επανεγγραφή όλου του υπάρχοντος κώδικα του Twitter. (Μην ξεχνάτε, το Twitter έχει χρησιμοποιήσει το Storm περισσότερο από οποιονδήποτε άλλο, αποκτώντας το BackType, δημιουργό του Storm, το 2011 πριν από το open source.) Αντ 'αυτού, το Twitter έκανε μια διαφορετική προσέγγιση: ένα νέο πλαίσιο επεξεργασίας ροής με ένα συμβατό με το Storm API .

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

com.twitter.heron

ερωδιός-api

ΣΤΙΓΜΙΟΤΥΠΟ

συντάσσω

com.twitter.heron

ερωδιός-καταιγίδα

ΣΤΙΓΜΙΟΤΥΠΟ

συντάσσω

Στη συνέχεια, καταργείτε τις εξαρτήσεις σας από τον κώδικα καταιγίδας και το clojure-plugin. Ανακατασκευάστε και ο κωδικός σας θα εκτελεστεί στο Heron χωρίς να απαιτούνται περαιτέρω αλλαγές. Απλός! (Κυρίως, ούτως ή άλλως, αλλά θα επανέλθουμε σε αυτό.)

Λειτουργικά, η τρέχουσα εφαρμογή του Heron τρέχει πάνω από το Apache Mesos, χρησιμοποιώντας το Apache Aurora, το πλαίσιο προγραμματισμού Mesos που αναπτύχθηκε από το Twitter (έκπληξη!). Από τη στιγμή που άλλαξε όλες τις τοπολογίες του Storm στο Heron, το Twitter κατάφερε να μειώσει τους πόρους υλικού που είναι αφιερωμένοι στις τοπολογίες κατά τρεις, αυξάνοντας παράλληλα την απόδοση και μειώνοντας την καθυστέρηση στην επεξεργασία - όχι κακό.

Ίσως μια από τις πιο ενδιαφέρουσες πτυχές για τον Heron είναι ότι ενώ ο κώδικας για αυτό θα γραφτεί σε Java (ή Scala), και τα στοιχεία UI που βασίζονται στον Ιστό γράφονται στην Python, τα κρίσιμα μέρη του πλαισίου, τον κώδικα που διαχειρίζεται τις τοπολογίες και οι επικοινωνίες δικτύου δεν γράφονται καθόλου σε γλώσσα JVM.

Πράγματι, στην καρδιά του Heron, θα βρείτε κώδικα σε μια γλώσσα που ίσως δεν περιμένατε: C ++. Νομίζω ότι αυτή είναι μια πτυχή του μεγάλου κόσμου δεδομένων που θα δούμε περισσότερα στα επόμενα χρόνια.

Οι συντηρητές του Apache Storm έχουν αφαιρέσει πολλά στοιχεία του αρχικού κώδικα Clojure υπέρ των Java reimplementations και το έργο Apache Spark δημιουργεί επί του παρόντος κώδικα Java on-the-fly για να επιταχύνει την επεξεργασία του DataFrame. Αλλά και οι δύο εξακολουθούν να συνδέονται με την JVM - και η JVM έχει προβλήματα σε κλίμακα. Μην με παρεξηγείτε, το JVM είναι μια καταπληκτική δημιουργία που αντέχει στη δοκιμασία του χρόνου για 20 χρόνια, αλλά όταν τρέχετε σε μηχανήματα με τεράστια ποσότητα RAM και επεξεργάζεστε τεράστιες ποσότητες δεδομένων, προκύπτουν προβλήματα με τη συλλογή απορριμμάτων, ανεξάρτητα από το τι φανταχτερό σχέδιο συλλεκτών που χρησιμοποιείτε.

Σε ποιο σημείο, η επιστροφή σε μια γλώσσα όπως το C ++ αρχίζει να φαίνεται ελκυστική. Για παράδειγμα, η Scylla, μια εκ νέου εφαρμογή του C ++ του Apache Cassandra, έχει 10 φορές την απόδοση της Cassandra χωρίς καμία από τις GC να σταματήσει ότι η Cassandra είναι πασίγνωστη για μεγάλες αναπτύξεις. Είμαι αρκετά σίγουρος ότι θα δούμε σύντομα την προσέγγιση του Heron σε άλλα πλαίσια. Αυτό μπορεί να βοηθηθεί από την προσπάθεια του Project Panama να βελτιώσει τη διεπαφή μεταξύ Java και άλλων γλωσσών.

Δεδομένου ότι ο Heron απαιτεί λιγότερους πόρους και παρέχει περισσότερη απόδοση και λιγότερη καθυστέρηση από το Apache Storm, θα πρέπει να μετακινήσετε όλες τις τοπολογίες σας στο Heron τώρα, ναι; Λοιπόν, ίσως. Ο Heron είναι σήμερα συνδεδεμένος με το Mesos, οπότε αν δεν έχετε υπάρχουσα υποδομή Mesos, θα πρέπει να το ρυθμίσετε και αυτό, κάτι που δεν είναι μικρό έργο. Επίσης, εάν χρησιμοποιείτε τις λειτουργίες DRPC του Storm, καταργούνται στο Heron.

Από την άλλη πλευρά, η Heron εκτελεί όλες τις ανάγκες επεξεργασίας του Twitter στην παραγωγή για περισσότερο από ένα χρόνο, οπότε θα πρέπει να μπορεί να χειριστεί ό, τι μπορείτε να ρίξετε σε αυτό. Επιπλέον, το Twitter επισημαίνει ότι το Heron χρησιμοποιείται στη Microsoft και σε άλλες εταιρείες Fortune 500, οπότε μπορείτε να είστε σχετικά σίγουροι ότι πρόκειται να παραμείνει.

Από την άλλη πλευρά, ο Storm δεν στάθηκε ακίνητος. Η ομάδα του Apache Storm μπορεί να συζητήσει με την περιγραφή του Twitter για τον Heron ως "επόμενη γενιά του Apache Storm." Ενώ το Twitter δούλευε στο Heron, το Apache Storm έφτασε στο 1,0 - το οποίο περιλαμβάνει υποστήριξη για πίσω πίεση, βελτιωμένες επιλογές εντοπισμού σφαλμάτων και προφίλ, μείωση κατά 30% στον λανθάνοντα χρόνο και έως και 16 φορές βελτίωση της ταχύτητας.

Επιπλέον, το Storm 1.0 προσθέτει βηματοδότη, έναν δαίμονα για την εκφόρτωση της κίνησης των καρδιακών παλμών από το ZooKeeper, απελευθερώνοντας μεγαλύτερες τοπολογίες από το περίφημο σημείο συμφόρησης του ZooKeeper. Οι βελτιώσεις ταχύτητας του Heron μετρώνται από τον κώδικα Storm 0.8.x από τον οποίο αποκλίνει, όχι από την τρέχουσα έκδοση. εάν έχετε ήδη μετεγκατασταθεί στο Storm 1.0, ενδέχεται να μην βλέπετε πολύ περισσότερη βελτίωση σε σχέση με τις τρέχουσες τοπολογίες σας στο Storm και ενδέχεται να αντιμετωπίσετε ασυμβατότητες μεταξύ της εφαρμογής νέων δυνατοτήτων όπως η υποστήριξη αντίστροφης πίεσης μεταξύ Storm και Heron.

Συνολικά, δεν πιστεύω ότι ο Heron είναι πιθανό να προκαλέσει μεγάλο μειονέκτημα στην υιοθέτηση των πλαισίων επεξεργασίας δεδομένων όπως το Apache Spark, το Apache Flink ή το Apache Beam. Οι αφαιρέσεις και τα API υψηλότερου επιπέδου παρέχουν μια πολύ πιο φιλική για τους προγραμματιστές εμπειρία από τα χαμηλότερα επίπεδα Storm / Trident API. Ωστόσο, πιστεύω ότι ο συνδυασμός κώδικα JVM με λειτουργικές μονάδες εκτός JVM για τις κρίσιμες διαδρομές θα είναι μια πιο δημοφιλής προσέγγιση προς τα εμπρός, και από αυτή την άποψη, ο Heron μας δείχνει όλη την κατεύθυνση που θα ταξιδέψουμε τους μήνες και τα χρόνια να έρθω.

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