O documento discute o framework Micronaut, construído para microserviços. Ele aborda os problemas encontrados em frameworks baseados em JVM como reflexão lenta e consumo de memória, e como o Micronaut resolve esses problemas sem usar reflexão. O documento também lista alguns casos de uso e empresas que usam o Micronaut.
4. Problemas encontrados em frameworks JVM-Based
4
● API de anotação limitada
● Limpeza de tipos
● Reflection é lenta
● Cache de dados de reflections
● Escaneamento de classes
● Carregamento lento de classes dinâmicas
5. Porque reflection é um problema?
5
● TODOS os dados
inicializados no primeiro
acesso são mantidos em
memória (sim, todo
campo, método e etc)
● Garbage Collector não vai
atuar a menos que a
aplicação esteja com
pouca memória
6. Evite reflection!
6
● Reflection aumenta o consumo
de memória
● O uso de reflection é
relativamente lento
● Difícil de entender e debugar
● A maioria dos frameworks
server-side modernos são
construídos em cima de
reflection
8. Vantagens JVM
8
● Ecosistema robusto e maduro
● Boas IDE's
● Encontra-se desenvolvedores no mercado
● Maturidade do Build System
● Diversidade (IoT, Mobile, Server Side)
● Linguagens (Kotlin, Java, Groovy, Scala)
9. A realidade dos micro serviços
9
● Frameworks baseados em reflection e annotations ficam enormes
● Ainda assim os desenvolvedores gostam da produtividade do modelo
● Dá pra ser mais eficiente?
12. Qual sistema operacional e seus frameworks também evita a
utilização de reflection para não pagar o custo de memória e
performance?
12
● Dica 1: Utiliza compilação AOT (Ahead Of Time) fortemente
● Dica 2: Usa frameworks reflection free como Dagger 2 e Koin para
injeção de dependência
● Dica 3: Tem um mascote verde com anteninhas
16. Breve história
16
● Iniciado há dois anos (2017)
● Feito pelos criadores do Grails (Graeme Rocher e sua turma)
● +10 anos de experiência em construção de frameworks JVM
● Aberto para comunidade em Maio de 2018 :)
17. Micronaut tem
17
● Injeção de dependência (DI)
● Programação Orientada a Aspecto (AOP)
● Gerenciamento de Configuração (Build Types)
● Sem reflections!
18. Soluções
18
Problema Solução
API de anotação limitada Metadados de anotações pré computadas
Limpeza de tipos Interface de Argumento pré computadas
Reflection lenta Sem reflections!
Cache de dados de reflexão Zero caches de dados
Escaneamento de classes Não utiliza
Carregamento lento de classes dinâmicas Não utiliza
20. E mais
20
● Diversas opções para segurança
(OAuth 2.0, Basic Auth, JWT, OpenID e mais)
● Suporta SQL
● Suporta Docker
● Suporta RxJava
● Suporta GRPC
● Suporta GraalVM (uma VM que gera nativo)
● Entre outros e mais por vir 🚀
21. Pode ser usado para:
21
● Micro serviços
● Computação sem servidor (Serverless Applications)
● Aplicações orientadas a mensagem (Kafka/Rabbit)
● Aplicações CLI
● Até aplicativos Android :)
● Tudo começa com fun main(args: Array<String>)
23. Micronaut hoje
23
● versão 1.2.6 já disponível
● 3 mil estrelas no github
● atualizado há 3 horas
● usado em produção e
economizando na conta da AWS
para as empresas