O documento discute a arquitetura Elixir Umbrella para desenvolver aplicações desacopladas sem a complexidade de microserviços. A estrutura permite dividir uma aplicação em múltiplos projetos/apps independentes, com cada um focado em uma responsabilidade e comunicando-se através de mensagens. Dois projetos testados tiveram suas estruturas implementadas em uma semana cada, mostrando a viabilidade da abordagem.
18. 1) RD -
Sistema
Interno
● Cobrança dos clientes
● Equipe enxuta
● Várias
responsabilidades
● Massaroca
● Como separar
responsabilidades sem
criar várias APPs?
19.
20. 2) Side project
● Equipe de 1 só (tech guy)
● Responsabilidades bem
definidas
● Começar algo do 0 já
quebrado mas sem o
overhead de uma
arquitetura de
microservices?
22. O que é
preciso para
criar um
serviço?
● banco de dados
● banco de dados em
memória (redis)
● background jobs
● mensageria
● monitoramento de
performance e recursos da
aplicação
● logs
● monitoramento de erros
● codeclimate
● testes automatizados
● deploy automatizado
● domínio
● dns
30. Elixir
● Linguagem de
programação dinâmica e
funcional
● Desenvolvida pelo José
Valim
● Escalabilidade, tolerância a
falhas e alta concorrência
● Erlang VM
● Erlang - sintaxe mais
agradável
● Tornar o programador
mais produtivo
31.
32. Elixir
Umbrella
● “Guarda-chuva” de apps
● Tipo de projeto - não é uma
aplicação
● Código em um único lugar
● Apps podem ser
executadas de maneira
separada ou conjunta
● Cada app possui a sua
conexão com o banco de
dados
48. ● Testes rodam independentes
● Cada APP tem sua árvore de
processos
● Posso startar em conjunto
● Performance - cada processo
pode rodar em diferentes
núcleos
Processos
distintos
49. Clusterização● Não preciso desfazer a
estrutura do Umbrella
● Posso continuar tendo as
mesmas vantagens no CI e
em ambiente de dev
50. ● Cada APP é independente
● Declaração explícita de
dependências
● Não é obrigatória a
dependência de outras
aplicações
Não exige
aplicação host
52. Resultado dos experimentos
● Processo de deploy continua exatamente igual como no
monolito
● Testes automatizados não só são fáceis de rodar como no
monolito mas mais rápidos pois rodam paralelamente por
padrão
● Código completamente desacoplado exigindo explicitamente a
declaração de dependência entre apps
● Comunicação entre as apps utilizando o protocolo do erlang,
não é preciso fazer requests HTTP ou envio de eventos
● Performance surpreendente
54. 1) RD
● Identificamos uma
responsabilidade
● Estrutura levou 7 dias para
ser colocada no ar
● Projeto ainda está em
andamento
● Estamos preparados para o
desenvolvimento de novas
apps
2) Side project
● Aplicação com 5 contextos
● Estrutura levou 7 dias para
ser colocada no ar
● 3 meses para ser
desenvolvida - já contando
com a curva de aprendizado
● Descontinuado
Resultados dos projetos