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

13 πλαίσια Java για βραχώδεις μικρο-υπηρεσίες

Ήταν ένα μακρύ ταξίδι για την Java, μια γλώσσα που ξεκίνησε ως το lingua franca για το κουτί στο πάνω μέρος της τηλεόρασης τις ημέρες που οι τηλεοράσεις δεν συνοδεύονταν από ενσωματωμένο το Roku ή το Chromecast. Τότε, η Java επρόκειτο να αποκτήσει τον Παγκόσμιο Ιστό, κινούμενος με το πρόγραμμα περιήγησης προτού έρθει το JavaScript και το αγκώναζε.

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

Εν τω μεταξύ, η JavaScript γενικά και το Node.js ειδικά αμφισβήτησαν την Java στον διακομιστή, χρησιμοποιώντας την υψηλή τους ταχύτητα και την ταχύτητα χωρίς νήμα για να αναλάβουν ένα τεράστιο κομμάτι της επισκεψιμότητας στον Ιστό. Ο κόμβος έχει συλλάβει τη φαντασία των νεότερων προγραμματιστών από την πλευρά του διακομιστή, προσφέροντας όχι μόνο ταχύτητα και αποδοτικότητα πόρων, αλλά και την απλότητα του κώδικα που τρέχει τόσο στον πελάτη όσο και στον διακομιστή.

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

Ένας άλλος λόγος πρέπει να είναι η συνεχής εξέλιξη της γλώσσας. Το Java 8 προσφέρει σταθερή υποστήριξη για τις λειτουργικές γλώσσες όπως το Scala και το Kotlin. Το JVM είναι πλέον ένα θεμέλιο για πολλά από τα καλύτερα πειράματα στην ανάπτυξη γλωσσών υπολογιστών. Δεκάδες νέες γλώσσες μπορούν να μεταγλωττιστούν σε κώδικα Java byte και να συνδεθούν μεταξύ τους για να κάνουν τα σύνθετα έργα να λειτουργούν μαζί. Πολλές από τις στοίβες που λειτουργούν ομαλά σε ένα JVM μπορεί να κατασκευαστούν από ένα μείγμα Java και μια σειρά από άλλες γλώσσες.

Ο μεγαλύτερος λόγος, ωστόσο, πρέπει να είναι καθαρή αδράνεια. Καθώς γράφω, 371 θέσεις εργασίας για προγραμματιστές COBOL αναφέρονται στο Dice. Υπάρχουν πολλές, πολλές ακόμη εργασίες με τη λέξη Java σε αυτές. Δεν προκαλεί έκπληξη το γεγονός ότι οι έξυπνες ομάδες εξετάζουν τις τεράστιες στοίβες του παλαιού κώδικα Java και πιστεύουν ότι η απλούστερη λύση είναι απλώς να προσθέσετε μια πλαϊνή πόρτα που εκτοξεύει τα δεδομένα ως δομές δεδομένων JSON; Voilà. Ο παλιός κώδικας συνεχίζει να λειτουργεί, αλλά λειτουργεί σαν μια σύγχρονη μικροϋπηρεσία σε αυτές τις πλευρικές πόρτες.

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

Ακολουθεί μια λίστα με 13 επιλογές ανοιχτού κώδικα που χρησιμοποιούν οι προγραμματιστές Java για να βρουν λύσεις που αποτελούν το θεμέλιο των αρχιτεκτονικών μικροϋπηρεσιών παντού.

Ανοιξιάτικη μπότα

Ο κόσμος της Java κατασκευάζει εφαρμογές Spring για μεγάλο χρονικό διάστημα. Το Spring Boot είναι μια συγκεκριμένη έκδοση του Spring που κάνει τη διαδικασία πολύ πιο εύκολη, χειρίζοντας πολλές από τις λεπτομέρειες διαμόρφωσης για εσάς. Το Spring Boot δημιουργήθηκε για να αυτοματοποιήσει την έναρξη κάθε είδους έργων της Spring, όχι μόνο των μικροϋπηρεσιών. Για να κάνετε τα πράγματα ακόμα πιο απλά, αφού τελειώσετε με την εφαρμογή, το Spring Boot αναμιγνύεται σε έναν διακομιστή ιστού και καταλήγει σε ένα μόνο αρχείο JAR που είναι σχεδόν το μόνο που χρειάζεστε εκτός από το JVM. Σκεφτείτε το ως το αρχικό δοχείο Docker.

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

Οι μικροϋπηρεσίες που αναπτύχθηκαν με την Spring ακολουθούν την ίδια φιλοσοφία MVC με τις εφαρμογές μακροεντολών που κατασκευάζουμε εδώ και χρόνια. Το πλαίσιο απολαμβάνει όλες τις βαθιές συνδέσεις που έχουν δημιουργηθεί εδώ και χρόνια ανάπτυξης Java, συμπεριλαμβανομένης της ενοποίησης με όλα τα μεγάλα και δευτερεύοντα καταστήματα δεδομένων, διακομιστές LDAP και εργαλεία ανταλλαγής μηνυμάτων όπως το Apache Kafka. Υπάρχουν επίσης δεκάδες λίγα και όχι τόσο λίγα χαρακτηριστικά για τη διατήρηση μιας τρέχουσας συλλογής διακομιστών, λειτουργιών όπως το Spring Vault, ένα εργαλείο για τη διατήρηση των μυστικών, των κωδικών πρόσβασης και των διαπιστευτηρίων που απαιτούνται από τους διακομιστές στην παραγωγή. Όλα αυτά τα πλεονεκτήματα δείχνουν γιατί οι προγραμματιστές Java συμμετέχουν στο συγκρότημα για πολλά χρόνια.

Eclipse MicroProfile

Το 2016, ορισμένοι από τους οπαδούς της κοινότητας Java Enterprise κοίταξαν γύρω και αποφάσισαν να καθαρίσουν όλη την κατασκευή από την Java Enterprise Edition, ώστε οι άνθρωποι να μπορούσαν να δημιουργήσουν απλές μικροσυσκευές με τα κλασικά μέρη. Πέταξαν έναν εκπληκτικό αριθμό βιβλιοθηκών, αλλά κράτησαν τον κώδικα για την επεξεργασία αιτημάτων REST, την ανάλυση του JSON και τη διαχείριση της εξάρτησης. Αυτό που κατέληξαν με το όνομα Eclipse MicroProfile ήταν γρήγορο και απλό.

Έκτοτε, η κοινότητα MicroProfile έκανε ένα σύμφωνο για την κυκλοφορία νέων εκδόσεων όσο συχνά τριμηνιαία, προσθέτοντας νέο κώδικα για τη διατήρηση της λειτουργίας των μικρο-υπηρεσιών ομαλά και με ασφάλεια. Η διαδικασία ανάπτυξης και η δομή κώδικα θα είναι πολύ γνωστά σε όποιον έχει ζήσει στον κόσμο της Java EE, αλλά οι ατελείωτες ταλαιπωρίες διαμόρφωσης έχουν τελειώσει. Είναι απόδειξη ότι μπορείτε να διδάξετε στα παλιά σκυλιά νέα κόλπα.

Dropwizard

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

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

WildFly Thorntail

Οι λαοί στο Red Hat δημιούργησαν τη δική τους έκδοση του MicroProfile με ένα κομψό εργαλείο διαμόρφωσης. Το πλαίσιο αρχικά ονομάστηκε WildFly Swarm, αλλά στη συνέχεια μετονομάστηκε σε Thorntail. Ο ιστότοπος Thorntail σάς βοηθά να δημιουργήσετε το δικό σας αρχείο κατασκευής Maven καθορίζοντας μόνο τις δυνατότητες που χρειάζεστε. Στη συνέχεια, ο Maven φροντίζει να συγκεντρώσει τα πάντα.

Το Thorntail θα εντοπίσει επίσης τα βασικά στοιχεία που θα χρειαστείτε σαρώνοντας τον κωδικό σας, αλλά μπορείτε να το παρακάμψετε με ένα αρχείο BOM (λογαριασμός υλικών). Όταν είναι όλα σε λειτουργία, το Thorntail θα αφαιρέσει τα μέρη της Java Enterprise Edition που δεν θα χρησιμοποιηθούν και θα δημιουργήσει ένα αρχείο JAR που είναι μικρό και έτοιμο να αναπτυχθεί με μία εντολή - μια λεία λειτουργία που επιτρέπει στο έργο Thorntail να το ονομάσει Uber -ΔΟΧΕΙΟ. Είναι μια άλλη προσέγγιση για να ακολουθήσετε την παράδοση της Java Enterprise Edition χωρίς να διατηρήσετε όλες τις βαριές αποσκευές.

Χελίντον

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

Οι αρχιτέκτονες του Helidon ακολούθησαν πολλά από τα ίδια θέματα που επαναλαμβάνονται στα άλλα έργα εδώ. Εξασφαλίστε το Java Enterprise Edition και διατηρήστε τον ελαφρύ πυρήνα που βασίζεται σε servlet που έχει κερδίσει την εμπιστοσύνη του κόσμου. Στην περίπτωση της Helidon, οι προγραμματιστές ξεκίνησαν με το Netty και πρόσθεσαν αρκετό κώδικα για να κάνουν κάποια διαχείριση δρομολόγησης και σφαλμάτων. Για να κάνουν τα πράγματα ενδιαφέροντα, αγκάλιασαν δύο βασικά μοντέλα για τον κώδικα, τις λεγόμενες εκδόσεις SE και MP.

Το Helidon SE θα φαίνεται πολύ εξοικειωμένο με τους προγραμματιστές του Node.js με τις μεγάλες αλυσίδες λειτουργιών που συνοδεύονται από τελείες. Το Helidon MP θα φαίνεται πιο οικείο στους προγραμματιστές Java που χρησιμοποιούν JAX-RS. Υπάρχουν επίσης μερικά χρήσιμα και καλά εκτιμημένα εργαλεία για τον έλεγχο της υγείας των διακομιστών ή για τον εντοπισμό της ροής δεδομένων μέσω ενός σύμπλεγμα μικροϋπηρεσιών. Αυτοί είναι επιτακτικοί λόγοι για να εξερευνήσετε τις δυνατότητες, ακόμη και χωρίς την υποστήριξη της Oracle.

Κρίκετ

Ένα ακόμη πλαίσιο για γρήγορη ανάπτυξη API είναι το Cricket. Το κρίκετ είναι μικρό παρά το γεγονός ότι περιλαμβάνει πολλά πρόσθετα, όπως μια αποθήκευση δεδομένων κλειδιού-τιμής για να σας σώσει από τη σύνδεση μιας βάσης δεδομένων και ενός προγραμματιστή για τον έλεγχο της επαναλαμβανόμενης επεξεργασίας φόντου. Δεν υπάρχουν άλλες εξαρτήσεις που προσθέτουν επιπλοκές ή κλειδώματα, οπότε είναι πολύ εύκολο να προσθέσετε τον κωδικό σας στο Cricket και να ξεκινήσετε μια ανεξάρτητη μικροϋπηρεσία.

Φανέλα

Μία από τις τυπικές προσεγγίσεις για την ανάπτυξη μιας υπηρεσίας Ιστού είναι το Java API για RESTful Web Services (γνωστός και ως JAX-RS), μια γενική προδιαγραφή που έχει εφαρμοστεί στο πλαίσιο του Τζέρσεϋ. Η προσέγγιση εξαρτάται σε μεγάλο βαθμό από τη χρήση των σχολιασμών για τον καθορισμό της αντιστοίχισης διαδρομής και των λεπτομερειών επιστροφής. Οτιδήποτε άλλο από την ανάλυση των παραμέτρων και τη συσκευασία του JSON γίνεται από τον Jersey.

Το κύριο πλεονέκτημα του Jersey είναι ότι εφαρμόζει το πρότυπο JAX-RS, ένα χαρακτηριστικό που είναι αρκετά επιθυμητό ώστε ορισμένοι προγραμματιστές να συνδυάζουν το Jersey με το Spring Boot για να απολαμβάνουν και τα δύο μαζί.

Παίζω

Ένας από τους καλύτερους τρόπους για να ζήσετε τη διαγλωσσική ισχύ του JVM είναι με το πλαίσιο Play, ένα σωρό κώδικα Scala που συνδέεται με την Java ή οποιαδήποτε από τις άλλες γλώσσες JVM. Το ίδρυμα είναι πολύ μοντέρνο, με ένα ασύγχρονο, ανιθαγενές μοντέλο που δεν υπερφορτώνει τον διακομιστή με ατελείωτα νήματα που προσπαθούν να παρακολουθούν τους χρήστες και τα δεδομένα περιόδου σύνδεσης. Υπάρχουν επίσης μια σειρά από επιπλέον δυνατότητες που μπορούν να χρησιμοποιηθούν για τη δημιουργία ενός ιστότοπου όπως το OpenID, την επικύρωση και την υποστήριξη μεταφόρτωσης αρχείων.

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

Κομπάζω

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

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

Το Swagger είναι ένα οικοσύστημα για API και δεν περιορίζεται στην Java. Εάν η ομάδα σας μετακινηθεί στο Node.js ή σε οποιεσδήποτε από άλλες δεκάδες άλλες γλώσσες, υπάρχει μια μονάδα Swagger Codegen που περιμένει να μετατρέψει τις προδιαγραφές OpenAPI σε εφαρμογή σε αυτήν τη γλώσσα.

Επανεκκινήστε

Μία από τις μεγαλύτερες διαφορές μεταξύ των διαφόρων πλαισίων είναι ο αριθμός των συνδέσεων με άλλες υπηρεσίες και βιβλιοθήκες. Το έργο Restlet προσφέρει μία από τις μεγαλύτερες συλλογές χαρακτηριστικών και συνδέσεων. Είναι ήδη ενσωματωμένο σε βιβλιοθήκες όπως το JavaMail, σε περίπτωση που η μικροσυσκευή σας θα πρέπει να μιλήσει POP, IMAP ή SMTP σε κάποιο διακομιστή αλληλογραφίας και Lucene / Solr, σε περίπτωση που θέλετε να δημιουργήσετε δείκτες με δυνατότητα αναζήτησης μεγάλων κομματιών κειμένου και τα μεταδεδομένα το.

Οι δυνατότητες στο Restlet συνεχίζουν απλώς επειδή αυτή η στοίβα γενικά υποστηρίζει πολλές διαφορετικές επιλογές για κάθε μέρος. Για παράδειγμα, δεν χρειάζεται να χρησιμοποιήσετε το JSON, επειδή ο κώδικας θα χειριστεί XML, CSV, YAML και μερικές ακόμη μορφές αρχείων. Λαμβάνετε πολλές διαφορετικές επιλογές για τα πρότυπα για τη δομή της απάντησής σας. Μία από τις πιο όμορφες επιπλέον δυνατότητες είναι ο πελάτης Restlet, ο οποίος σας επιτρέπει να δοκιμάσετε τα API σας από το πρόγραμμα περιήγησης Chrome.

Σκουός

Ο εντοπισμός σφαλμάτων μικροσυσκευών είναι συχνά μια πραγματική πρόκληση, επειδή τα μέρη είναι τόσο χαλαρά συνδεδεμένα και είναι δύσκολο να παρακολουθείτε τη ροή δεδομένων σε όλα τα επίπεδα του συστήματος. Το Squash σάς επιτρέπει να ρυθμίζετε σημεία διακοπής στον κώδικά σας που εκτελούνται σε ένα σύμπλεγμα Kubernetes και, στη συνέχεια, να λαμβάνετε όλα τα δεδομένα πίσω στο IDE σας σαν να ήταν κώδικας που εκτελείται τοπικά. Το Squash ενσωματώνεται επίσης με τους χρόνους εκτέλεσης Node.js και Python σε περίπτωση που η συλλογή μικροσυστημάτων σας δεν είναι μόνο Java.

Τηλεπαρουσία

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

Φερμουάρ

Το Zipkin είναι ένας μηχανισμός καταγραφής συμβάντων σε διάφορες μικροϋπηρεσίες και στη συνέχεια συσχέτιση των συμβάντων, έτσι ώστε τα προβλήματα να μπορούν να απομονωθούν και να μελετηθούν καθώς κυμαίνονται μέσω της συλλογής μηχανών. Υπάρχει μια εφαρμογή Zipkin για Java, καθώς και τουλάχιστον έξι άλλες γλώσσες, ώστε να μπορούν να αντιμετωπιστούν πολυγλωσσικά συστήματα. Μερικά από τα πιο εξελιγμένα πλαίσια όπως το Spring έχουν ήδη ενσωματωμένο το Zipkin σε κάποια μορφή.

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