Micronaut es un framework para microservicios de la JVM que utiliza ahead-of-time (AoT) compilation en lugar de reflection. GraalVM es una nueva máquina virtual de Oracle que tiene la habilidad de compilar las aplicaciones Java a binarios nativos, haciendo que sea el compañero ideal de Micronaut. Con ambos el arranque de las aplicaciones es extremadamente rápido y el consumo de memoria muy pequeño.
En esta charla aprenderás cómo sacar provecho a GraalVM en tus aplicaciones Micronaut convirtiéndolas a aplicaciones nativas y cómo funciona la integración de ambos frameworks.
7. Iván López @ilopmar
- Framework para microservicios en la JVM
- Ultra-ligero & reactive (basado en Netty)
- Java, Groovy & Kotlin
- Ahead of Time compilation (AoT)
- Sin reflection ni runtime proxies
- Arranque muy rápido
- Consumo de memoria bajo
- Natively Cloud Native
- Micronaut Data
- Soporte para GraalVM (mejorado en Micronaut 2.0)
Micronaut
8. Iván López @ilopmar
$ mn create-app basic-app
--features=graalvm
Crear aplicación con soporte para GraalVM
9. Iván López @ilopmar
$ mn create-app basic-app
--features=graalvm
Crear aplicación con soporte para GraalVM
Micronaut 2.1 & Gradle
13. Iván López @ilopmar
@AutomaticFeature
final class HibernateFeature implements Feature {
@Override
public void beforeAnalysis(BeforeAnalysisAccess access) {
// other drivers...
registerIfPresent(access, "oracle.jdbc.OracleDriver",
Oracle8iDialect.class,
Oracle9iDialect.class,
Oracle10gDialect.class,
Oracle12cDialect.class);
}
}
Micronaut incluye todo lo necesario (II)
21. Iván López @ilopmar
- Crear una imagen nativa tarda mucho
- Y necesita mucha RAM
- GraalVM cambia muy rápido (y a veces rompen cosas)...
- ...y nosotros también ;-)
- Usabamos Travis para Micronaut (ahora Github Actions), pero...
- ...Travis tiene límite para la RAM
- Necesitábamos otra opción.
Y esto… ¿Cómo se testea?
22.
23. Iván López @ilopmar
- Jobs periódicos cada hora (2.2.x / 2.1.x)
- Sólo si nuevos commit en Micronaut o GraalVM
- Compila GraalVM desde el código fuente (JDK8 & JDK 11)
- Crea imágenes nativas de aplicaciones de prueba de Micronaut
- Ejecuta tests funcionales
- https://github.com/micronaut-graal-tests
- https://gitlab.com/micronaut-projects/micronaut-graal-tests
Tests usando Gitlab CI
24. Iván López @ilopmar
- Basic application: DI, serialización de POJO, tipos reactivos,
HTTP Client
- Cache
- Micronaut function
- Service discovery: Consul & Eureka
- Static resources & views: Handlebars, Thymeleaf, Freemarker y Velocity
- Endpoints de Management & Metrics
- Distributed tracing: Zipkin
- RabbitMQ: Fire-and-forget & RPC
Aplicaciones de prueba Micronaut-GraalVM
25. Iván López @ilopmar
- Security: JWT, Basic Auth, Cookie, Session
- Scheduled jobs
- Micronaut Data JDBC: H2, Postgresql, Oracle, MariaDB, MS SQL Server
- Micronaut Data JPA-Hibernate: H2, Postgresql, MariaDB
- Bean Introspection
- Servlet: Tomcat & Jetty
- Flyway
- AWS app & function
- gRPC
Aplicaciones de prueba Micronaut-GraalVM
38. Iván López @ilopmar
- https://launch.micronaut.io (Google Cloud)
- Micronaut CLI: Linux, MacOS, Windows
- AWS Lambda + Custom runtime
Casos de uso
39. Iván López @ilopmar
GraalVM es una tecnología
nueva e interesante
Cuidado con las
limitaciones y casos de uso
Soporte out-of-the-box
en Micronaut
Mejoras en cada release Arranque más rápido &
menos consumo de
memoria
Desarrolladores
contentos y productivos
Resumen