Εισαγωγή
Στις XNUMX Μαρτίου, RedHat (σύντομα IBM)
Ο στόχος είναι να γίνει η Java η κορυφαία πλατφόρμα για την ανάπτυξη Kubernetes και την ανάπτυξη εφαρμογών χωρίς διακομιστή, παρέχοντας στους προγραμματιστές μια ενοποιημένη προσέγγιση ανάπτυξης τόσο σε αντιδραστικά όσο και σε επιτακτική στυλ.
Αν κοιτάξεις
Υπόσχονται πολύ υψηλή ταχύτητα εκκίνησης της εφαρμογής και χαμηλή κατανάλωση μνήμης. Ακολουθούν τα δεδομένα από τον ιστότοπο του προγραμματιστή:
Χρόνος από την αρχή έως την πρώτη απάντηση(ες):
Διαμόρφωση
ΠΕΡΙΦΕΡΕΙΑ
REST+JPA
Quarkus+GraalVM
0.014
0.055
Quarkus+OpenJDK
0.75
2.5
Παραδοσιακό Cloud Native Stack*
4.3
9.5
Κατανάλωση μνήμης (Mb):
Διαμόρφωση
ΠΕΡΙΦΕΡΕΙΑ
REST+JPA
Quarkus+GraalVM
13
35
Quarkus+OpenJDK
74
130
Παραδοσιακό Cloud Native Stack*
140
218
Εντυπωσιακό, έτσι δεν είναι;
*Δεν βρήκα πληροφορίες σχετικά με αυτήν τη στοίβα τεχνολογίας, μπορούμε να υποθέσουμε ότι πρόκειται για κάποιο είδος Spring Boot με πρόσθετο κιτ σώματος.
Γειά σου Κόσμε!
Η απλούστερη εφαρμογή γραμμένη στο Quarkus θα μοιάζει με αυτό:
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}
Είναι κυριολεκτικά μια τάξη και φτάνει! Μπορείτε να εκτελέσετε την εφαρμογή χρησιμοποιώντας το Maven σε λειτουργία ανάπτυξης:
mvn compile quarkus:dev
…
$ curl http://localhost:8080/hello
hello
Η διαφορά από μια κανονική εφαρμογή είναι ότι δεν υπάρχει κατηγορία Εφαρμογών! Το Quarkus υποστηρίζει hot reload, ώστε να μπορείτε να αλλάξετε την εφαρμογή σας χωρίς να την επανεκκινήσετε, κάνοντας την ανάπτυξη ακόμα πιο γρήγορη.
Τι έπεται? Μπορείτε να προσθέσετε μια υπηρεσία σε έναν ελεγκτή χρησιμοποιώντας έναν σχολιασμό
@ApplicationScoped
public class GreetingService {
public String greeting(String name) {
return "Hello " + name + "!";
}
}
Ελεγκτής:
@Path("/hello")
public class GreetingResource {
@Inject
GreetingService service;
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/{name}")
public String greeting(@PathParam("name") String name) {
return service.greeting(name);
}
}
$ curl http://localhost:8080/hello/developer
Hello developer!
Σημειώστε ότι το Quarkus χρησιμοποιεί τυπικούς σχολιασμούς από γνωστά πλαίσια - CDI και JAX-RS. Δεν χρειάζεται να μάθετε τίποτα καινούργιο εάν έχετε εργαστεί με CDI και JAX-RS στο παρελθόν, φυσικά.
Εργασία με τη βάση δεδομένων
Χρησιμοποιούνται αδρανοποίηση και τυπικοί σχολιασμοί JPA για οντότητες. Όπως και με τους ελεγκτές REST, πρέπει να γράψετε έναν ελάχιστο κώδικα. Αρκεί να υποδείξετε τις εξαρτήσεις στο αρχείο συναρμολόγησης, να προσθέσετε σχολιασμούς @Entity
και ρυθμίστε την πηγή δεδομένων στο application.properties.
Ολα. Χωρίς sessionFactory, persistence.xml ή άλλα αρχεία υπηρεσίας. Γράφουμε μόνο τον κωδικό που χρειάζεται. Ωστόσο, εάν είναι απαραίτητο, μπορείτε να δημιουργήσετε ένα αρχείο persistence.xml και να ρυθμίσετε τις παραμέτρους του επιπέδου ORM με μεγαλύτερη ακρίβεια.
Το Quarkus υποστηρίζει προσωρινή αποθήκευση οντοτήτων, συλλογές για σχέσεις ένα προς πολλά και ερωτήματα. Με την πρώτη ματιά φαίνεται υπέροχο, αλλά είναι τοπικά προσωρινή αποθήκευση, για έναν κόμβο Kubernetes. Εκείνοι. Οι κρυφές μνήμες διαφορετικών κόμβων δεν συγχρονίζονται μεταξύ τους. Ελπίζω ότι αυτό είναι προσωρινό.
Ασύγχρονη εκτέλεση κώδικα
Όπως αναφέρθηκε παραπάνω, το Quarkus υποστηρίζει επίσης το αντιδραστικό στυλ προγραμματισμού. Ο κωδικός της προηγούμενης αίτησης μπορεί να γραφτεί με διαφορετική μορφή.
@Path("/hello")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/{name}")
public CompletionStage<String> greeting(@PathParam("name") String name) {
return CompletableFuture.supplyAsync(() -> {
return "Hello " + name + "!";
});
}
}
Ο ασύγχρονος κώδικας μπορεί επίσης να μεταφερθεί στην υπηρεσία, το αποτέλεσμα θα είναι το ίδιο.
Δοκιμές
Οι δοκιμές για εφαρμογές Quarkus μπορούν να γραφτούν σε JUnit4 ή JUnit5. Παρακάτω είναι ένα παράδειγμα δοκιμής για ένα τελικό σημείο, είναι γραμμένο χρησιμοποιώντας το RestAssured, αλλά μπορεί να χρησιμοποιηθεί ένα άλλο πλαίσιο:
@QuarkusTest
public class GreetingResourceTest {
@Test
public void testGreetingEndpoint() {
String uuid = UUID.randomUUID().toString();
given()
.pathParam("name", uuid)
.when().get("/hello/{name}")
.then()
.statusCode(200)
.body(is("Hello " + uuid + "!"));
}
}
Ο σχολιασμός @QuarkusTest σάς καθοδηγεί να εκτελέσετε την εφαρμογή πριν εκτελέσετε δοκιμές. Το υπόλοιπο είναι κώδικας γνωστός σε όλους τους προγραμματιστές.
Εφαρμογή για συγκεκριμένη πλατφόρμα
Δεδομένου ότι το Quarkus είναι στενά ενσωματωμένο με το GraalVM, είναι φυσικά δυνατό να δημιουργηθεί κώδικας για συγκεκριμένη πλατφόρμα. Για να το κάνετε αυτό, πρέπει να εγκαταστήσετε το GraalVM και να καθορίσετε τη μεταβλητή περιβάλλοντος GRAALVM_HOME. Περαιτέρω
mvn package -Pnative
Είναι ενδιαφέρον ότι η παραγόμενη εφαρμογή μπορεί να δοκιμαστεί. Και αυτό είναι σημαντικό γιατί η εκτέλεση του εγγενούς κώδικα μπορεί να διαφέρει από την εκτέλεση στο JVM. Ο σχολιασμός @SubstrateTest εκτελεί κώδικα εφαρμογής για συγκεκριμένη πλατφόρμα. Η επαναχρησιμοποίηση του υπάρχοντος κωδικού δοκιμής μπορεί να γίνει χρησιμοποιώντας κληρονομικότητα· ως αποτέλεσμα, ο κώδικας για τη δοκιμή μιας εφαρμογής που εξαρτάται από την πλατφόρμα θα μοιάζει με αυτό:
@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {
}
Η παραγόμενη εικόνα μπορεί να συσκευαστεί στο Docker και να εκτελεστεί σε Kubernetes ή OpenShift, όπως περιγράφεται λεπτομερώς στο
Εργαλειοθήκη
Το πλαίσιο Quarkus μπορεί να χρησιμοποιηθεί με τους Maven και Gradle. Το Maven υποστηρίζεται πλήρως, σε αντίθεση με το Gradle. Δυστυχώς, αυτή τη στιγμή το Gradle δεν υποστηρίζει τη δημιουργία κενού έργου· υπάρχουν λεπτομερείς πληροφορίες στον ιστότοπο
επέκταση
Το Quarkus είναι ένα επεκτάσιμο πλαίσιο. Αυτή τη στιγμή υπάρχει παραγγελία
Συμπέρασμα
Κατά τη γνώμη μου, το Quarkus είναι αρκετά σύμφωνο με τις τάσεις της εποχής. Η ανάπτυξη κώδικα backend γίνεται όλο και πιο εύκολη και αυτό το πλαίσιο απλοποιεί και επιταχύνει περαιτέρω την ανάπτυξη υπηρεσιών προσθέτοντας εγγενή υποστήριξη για το Docker και το Kubernetes. Ένα τεράστιο πλεονέκτημα είναι η ενσωματωμένη υποστήριξη για το GraalVM και η δημιουργία εικόνων που εξαρτώνται από την πλατφόρμα, που επιτρέπει στις υπηρεσίες να ξεκινούν πολύ γρήγορα και να καταλαμβάνουν λίγο χώρο στη μνήμη. Και αυτό είναι πολύ σημαντικό στην εποχή μας του μαζικού πάθους για τις μικροϋπηρεσίες και την αρχιτεκτονική χωρίς διακομιστές.
Επίσημη ιστοσελίδα -
Πηγή: www.habr.com