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

Μια σύντομη επισκόπηση των αντιδραστικών συστημάτων

Υπήρξε πολλή φήμη για τα αντιδραστικά συστήματα τα τελευταία δύο χρόνια. Μαζί με το buzz έρχεται η συλλογή των σχετικών σαλάτας λέξεων-κλειδιών, όπως αντιδραστικές ροές, αντιδραστικές επεκτάσεις, αντιδραστικός προγραμματισμός, λειτουργικός αντιδραστικός προγραμματισμός κ.λπ. και ακρωνύμια από καιρό σε καιρό. Λοιπόν, όλα αυτά είναι άλλη μια σύντομη διαφημιστική εκστρατεία;

Έχω ακούσει τους μηχανικούς λογισμικού να απορρίπτουν τα αντιδραστικά συστήματα ως τίποτα περισσότερο από ένα ψευδώνυμο για ασύγχρονα συστήματα που βασίζονται σε συμβάντα, όπως και ορισμένοι που απορρίπτουν τις μικροσυσκευές ως SOA (αρχιτεκτονική προσανατολισμένη στις υπηρεσίες), λιγότερο από το ESB (business service bus). Ενώ οι λέξεις-κλειδιά της τεχνολογίας με ανανεωμένο νόημα εμφανίζονται συχνά, βλέπω αρκετά διακριτικά χαρακτηριστικά σε αντιδραστικά συστήματα για να πιστεύω ότι το όνομα δεν είναι απλώς ένα άλλο ψευδώνυμο.

Τι είναι τα αντιδραστικά συστήματα;

Το Reactive Manifesto περιγράφει τα βασικά χαρακτηριστικά των αντιδραστικών συστημάτων: ανταποκρίνεται, ανθεκτικό, ελαστικό και βασίζεται σε μηνύματα. Αυτό δίνει μια εικόνα υψηλού επιπέδου και ακούγεται λίγο γενική. Συγκεκριμένα, η ανταπόκριση, η ανθεκτικότητα, η ελαστικότητα που περιγράφονται στο μανιφέστο είναι σχεδόν τυπικές απαιτήσεις πολλών πραγματικών εφαρμογών σήμερα.

Ίσως η "καθοδηγούμενη από μήνυμα" είναι η απαίτηση που διαφοροποιεί πραγματικά τα αντιδραστικά συστήματα από άλλα. Κάτω από την κουκούλα, ένα αντιδραστικό σύστημα βασίζεται σε αλληλεπιδράσεις μέσω ασύγχρονης μετάδοσης μηνυμάτων που καθορίζει όρια μεταξύ μεμονωμένων στοιχείων. Ένα τέτοιο μοντέλο αλληλεπίδρασης βοηθά στο άνοιγμα του δρόμου προς τη χαλαρή σύζευξη τόσο χρονικά όσο και ανάλογα με την τοποθεσία για ταυτόχρονη και διανομή, αντίστοιχα. Επιπλέον, επιτρέπει στο σύστημα να είναι πλήρως εξοπλισμένο με κάποιον μηχανισμό μη αποκλεισμού για τη ρύθμιση των ροών δεδομένων (περισσότερα σχετικά με αυτό παρακάτω).

Αντιδραστικές ροές

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

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

Πίεση στην πλάτη

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

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

Τι γίνεται με τον αντιδραστικό προγραμματισμό;

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

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

Εάν μια εικόνα με κώδικα λειτουργεί καλύτερα, σας προτείνω να διαβάσετε την ανάρτηση του Andre Staltz, η οποία ακολουθεί την ουσία του αντιδραστικού προγραμματισμού σε JavaScript χρησιμοποιώντας το RxJS.

ReactiveX

Το ReactiveX, γνωστό και ως Reactive Extensions, είναι μια βιβλιοθήκη API που επιτρέπει τη χρήση συνθετικών λειτουργιών για τον χειρισμό ροών ασύγχρονων συμβάντων. Επεκτείνοντας από το μοτίβο του παρατηρητή, τα παρατηρήσιμα και οι παρατηρητές (που είναι συνδρομητές των παρατηρήσιμων) αποτελούν τα βασικά συστατικά της βιβλιοθήκης με ένα σύνολο συνθετικών τελεστών για φιλτράρισμα, μετασχηματισμό, συσσωμάτωση κ.λπ. Τα RxJS και RxJava είναι δύο από τις πιο δημοφιλείς εφαρμογές του ReactiveX σε JavaScript και Java αντίστοιχα.

Ηθοποιοί Akka

Η Akka είναι μια βιβλιοθήκη βασισμένη σε ηθοποιού που στοχεύει στην κατασκευή επεκτάσιμων ταυτόχρονων και κατανεμημένων εφαρμογών στο JVM (Java Virtual Machine). Στον πυρήνα του είναι υπολογιστικοί πρωτόγονοι που καλούνται ηθοποιοί που διατηρούν την κατάσταση και τη συμπεριφορά και επικοινωνούν μεταξύ τους μέσω ασύγχρονης μετάδοσης μηνυμάτων.

Γράφοντας στη Scala, οι ηθοποιοί της Akka είναι από τη φύση τους ελαφριοί και χαλαρά συνδεδεμένοι. Αυτό, σε συνδυασμό με τις ισχυρές δυνατότητες δρομολόγησης, θραύσης και pub-sub της Akka για επεκτάσιμα κατανεμημένα συστήματα όπως το IoT, τα καθιστούν μια εξαιρετική πλατφόρμα για την κατασκευή αντιδραστικών συστημάτων.

Ρεύματα Akka

Ένας πρωτοπόρος (και ιδρυτικό μέλος) της πρωτοβουλίας αντιδραστικών ροών είναι η Akka Streams. Είναι χτισμένο πάνω από ηθοποιούς της Akka και παρέχει ένα εκτεταμένο σύνολο API για την κατασκευή τοπολογιών ροής και την επεξεργασία ροών με εξαιρετικά συνθετικό τρόπο. Μια πρόσφατη ανάρτηση ιστολογίου από τα ορυχεία γύρω από τις ροές Akka και πώς μπορεί να χρησιμοποιηθεί για την εκτέλεση ορισμένων βασικών εξόρυξης κειμένου.

Προφανώς, η ροή Akka ως αντιδραστική πρωτοβουλία προσπαθεί αυτές τις μέρες. Τα προγράμματα οδήγησης Akka-Streams όπως το Reactive Rabbit και το ReactiveMongo for RabbitMQ και το MongoDB έχουν αρχίσει να κερδίζουν κάποια δυναμική στον κλάδο της τεχνολογίας. Επιπλέον, το Akka HTTP, το οποίο είναι η επόμενη γενιά της εργαλειοθήκης Spray REST / HTTP, έχει επίσης κατασκευαστεί ώστε να είναι ενεργοποιημένο για ροή με τις ροές Akka ως την υποκείμενη μηχανή του.

Όλες οι ροές προσανατολισμένες - με κάποιο τρόπο

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

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

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

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