Red Hat vient de publier Quarkus, une framework écrit en Java pour Kubernetes, spécialement conçu pour GraalVM et HotSpot, la machine virtuelle de l'OpenJDK. Quarkus a pour objet de faire de Java la meilleure plateforme pour les environnements serverless et Kubernetes, offrant aux développeurs un modèle de programmation réactif et impératif unifié.
Quarkus est un framework full stack qui s'appuie sur un ensemble de librairies utilisées par les développeurs Java, telles que Eclipse MicroProfile et Vert.x. Le système d'injection de dépendances de Quarkus utilise CDI, ce qui permet aux développeurs d'utiliser JPA / Hibernate et JAX-RS / RESTEasy, entre autres. De plus, Quarkus inclut un framework d'extension, sur lequel les auteurs peuvent s'appuyer pour l'enrichir. Ce framework d'extension compile également ses éléments dans un binaire natif pour GraalVM.
D'après Red Hat, Quarkus est une environnement d'exécution très efficace. Il autorise notamment des démarrages rapides, ce qui permet de créer des microservices dans des containers sous Kubernetes, capables de se dupliquer très rapidement. La faible consommation mémoire permet d'optimiser la densité des microservices déployés et de réduire l'empreinte mémoire des applications et des containers.
(Image prise sur https://quarkus.io/)
Quarkus est conçu pour apporter un modèle de programmation à la fois impératif et réactif. Les développeurs Java familiers du modèle impératif peuvent donc adopter rapidement ce framework sans avoir à apprendre de nouveau paradigme de programmation, de même que les développeurs qui préfèrent une approche de développement nativement réactive et pour le cloud.
Approche impérative :
@Inject
SayService say;
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return say.hello();
}
Approche réactive :
@Inject @Stream("kafka")
Publisher reactiveSay;
@GET
@Produces(MediaType.SERVER_SENT_EVENTS)
public Publisher stream() {
return reactiveSay;
}
Il est également possible d'implémenter des fonctions en utilisant Quarkus, pouvant être utilisées en environnement serverless, tel que sur l'exemple suivant, écrit en AWS lambda :
public class HelloLambda implements RequestHandler {
@Inject
HelloGreeter greeter;
@Override
public String handleRequest(HelloRequest request, Context context) {
return greeter.greet(request.firstName, request.lastName);
}
}
Quarkus a été conçu pour avoir très peu, voire pas du tout de configuration, et pour être intuitif à utiliser. Pour cela, les développeurs peuvent créer un squelette de projet avec la commande suivante :
mvn io.quarkus:quarkus-maven-plugin:0.12.0:create \ -DprojectGroupId=my-groupId \ -DprojectArtifactId=my-artifactId \ -DprojectVersion=my-version \ -DclassName="org.my.group.MyResource"
Quarkus apporte également une fonctionnalité de redéploiement à chaud, qui évite le cycle ennuyeux Codage → Compilation → Déploiement → Rafraîchir le navigateur → Répéter. En exécutant mvn compile quarkus:dev
, Quarkus se lance en mode développement. Quand il reçoit une requête HTTP, il va conserver la requête et vérifier si le code de l'application subit des changements. Si c'est le cas, il va recompiler les fichiers qui ont changé de façon transparente, et la requête HTTP restera active dans l'application redéployée.
Quarkus constitue au minimum une alternative intéressante à l'heure du Cloud, où les containers, Kubernetes, les microservices, les function-as-a-service (FaaS) et les applications nativement conçues pour le cloud permettent d'atteindre des hauts niveaux de productivité et d'efficacité.
Plus de détails sur Quarkus peuvent être trouvés sur la page quarkus.io. Les dévelopeurs qui veulent démarrer avec Quarkus y trouveront un guide de démarrage. De nombreux autres guides sont également disponibles.