O documento discute o uso de Azure Functions com Java, abordando como lidar com desafios de desempenho e memória ao processar grandes volumes de dados. É explicado como dividir arquivos em lotes menores, usar bibliotecas eficientes e evitar frameworks que consomem muita memória podem ajudar a resolver esses problemas. Também são apresentadas vantagens como fácil integração entre serviços da Azure e fluxos de trabalho simples de desenvolvimento e streaming.
Azure Functions e Java: Do Desenvolvimento a Produção
1. Azure Functions e Java:
Do Desenvolvimento a Produção
Prof. Thomás da Costa
http://thomasdacosta.com.br
2. http://thomasdacosta.com.brProf. Thomás da Costa
Azure Functions e Java: Do Desenvolvimento a Produção
Thomás da Costa
• +22 anos de experiência na área
• +17 anos de experiência com Java
• 4 anos de docência no Ensino Superior
• Arquitetura e desenvolvimento de aplicações em
Cloud com Microsoft Azure
• Desenvolvimento de aplicações com Big Data
3. http://thomasdacosta.com.brProf. Thomás da Costa
Azure Functions e Java: Do Desenvolvimento a Produção
O que são Azure Functions
• Executar pequenos trechos de código
• Conhecido como Function As Service
• Efetuar Trigger de vários recursos da Azure como:
• Blob
• Queue
• Tables
6. http://thomasdacosta.com.brProf. Thomás da Costa
Azure Functions e Java: Do Desenvolvimento a Produção
Objetivo
• Sair do básico. (HTTP Trigger)
• Problemas reais em produção
• Volume de dados relativamente grande
• Balancear performance e custo
• Ambiente de desenvolvimento local
• Tudo com Java
8. http://thomasdacosta.com.brProf. Thomás da Costa
Azure Functions e Java: Do Desenvolvimento a Produção
•Data processing: Azure Functions can be used
for processing incoming data in batches. They can
help in processing data in multiple formats, such as
XML, CSV, JSON, and TXT. They can also run
conversion, enrichment, cleaning, and filtering
algorithms. In fact, multiple functions can be used,
each doing either conversion or enrichment,
cleaning or filtering. Azure Functions can also be
used to incorporate advanced cognitive services,
such as optical character recognition (OCR),
computer vision, and image manipulation and
conversion.
https://azure.microsoft.com/en-ca/resources/azure-for-architects/
9. http://thomasdacosta.com.brProf. Thomás da Costa
Azure Functions e Java: Do Desenvolvimento a Produção
Vamos detalhar alguns cenários para importação
do arquivo
Arquitetura
11. http://thomasdacosta.com.brProf. Thomás da Costa
Azure Functions e Java: Do Desenvolvimento a Produção
Desenvolvimento
• Azure Storage Emulator
• Azure Function Java Library
• Maven Archetype
• Debug
• Não precisa ter conta na Azure
https://medium.com/@thomsdacosta/azure-e-java-montando-um-ambiente-de-
desenvolvimento-local-825f833f0594
12. http://thomasdacosta.com.brProf. Thomás da Costa
Azure Functions e Java: Do Desenvolvimento a Produção
Maven Assembly
• Gera um arquivo ZIP com o JAR do seu projeto
• Facilita o processo de deploy na stack de Devops
• Zip Deploy através do Kudu para ambiente de testes
• API Rest do Kudu ou via CLI da Azure
• Integração simples com Jenkins
• Utilização de slots para deploy
• Utilizar sempre variáveis de ambiente para facilitar o deploy
13. http://thomasdacosta.com.brProf. Thomás da Costa
Azure Functions e Java: Do Desenvolvimento a Produção
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-
plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>zip</id>
<baseDirectory>/</baseDirectory>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>target/azure-functions/sample-function</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
</assembly>
14. http://thomasdacosta.com.brProf. Thomás da Costa
Azure Functions e Java: Do Desenvolvimento a Produção
Application Insights
• Integração nativa com Azure Functions
• Logs são exibidos sem necessidade de configuração
• Facilidade para as equipes de monitoria
• Live Metrics Stream
• Padronização nos Logs das aplicações
15. http://thomasdacosta.com.brProf. Thomás da Costa
Azure Functions e Java: Do Desenvolvimento a Produção
Application Insights
public void run(
@BlobTrigger(name = "content",
path = "container/{name}",
dataType = "string") String content,
@BindingName("name") String fileName,
final ExecutionContext context) {
context.getLogger().info("Hello World");
}
17. http://thomasdacosta.com.brProf. Thomás da Costa
Azure Functions e Java: Do Desenvolvimento a Produção
Problema 1
OutOfMemoryError
• Arquivos de 100.000 de registros
• Aprox. 100 arquivos
• Aprox. 10.000.000 de registros
• Plano Isolado
18. http://thomasdacosta.com.brProf. Thomás da Costa
Azure Functions e Java: Do Desenvolvimento a Produção
Problema 2
• Plano de Consumo:
OutOfMemoryError
FunctionTimeoutException
e/ou
19. http://thomasdacosta.com.brProf. Thomás da Costa
Azure Functions e Java: Do Desenvolvimento a Produção
Diferenças dos Planos
• Plano de Consumo:
• 1 Core, 1.75 GB e no máximo 10 minutos de
execução
• Plano de Serviço:
• Requisitos de acordo com o plano e no máximo
30 minutos de execução
20. http://thomasdacosta.com.brProf. Thomás da Costa
Azure Functions e Java: Do Desenvolvimento a Produção
Soluções
• Analise o código fonte sempre!!!
• Evite frameworks que utilizem muito Java Reflection
• Valide POJO’s com ‘if’ ao invés de frameworks como
Bean Validation
• Trabalhe com arquivos pequenos para paralelizar
• Verifique a performance da fonte de dados destino
• Nunca ultrapasse o tempo da Azure Function
21. http://thomasdacosta.com.brProf. Thomás da Costa
Azure Functions e Java: Do Desenvolvimento a Produção
Recursos do Java
• Usar ao máximo as bibliotecas nativas do Java
• Streams possui uma alta performance para leitura de
grandes lista com pouca utilização de memória
• Trechos simples de código faz a diferença em uma Azure
Function
22. http://thomasdacosta.com.brProf. Thomás da Costa
Azure Functions e Java: Do Desenvolvimento a Produção
try (ByteArrayInputStream byteArrayInputStream =
new ByteArrayInputStream(content);
InputStreamReader inputStreamReader =
new InputStreamReader(byteArrayInputStream);
BufferedReader bufferedReader =
new BufferedReader(inputStreamReader)) {
this.scores = bufferedReader.lines().map(m -> {
Object x = new Object();
// Sua lógica no arquivo
return x;
}).collect(Collectors.toList());
} catch (Exception ex) {
throw new CustomException(ex.getMessage(), ex);
}
23. http://thomasdacosta.com.brProf. Thomás da Costa
Azure Functions e Java: Do Desenvolvimento a Produção
Bibliotecas Performáticas
• Escolher sempre a biblioteca com a melhor performance:
• Apache Commons CSV
• FastCSV
• OpenCSV
• FlatPack CSV
• Univocity CSV Em determinadas situações o parser
de grandes arquivos estava abaixo de
1 segundo ou em poucos segundos.
24. http://thomasdacosta.com.brProf. Thomás da Costa
Azure Functions e Java: Do Desenvolvimento a Produção
Maven Archetype
• Evita repetição de código
• Código básico para as operações comuns
• Implementar somente o que é especifico
• Repositório de Azure Functions corporativo
28. http://thomasdacosta.com.brProf. Thomás da Costa
Azure Functions e Java: Do Desenvolvimento a Produção
Homework
Logic App com Azure Functions Stream Analitycs Poison Queues
29. http://thomasdacosta.com.brProf. Thomás da Costa
Azure Functions e Java: Do Desenvolvimento a Produção
Vantagens da Azure Function
• Utilize agora no seu projeto!!!
• Facilidade para trabalhar com eventos da Azure
• Muito fácil de desenvolver até mesmo com Java
• Integração entre serviços
• Fluxo de trabalho e de streaming de forma
simples
30. http://thomasdacosta.com.brProf. Thomás da Costa
Azure Functions e Java: Do Desenvolvimento a Produção
Desvantagens da Azure Function
• Dificuldade para utilização de frameworks como
Spring
• Não substituir sua aplicações Web ou API
• Integração com outros recursos fora do escopo
das Azure Functions implica em maior
complexidade de desenvolvimento
32. http://thomasdacosta.com.brProf. Thomás da Costa
Azure Functions e Java: Do Desenvolvimento a Produção
Obrigado
https://www.linkedin.com/in/thomasdacosta
https://medium.com/@thomsdacosta
https://thomasdacosta.com.br