Quarkus

Clayton K. N. Passos
codigorefinado
Published in
4 min readMay 14, 2019

A Red Hat lançou o Quarkus, um framework Java nativo do Kubernetes feito sob medida para o GraalVM e OpenJDK HotSpot. O Quarkus visa tornar o java uma plataforma líder em ambientes serverless e Kubernetes, oferecendo aos desenvolvedores um modelo unificado de programação reativa e imperativa.

Na era do cloud, no qual containers, Kubernetes, microservices, functions-as-a-service (Faas), e aplicações nativas para o cloud estão apresentando altos níveis de produtividade e eficiência, o Quarkus surge com uma alternativa muito interessante.

Baseada nos melhores padrões, plataforma integrada, baixo consumo de processamento e tempo de inicialização é incrivelmente rápido, em milisegundos, Quarkus permite o uso do Java em ambientes serverless, suportando um ambiente responsivo e escalável.

https://quarkus.io/

O Quarkus aproveita uma série de bibliotecas comuns aos desenvolvedores Java, como Eclipse MicroProfile e Vert.x. A injeção de dependência do Quarkus é baseada no CDI, permitindo que os desenvolvedores usem JPA/Hibernate, JAX-RS/RESTEasy, e mais.

Possuí uma extensão que permite que autores de frameworks terceiros possam aproveitar para estende-lo, essa extensão também compila para binário nativo do GraalVM.

De acordo com a RedHat, o Quarkus oferece eficiências de tempo de execução significativas, tais como um rápido startup permitindo escalar microservices em containers e Kubernetes tanto para cima como para baixo, baixo uso de memória ajudando a otimizar a densidade de containers em implantações de arquitetura de microsserviços, e aplicações menores.

Com ele desenvolvedores podem utilizar o modelo de programação reativo ou imperativo, sem problemas, alias, já disse antes: “Em um futuro não muito distante teremos aplicações multi linguagens e multi paradigmas sendo entregues em produção em um único artefato”.

Com ele você pode criar seus AWS Lambdas em Java, além de poder utilizar uma linha de comando para criar uma aplicação nova, do zero.

mvn io.quarkus:quarkus-maven-plugin:0.15.0:create
-DprojectGroupId=org.acme
-DprojectArtifactId=getting-started
-DclassName="org.acme.quickstart.GreetingResource"
-Dpath="/hello"

Com o comando abaixo, você pode utilizar o Live Coding, funcionalidade que te permite evitar o processo tedioso de Escrever, compilar, publicar e então atualizar o navegador para ver a modificação.

mvn compile quarkus:dev

Com o Live Coding, o Quarkus será executado em modo de desenvolvimento, quando ele receber uma requisição fará a verificação se algo mudou, se sim os arquivos serão recompilados, publicados e disponibilizados para a requisição de forma transparente.

Um dos problemas identificados no ecossistema Java, é o tempo de iniciar e o consumo de memória das aplicações JEE rodando sobre JVM, a RedHat vem trabalhando para resolver esses problemas, logo que a GraalVM foi anunciada a comunidade a empresa viu uma oportunidade de trabalhar nestas limitações, e resolve-las.

Ao construir aplicações Java para a GraalVM é necessário tomar o cuidado com recursos dinâmicos como a “introspecção” (Reflection), atualmente há algumas limitações quanto ao uso deste recurso, na prática isto se estende aos frameworks que utilizam estes recursos, isto quer dizer que cerca de 90% do ecossistema precisa de alterações ou adaptações. Para ajudar neste problema, o Quarkus utiliza um sistema de extensões para suportar o uso de outras bibliotecas e frameworks. Para quem gosta de contribuir com software livre esta é uma excelente oportunidade, você pode criar um extensão para utilizar o seu framework favorito no Quarkus.

O Quarkus é um exemplo de como começar a direcionar cenários mais modernos de implantação nativa cloud com um modelo unificado de programação imperativa e reativa utilizando o MicroProfile que está direcionando o Java nativo para o cloud.

Baixei o código de exemplo do github, e logo de início observo que alguns dos problemas mais comuns estão por ali, problemas que envolvem CRUD, OpenTrace, Verte.x, Hibernate, Kafka. Isto já me trouxe a impressão que já é possível pensar em utilizar de forma séria.

Quer saber mais?

Oque é a GraalVM?

É uma máquina virtual universal que roda aplicações escritas em JavaScript, Python, Ruby, R, Java, Kotlin e Scala. Permite compilar ahead-of-time (AOT) construindo aplicações nativas.

Talvez você pense que esta história de rodar código nativo seja uma má ideia, afinal onde fica o “write once run anywhere”? Em um mundo de microserviços onde você está com sua aplicação sobre o Kubernets isto não é problema, pois agora nós empacotamos containers e não mais .wars, e o container não vai mudar, logo, todo o overhead de executar uma aplicação sobre uma JVM e as diversas camadas de abstração dos frameworks para que isto funcione bem não é mais necessário, então, AOT faz sentido neste cenário.

--

--