Este documento describe cómo Micronaut, un framework para microservicios en Java, puede usarse para crear aplicaciones serverless. Explica las diferencias entre crear una función serverless individual versus una aplicación completa, y cómo AWS Lambda maneja el problema del "cold start". También muestra cómo el uso de GraalVM puede mejorar significativamente los tiempos de inicio en frío al compilar aplicaciones Java a binarios nativos. Finalmente, presenta una demostración comparando el rendimiento de versiones JVM y GraalVM de una aplicación de ejemplo.
5. 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
- Soporte para Serverless: AWS, Azure, Google Cloud, Oracle Cloud
- Soporte para GraalVM (mejorado en Micronaut 2.0)
Micronaut
6. Iván López @ilopmar
Serverless en Micronaut
Tipo aplicación Triggers
Application o
Serverless function
HTTP request a un único
endpoint
Application HTTP requests a múltiples
endpoints
Serverless function Eventos: S3, queue,
scheduled
8. Iván López @ilopmar
Problema “cold start”
- AWS Lambda creas instancias bajo demanada
- Inicialización en primera petición
- En siguientes peticiones se reutiliza
- No sólo problema en Servless,
también con contenedores
10. Iván López @ilopmar
Soluciones
- Aumentar la memoria de la Lambda
- Más memoria –> Más CPU
- Más memoria –> Más coste
- Usar static initizaliers para cargar clases
- Evitar reflection
- Evitar classpath scanning
- Eliminar dependencies no utilizadas
- Usar AWS SDK v2 (más modular)
- Evitar AWS auto-discovery
18. Iván López @ilopmar
Joke-app JVM – Warm request
RequestId: f6f6b28e-6cd6-4818-9fa8-88aabc6e8170
Duration: 542.91 ms
Billed Duration: 600 ms
Memory Size: 512 MB
Max Memory Used: 271 MB
19. Iván López @ilopmar
Joke-app JVM
$ time curl $API_ENDPOINT/jokes/category/nerdy
# Cold start
real 0m9,000s
# Warm
real 0m0,823s
real 0m0,785s
real 0m0,726s
real 0m0,341s
23. Iván López @ilopmar
Joke-app GraalVM – Warm request
RequestId: dff7db10-46b7-4825-a0ad-96abca5066f7
Duration: 463.04 ms
Billed Duration: 500 ms
Memory Size: 512 MB Max
Memory Used: 273 MB
24. Iván López @ilopmar
Joke-app GraalVM
$ time curl $API_ENDPOINT/jokes/category/nerdy
# Cold start
real 0m1,656s
# Warm
real 0m0,383s
real 0m0,460s
real 0m0,419s
real 0m0,261s
26. Iván López @ilopmar
Resumen
- Uso de Java y JVM
- Triggers
- Serverless function vs Application
- Micronaut hace muy sencilla la integración
- GraalVM mejora mucho el cold start