SlideShare a Scribd company logo
1 of 55
Download to read offline
Microserviço na vida real
O conceito de Microserviço veio para solucionar alguns dos problemas do
Monólito. Mas nem tudo são flores.
Sobre mim
Tiago Bonatti
Engenheiro de Software na ContaAzul
~10 anos de programação
tiago.bonatti@gmail.com
Sistema
monolítico
O que é
- Sistema grande e robusto
- Verdadeiro faz tudo.
- Muito comum até meados dos anos
2000
- Muitas desenvolvedores passaram
por ele
- Muito código escrito: Dificuldade de
manutenção
Estrutura: Como planejamos
F
I
N
A
N
C
E
I
R
O
F
A
T
U
R
A
M
E
N
T
O
C
O
N
T
Á
B
I
L
E
S
T
O
Q
U
E
APLICAÇÃO MONOLÍTICA
BANCO DE DADOS
Estrutura: O que acaba acontecendo
F
I
N
A
N
C
E
I
R
O
E
S
T
O
Q
U
E
F
A
T
U
R
A
M
E
N
T
O
C
O
N
T
Á
B
I
L
APLICAÇÃO MONOLÍTICA - Fronteiras são ultrapassadas
- Dificuldade de manutenção
- Todo o código num único
lugar
- Mexeu aqui, quebrou ali
Time
Desenvolvimento
Manutenção
Infra
Tempo de build
- Compilação: ~20 minutos
- Testes unitários
- Testes de integração
- Liberação em produção: ~1 hora
- Criar novas máquinas
- Executar o blue/green
Fazendo uma analogia
- Os times enfrentavam filas para
fazer liberação em produção
- Desenvolvedores, POs, e os
clientes aguardavam
- Se alguém atrasar, todos sofrem
- Se alguém quebrar a master,
releases podem ser adiadas
- Não importa se era uma
correção de 3 linhas ou uma
feature de 1000.
Liberações precisaram ser agendadas
Muito tempo de espera
- Uma hora por liberação
- Em média, duas liberações semanais por time
- Oito times na empresa
832 horas / 104 dias úteis
anuais gastos em tempo
de liberação...
Tecnologia
- Muitas tecnologias
- Struts
- RESTs / JAX-RS
- SQL Nativa
- JPQL
- Projetos são necessários para
atualizar algo
- Levam meses
- Nem sempre feito em
tempo hábil
Microserviços
O que é
- Conceito de Arquitetura
- Pequenos serviços
- Tem domínio da informação
- São independentes
- Falha parcial
Estrutura
Contas a Pagar
Emissão de Nota Fiscal
Controle de Estoque
Lançamento Contábil
- Código separado
- Comunicação geralmente feita
via REST
- Contratos bem definidos
- Banco de Dados
Independentes
- Um módulo, vira vários
microserviços
Time: Cultura Ownership
- Composto por
- PO: Product Owner
- Team Leader
- UX: User Experience
- BackEnd
- FrontEnd
- Times pequenos
- Missão clara
Fazendo uma analogia
- Compilação: ~4 minutos
- Testes unitários
- Testes de integração
- Liberação em produção: ~15
minutos
- Criar novas máquinas
- Executar o blue/green
- Um único time responsável
- Liberação constante
- Master quebrada impacta
somente os responsáveis
Liberações Sistema Monolítico x Microserviço
Qual a melhor linguagem usar?
Importante: Deve ser possível refazê-lo
Como podemos
fazer essa
mudança
Decidindo trabalhar com microserviço
#vemmonolito….
Como era o Projeto
Monolito Microserviço
jobs
admin
importer
Passo a passo de como separamos
- Eliminamos a dependência entre
as entidades, uma por uma
- Continuávamos usando os serviços
da Aplicação 1, a diferença é que não
tínhamos mais mapeamento direto
na entidade, agora os JOINs
fazíamos em outras queries.
- Trocamos os serviços para
utilizar REST mesmo estando
dentro do mesmo projeto
- Separamos a Aplicação 2 dentro
do mesmo repositório que a
E 10 meses depois...
O que ganhamos, palavra do PO
Estrutura dos servidores
Imagens Docker
Docker é uma plataforma Open
Source que facilita a criação e
administração de ambientes
isolados.
Microserviço Microserviço
Microserviço Microserviço
Deploy em Produção
APP
Instância
APP
Instância Instância Instância
APP APP
Instância Instância Instância Instância
APP APP APP APP
- Beanstalk da Amazon
- Cada microserviço possuía no
mínimo duas instâncias
- Rolling release
- Redundância
- Escalonamento de máquinas
- Scripts para deploy em
produção
Deploy em Produção: O quem vem a seguir?
Microserviço
Kubernetes: Deploy em Produção
APP
APP
Microserviço
APP
APP
APP
APP
APP
APP
Microserviço Microserviço
INSTÂNCIAINSTÂNCIAINSTÂNCIA
- Gerência aonde por as aplicações em
várias máquinas
- Distribui de forma inteligente as
aplicações
- Otimiza o custo das máquinas
- Possui
- Rolling release
- Health Check
- Comparado ao Beanstalk
- Deploy é mais rápido
- Custo 70% menor em Sandbox
- Custo 20% menor em produção
Service discovery… com variáveis de ambiente
Aprendizados e boas práticas
Como já falava no título, nem tudo são flores.
Programação orientada a falhas
A pergunta não é SE vai cair
o serviço e sim QUANDO
Circuit Breaker
- Comparado a um disjuntor
- Resiliência: Falhar
graciosamente
- Falhar rápido e isoladamente
- Fallback
- Uma camada de proteção em
cada requisição
- Se X% falhar em Y tempo, abre
circuito, após Y tempo tenta
novamente e caso deu certo
volta a fechar
O que estamos usando
Exemplo Hystrix
Mensageria
- Não precisa aguardar o
processamento
- Ajuda a manter os domínios
- Um microserviço não precisa
conhecer outro
E os vários bancos de dados...
- Pentaho Data Integration
- ETLs (Extract, Transform,
Load)
- Limpamos, agrupamos e
armazenamos em tabelas
específicas
- Não é realtime
- De hora em hora ou
minuto e minuto
- Crontab do linux para jobs
- Integramos com outros
serviços
Crie uma Guilda
Gizé: Guilda de Backend Domphysis: Guilda de Frontend
- Melhoramos o tempo para liberação
- De ~1 hora para ~10 minutos
- Ownership
- Liberação constante
- Flexibilidade nas tecnologias
- Falha parcial
- Fronteiras definidas
Concluíndo
Perguntas?
Blog engenharia ContaAzul
https://engineering.contaazul.com/
ContaAzul vagas
https://contaazul.com/carreiras/vagas/

More Related Content

What's hot

Micro serviços com node.js
Micro serviços com node.jsMicro serviços com node.js
Micro serviços com node.jsBruno Trecenti
 
React e reactividade Meetup Facebook Developer Circles
React e reactividade Meetup Facebook Developer CirclesReact e reactividade Meetup Facebook Developer Circles
React e reactividade Meetup Facebook Developer CirclesJosé Barbosa
 
JavaCE Conference 2012: ExtJS 4 + VRaptor
JavaCE Conference 2012: ExtJS 4 + VRaptorJavaCE Conference 2012: ExtJS 4 + VRaptor
JavaCE Conference 2012: ExtJS 4 + VRaptorLoiane Groner
 
Bugs, DVCS e tools
Bugs, DVCS e toolsBugs, DVCS e tools
Bugs, DVCS e toolsPaulo Mattos
 
Turbinando microsserviços em PHP
Turbinando microsserviços em PHPTurbinando microsserviços em PHP
Turbinando microsserviços em PHPFlávio Lisboa
 
Integração contínua com Maven e Jenkins
Integração contínua com Maven e JenkinsIntegração contínua com Maven e Jenkins
Integração contínua com Maven e JenkinsOsmar Petry
 
O que esperar do framework Laminas
O que esperar do framework LaminasO que esperar do framework Laminas
O que esperar do framework LaminasFlávio Lisboa
 
Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHPFlávio Lisboa
 
.NET Conf 2018 - Campinas - Blazor: Utilizando C# em browsers
.NET Conf 2018 - Campinas - Blazor: Utilizando C# em browsers.NET Conf 2018 - Campinas - Blazor: Utilizando C# em browsers
.NET Conf 2018 - Campinas - Blazor: Utilizando C# em browsersGustavo Bellini Bigardi
 
Spring Cloud Contract
Spring Cloud ContractSpring Cloud Contract
Spring Cloud ContractFelipe Adorno
 

What's hot (13)

Micro serviços com node.js
Micro serviços com node.jsMicro serviços com node.js
Micro serviços com node.js
 
React e reactividade Meetup Facebook Developer Circles
React e reactividade Meetup Facebook Developer CirclesReact e reactividade Meetup Facebook Developer Circles
React e reactividade Meetup Facebook Developer Circles
 
CI (Continuos Integrations)
CI (Continuos Integrations)CI (Continuos Integrations)
CI (Continuos Integrations)
 
Roadmap Demoiselle Framework v3
Roadmap Demoiselle Framework v3Roadmap Demoiselle Framework v3
Roadmap Demoiselle Framework v3
 
JavaCE Conference 2012: ExtJS 4 + VRaptor
JavaCE Conference 2012: ExtJS 4 + VRaptorJavaCE Conference 2012: ExtJS 4 + VRaptor
JavaCE Conference 2012: ExtJS 4 + VRaptor
 
Bugs, DVCS e tools
Bugs, DVCS e toolsBugs, DVCS e tools
Bugs, DVCS e tools
 
Turbinando microsserviços em PHP
Turbinando microsserviços em PHPTurbinando microsserviços em PHP
Turbinando microsserviços em PHP
 
Microservices
MicroservicesMicroservices
Microservices
 
Integração contínua com Maven e Jenkins
Integração contínua com Maven e JenkinsIntegração contínua com Maven e Jenkins
Integração contínua com Maven e Jenkins
 
O que esperar do framework Laminas
O que esperar do framework LaminasO que esperar do framework Laminas
O que esperar do framework Laminas
 
Criando microsserviços em PHP
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHP
 
.NET Conf 2018 - Campinas - Blazor: Utilizando C# em browsers
.NET Conf 2018 - Campinas - Blazor: Utilizando C# em browsers.NET Conf 2018 - Campinas - Blazor: Utilizando C# em browsers
.NET Conf 2018 - Campinas - Blazor: Utilizando C# em browsers
 
Spring Cloud Contract
Spring Cloud ContractSpring Cloud Contract
Spring Cloud Contract
 

Similar to Microserviços na vida real

Arquitetura de Microservicos
Arquitetura de MicroservicosArquitetura de Microservicos
Arquitetura de MicroservicosNorberto Enomoto
 
Tdc 2020 gerenciamento de incidente neste novo mundo
Tdc 2020   gerenciamento de incidente neste novo mundoTdc 2020   gerenciamento de incidente neste novo mundo
Tdc 2020 gerenciamento de incidente neste novo mundoFelipe Klerk Signorini
 
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...iMasters
 
Arquitetura de Microserviços - Tecnologia na Prática - Julho/2017
Arquitetura de Microserviços - Tecnologia na Prática - Julho/2017Arquitetura de Microserviços - Tecnologia na Prática - Julho/2017
Arquitetura de Microserviços - Tecnologia na Prática - Julho/2017Renato Groff
 
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azuretdc-globalcode
 
Microserviços - Universidade Metodista - EETI 2016
Microserviços - Universidade Metodista - EETI 2016Microserviços - Universidade Metodista - EETI 2016
Microserviços - Universidade Metodista - EETI 2016Renato Groff
 
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017Renato Groff
 
ASP.NET MVC com jQuery (Retome o controle da sua aplicação web)
ASP.NET MVC com jQuery (Retome o controle da sua aplicação web)ASP.NET MVC com jQuery (Retome o controle da sua aplicação web)
ASP.NET MVC com jQuery (Retome o controle da sua aplicação web)Giovanni Bassi
 
Estruturando um SaaS Multi-tenant no ecossistema AWS
Estruturando um SaaS Multi-tenant no ecossistema AWSEstruturando um SaaS Multi-tenant no ecossistema AWS
Estruturando um SaaS Multi-tenant no ecossistema AWSmatheuscmpm
 
Service Mesh de microserviços com Istio e Envoy
Service Mesh de microserviços com Istio e EnvoyService Mesh de microserviços com Istio e Envoy
Service Mesh de microserviços com Istio e EnvoyVinícius de Paula
 
Controlando o Ciclo de Software e porque você deveria usar o VSTS
Controlando o Ciclo de Software e porque você deveria usar o VSTSControlando o Ciclo de Software e porque você deveria usar o VSTS
Controlando o Ciclo de Software e porque você deveria usar o VSTSRodrigo Kono
 
Single-SPA: Como este framework pode me ajudar na construção de Micro Front-Ends
Single-SPA: Como este framework pode me ajudar na construção de Micro Front-EndsSingle-SPA: Como este framework pode me ajudar na construção de Micro Front-Ends
Single-SPA: Como este framework pode me ajudar na construção de Micro Front-EndsDaiana Cambruzzi Avila
 
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...Rodrigo Branas
 
Microserviços: uma introdução
Microserviços: uma introduçãoMicroserviços: uma introdução
Microserviços: uma introduçãoDaniel Baptista Dias
 
Tecnologia badeada e MKicrofrontEnd e dotnet core
Tecnologia badeada e MKicrofrontEnd e dotnet coreTecnologia badeada e MKicrofrontEnd e dotnet core
Tecnologia badeada e MKicrofrontEnd e dotnet coreAlexandroAlves13
 
Integracao Continua em projetos .NET
Integracao Continua em projetos .NETIntegracao Continua em projetos .NET
Integracao Continua em projetos .NETLuthiano Vasconcelos
 

Similar to Microserviços na vida real (20)

Arquitetura de Microservicos
Arquitetura de MicroservicosArquitetura de Microservicos
Arquitetura de Microservicos
 
Tdc 2020 gerenciamento de incidente neste novo mundo
Tdc 2020   gerenciamento de incidente neste novo mundoTdc 2020   gerenciamento de incidente neste novo mundo
Tdc 2020 gerenciamento de incidente neste novo mundo
 
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
 
Arquitetura de Microserviços - Tecnologia na Prática - Julho/2017
Arquitetura de Microserviços - Tecnologia na Prática - Julho/2017Arquitetura de Microserviços - Tecnologia na Prática - Julho/2017
Arquitetura de Microserviços - Tecnologia na Prática - Julho/2017
 
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
 
Microserviços - Universidade Metodista - EETI 2016
Microserviços - Universidade Metodista - EETI 2016Microserviços - Universidade Metodista - EETI 2016
Microserviços - Universidade Metodista - EETI 2016
 
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
 
ASP.NET MVC com jQuery (Retome o controle da sua aplicação web)
ASP.NET MVC com jQuery (Retome o controle da sua aplicação web)ASP.NET MVC com jQuery (Retome o controle da sua aplicação web)
ASP.NET MVC com jQuery (Retome o controle da sua aplicação web)
 
Estruturando um SaaS Multi-tenant no ecossistema AWS
Estruturando um SaaS Multi-tenant no ecossistema AWSEstruturando um SaaS Multi-tenant no ecossistema AWS
Estruturando um SaaS Multi-tenant no ecossistema AWS
 
DevOps - Operação contínua
DevOps - Operação contínuaDevOps - Operação contínua
DevOps - Operação contínua
 
Service Mesh de microserviços com Istio e Envoy
Service Mesh de microserviços com Istio e EnvoyService Mesh de microserviços com Istio e Envoy
Service Mesh de microserviços com Istio e Envoy
 
Micro serviços ppt
Micro serviços pptMicro serviços ppt
Micro serviços ppt
 
Microservices
MicroservicesMicroservices
Microservices
 
Controlando o Ciclo de Software e porque você deveria usar o VSTS
Controlando o Ciclo de Software e porque você deveria usar o VSTSControlando o Ciclo de Software e porque você deveria usar o VSTS
Controlando o Ciclo de Software e porque você deveria usar o VSTS
 
Single-SPA: Como este framework pode me ajudar na construção de Micro Front-Ends
Single-SPA: Como este framework pode me ajudar na construção de Micro Front-EndsSingle-SPA: Como este framework pode me ajudar na construção de Micro Front-Ends
Single-SPA: Como este framework pode me ajudar na construção de Micro Front-Ends
 
Qualidade e Testes de Software
Qualidade e Testes de SoftwareQualidade e Testes de Software
Qualidade e Testes de Software
 
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
 
Microserviços: uma introdução
Microserviços: uma introduçãoMicroserviços: uma introdução
Microserviços: uma introdução
 
Tecnologia badeada e MKicrofrontEnd e dotnet core
Tecnologia badeada e MKicrofrontEnd e dotnet coreTecnologia badeada e MKicrofrontEnd e dotnet core
Tecnologia badeada e MKicrofrontEnd e dotnet core
 
Integracao Continua em projetos .NET
Integracao Continua em projetos .NETIntegracao Continua em projetos .NET
Integracao Continua em projetos .NET
 

More from Criciúma Dev

Gustavo Pantuza / Automatizando deploys de ACLs no datacenter da Globo.com - ...
Gustavo Pantuza / Automatizando deploys de ACLs no datacenter da Globo.com - ...Gustavo Pantuza / Automatizando deploys de ACLs no datacenter da Globo.com - ...
Gustavo Pantuza / Automatizando deploys de ACLs no datacenter da Globo.com - ...Criciúma Dev
 
Como ser um bom dev FrontEnd em 2017
Como ser um bom dev FrontEnd em 2017Como ser um bom dev FrontEnd em 2017
Como ser um bom dev FrontEnd em 2017Criciúma Dev
 
UX Design para desenvolvedores
UX Design para desenvolvedoresUX Design para desenvolvedores
UX Design para desenvolvedoresCriciúma Dev
 
Escalando aplicações no front-end com ReactJS
Escalando aplicações no front-end com ReactJSEscalando aplicações no front-end com ReactJS
Escalando aplicações no front-end com ReactJSCriciúma Dev
 
Reduzindo complexidade
Reduzindo complexidadeReduzindo complexidade
Reduzindo complexidadeCriciúma Dev
 
Aspectos de segurança em bancos de dados para web
Aspectos de segurança em bancos de dados para webAspectos de segurança em bancos de dados para web
Aspectos de segurança em bancos de dados para webCriciúma Dev
 
Webpack packing it all
Webpack packing it allWebpack packing it all
Webpack packing it allCriciúma Dev
 
DevOps Culture: Como implementar métodos ágeis em infraestrutura como código
DevOps Culture: Como implementar métodos ágeis em infraestrutura como códigoDevOps Culture: Como implementar métodos ágeis em infraestrutura como código
DevOps Culture: Como implementar métodos ágeis em infraestrutura como códigoCriciúma Dev
 
CSS {Grid} Layout: It's evolution baby
CSS {Grid} Layout: It's evolution babyCSS {Grid} Layout: It's evolution baby
CSS {Grid} Layout: It's evolution babyCriciúma Dev
 
Simplificando UX e Códigos para Conteúdos Complexos
Simplificando UX e Códigos para Conteúdos ComplexosSimplificando UX e Códigos para Conteúdos Complexos
Simplificando UX e Códigos para Conteúdos ComplexosCriciúma Dev
 
Metodologias interativas
Metodologias interativasMetodologias interativas
Metodologias interativasCriciúma Dev
 
Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...
Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...
Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...Criciúma Dev
 
Venha para o lado livre da força. O que você pode fazer pelo software livre e...
Venha para o lado livre da força. O que você pode fazer pelo software livre e...Venha para o lado livre da força. O que você pode fazer pelo software livre e...
Venha para o lado livre da força. O que você pode fazer pelo software livre e...Criciúma Dev
 
Começando na área de desenvolvimento mobile. O que preciso saber?
Começando na área de desenvolvimento mobile. O que preciso saber?Começando na área de desenvolvimento mobile. O que preciso saber?
Começando na área de desenvolvimento mobile. O que preciso saber?Criciúma Dev
 

More from Criciúma Dev (15)

Gustavo Pantuza / Automatizando deploys de ACLs no datacenter da Globo.com - ...
Gustavo Pantuza / Automatizando deploys de ACLs no datacenter da Globo.com - ...Gustavo Pantuza / Automatizando deploys de ACLs no datacenter da Globo.com - ...
Gustavo Pantuza / Automatizando deploys de ACLs no datacenter da Globo.com - ...
 
Como ser um bom dev FrontEnd em 2017
Como ser um bom dev FrontEnd em 2017Como ser um bom dev FrontEnd em 2017
Como ser um bom dev FrontEnd em 2017
 
UX Design para desenvolvedores
UX Design para desenvolvedoresUX Design para desenvolvedores
UX Design para desenvolvedores
 
Escalando aplicações no front-end com ReactJS
Escalando aplicações no front-end com ReactJSEscalando aplicações no front-end com ReactJS
Escalando aplicações no front-end com ReactJS
 
Reduzindo complexidade
Reduzindo complexidadeReduzindo complexidade
Reduzindo complexidade
 
Javascript, porque?
Javascript, porque?Javascript, porque?
Javascript, porque?
 
Aspectos de segurança em bancos de dados para web
Aspectos de segurança em bancos de dados para webAspectos de segurança em bancos de dados para web
Aspectos de segurança em bancos de dados para web
 
Webpack packing it all
Webpack packing it allWebpack packing it all
Webpack packing it all
 
DevOps Culture: Como implementar métodos ágeis em infraestrutura como código
DevOps Culture: Como implementar métodos ágeis em infraestrutura como códigoDevOps Culture: Como implementar métodos ágeis em infraestrutura como código
DevOps Culture: Como implementar métodos ágeis em infraestrutura como código
 
CSS {Grid} Layout: It's evolution baby
CSS {Grid} Layout: It's evolution babyCSS {Grid} Layout: It's evolution baby
CSS {Grid} Layout: It's evolution baby
 
Simplificando UX e Códigos para Conteúdos Complexos
Simplificando UX e Códigos para Conteúdos ComplexosSimplificando UX e Códigos para Conteúdos Complexos
Simplificando UX e Códigos para Conteúdos Complexos
 
Metodologias interativas
Metodologias interativasMetodologias interativas
Metodologias interativas
 
Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...
Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...
Desenvolvimento Mobile Multiplataforma: Uma abordagem ágil e de alto desempen...
 
Venha para o lado livre da força. O que você pode fazer pelo software livre e...
Venha para o lado livre da força. O que você pode fazer pelo software livre e...Venha para o lado livre da força. O que você pode fazer pelo software livre e...
Venha para o lado livre da força. O que você pode fazer pelo software livre e...
 
Começando na área de desenvolvimento mobile. O que preciso saber?
Começando na área de desenvolvimento mobile. O que preciso saber?Começando na área de desenvolvimento mobile. O que preciso saber?
Começando na área de desenvolvimento mobile. O que preciso saber?
 

Microserviços na vida real

  • 1. Microserviço na vida real O conceito de Microserviço veio para solucionar alguns dos problemas do Monólito. Mas nem tudo são flores.
  • 2. Sobre mim Tiago Bonatti Engenheiro de Software na ContaAzul ~10 anos de programação tiago.bonatti@gmail.com
  • 4. O que é - Sistema grande e robusto - Verdadeiro faz tudo. - Muito comum até meados dos anos 2000 - Muitas desenvolvedores passaram por ele - Muito código escrito: Dificuldade de manutenção
  • 6. Estrutura: O que acaba acontecendo F I N A N C E I R O E S T O Q U E F A T U R A M E N T O C O N T Á B I L APLICAÇÃO MONOLÍTICA - Fronteiras são ultrapassadas - Dificuldade de manutenção - Todo o código num único lugar - Mexeu aqui, quebrou ali
  • 8. Tempo de build - Compilação: ~20 minutos - Testes unitários - Testes de integração - Liberação em produção: ~1 hora - Criar novas máquinas - Executar o blue/green
  • 9. Fazendo uma analogia - Os times enfrentavam filas para fazer liberação em produção - Desenvolvedores, POs, e os clientes aguardavam - Se alguém atrasar, todos sofrem - Se alguém quebrar a master, releases podem ser adiadas - Não importa se era uma correção de 3 linhas ou uma feature de 1000.
  • 11. Muito tempo de espera - Uma hora por liberação - Em média, duas liberações semanais por time - Oito times na empresa 832 horas / 104 dias úteis anuais gastos em tempo de liberação...
  • 12. Tecnologia - Muitas tecnologias - Struts - RESTs / JAX-RS - SQL Nativa - JPQL - Projetos são necessários para atualizar algo - Levam meses - Nem sempre feito em tempo hábil
  • 14. O que é - Conceito de Arquitetura - Pequenos serviços - Tem domínio da informação - São independentes - Falha parcial
  • 15. Estrutura Contas a Pagar Emissão de Nota Fiscal Controle de Estoque Lançamento Contábil - Código separado - Comunicação geralmente feita via REST - Contratos bem definidos - Banco de Dados Independentes - Um módulo, vira vários microserviços
  • 16.
  • 17. Time: Cultura Ownership - Composto por - PO: Product Owner - Team Leader - UX: User Experience - BackEnd - FrontEnd - Times pequenos - Missão clara
  • 18.
  • 19. Fazendo uma analogia - Compilação: ~4 minutos - Testes unitários - Testes de integração - Liberação em produção: ~15 minutos - Criar novas máquinas - Executar o blue/green - Um único time responsável - Liberação constante - Master quebrada impacta somente os responsáveis
  • 21.
  • 22. Qual a melhor linguagem usar?
  • 23.
  • 24.
  • 25.
  • 26. Importante: Deve ser possível refazê-lo
  • 28. Decidindo trabalhar com microserviço
  • 30.
  • 31. Como era o Projeto Monolito Microserviço jobs admin importer
  • 32. Passo a passo de como separamos - Eliminamos a dependência entre as entidades, uma por uma - Continuávamos usando os serviços da Aplicação 1, a diferença é que não tínhamos mais mapeamento direto na entidade, agora os JOINs fazíamos em outras queries. - Trocamos os serviços para utilizar REST mesmo estando dentro do mesmo projeto - Separamos a Aplicação 2 dentro do mesmo repositório que a
  • 33. E 10 meses depois...
  • 34.
  • 35. O que ganhamos, palavra do PO
  • 37. Imagens Docker Docker é uma plataforma Open Source que facilita a criação e administração de ambientes isolados.
  • 38. Microserviço Microserviço Microserviço Microserviço Deploy em Produção APP Instância APP Instância Instância Instância APP APP Instância Instância Instância Instância APP APP APP APP - Beanstalk da Amazon - Cada microserviço possuía no mínimo duas instâncias - Rolling release - Redundância - Escalonamento de máquinas - Scripts para deploy em produção
  • 39. Deploy em Produção: O quem vem a seguir?
  • 40.
  • 41. Microserviço Kubernetes: Deploy em Produção APP APP Microserviço APP APP APP APP APP APP Microserviço Microserviço INSTÂNCIAINSTÂNCIAINSTÂNCIA - Gerência aonde por as aplicações em várias máquinas - Distribui de forma inteligente as aplicações - Otimiza o custo das máquinas - Possui - Rolling release - Health Check - Comparado ao Beanstalk - Deploy é mais rápido - Custo 70% menor em Sandbox - Custo 20% menor em produção
  • 42. Service discovery… com variáveis de ambiente
  • 43. Aprendizados e boas práticas Como já falava no título, nem tudo são flores.
  • 44.
  • 45.
  • 46. Programação orientada a falhas A pergunta não é SE vai cair o serviço e sim QUANDO
  • 47. Circuit Breaker - Comparado a um disjuntor - Resiliência: Falhar graciosamente - Falhar rápido e isoladamente - Fallback - Uma camada de proteção em cada requisição - Se X% falhar em Y tempo, abre circuito, após Y tempo tenta novamente e caso deu certo volta a fechar
  • 48. O que estamos usando
  • 50. Mensageria - Não precisa aguardar o processamento - Ajuda a manter os domínios - Um microserviço não precisa conhecer outro
  • 51.
  • 52. E os vários bancos de dados... - Pentaho Data Integration - ETLs (Extract, Transform, Load) - Limpamos, agrupamos e armazenamos em tabelas específicas - Não é realtime - De hora em hora ou minuto e minuto - Crontab do linux para jobs - Integramos com outros serviços
  • 53. Crie uma Guilda Gizé: Guilda de Backend Domphysis: Guilda de Frontend
  • 54. - Melhoramos o tempo para liberação - De ~1 hora para ~10 minutos - Ownership - Liberação constante - Flexibilidade nas tecnologias - Falha parcial - Fronteiras definidas Concluíndo

Editor's Notes

  1. Geralmente eram separados por módulos Continuam funcionalidades como Financeiro / Estoque / Faturamento
  2. Coisas do financeiro são acessadas pelo faturamento Facilmente é esquecido algo desse tipo, gerando retrabalho e bugs
  3. Desenvolvimento: Novas features Manutenção: Cuida do legado e bugs. Muitas vezes falta desafios Infra: Dá suporte aos dois times
  4. Geralmente temos 8 espaços por dia para liberação Pode atrasar a sprint por causa de agenda Essa agenda é respeitada desde a correção de um Bug de 3 linhas a uma feature de 300 linhas
  5. Ou seja, you build it, you run it Você desenvolve, você executa
  6. Não usar um martelo no parafuso Podemos experimentar várias linguagens.
  7. A mais performática
  8. A mais robusta
  9. O pau para toda obra
  10. Dilminha para Temerzinho AB Go em Java Homologar stacks
  11. Pelas vantagens, decidimos usar microserviço Agilidade na liberação Tecnologicamente atualizado Ownership
  12. Escolhemos uma parte e quebramos ela
  13. Tinhamos duas aplicações que queriamos separar A aplicação 1 utilizava a aplicação 2 O projeto atual: JAVA EE Maven Hibernate Postgres Um único banco de dados
  14. O projeto gerou alguns stress: Estimativa errada do tempo para separação Concorrência com produto
  15. E fizemos tudo isso com o carro andando.
  16. Reduzimos o risco nas liberações Ganhamos a médio / longo prazo
  17. Primeiro temos que definir o que não é Docker. Docker não é um sistema de virtualização tradicional. Enquanto em um ambiente de virtualização tradicional nós temos um S.O. completo e isolado, dentro do Docker nós temos recursos isolados que utilizando bibliotecas de kernel em comum (entre host e container), isso é possível pois o Docker utiliza como backend o nosso conhecido LXC.
  18. Para o monolito tínhamos scripts prontos para fazer Rolling release ou Blue / Green Beanstalk possui Rolling release Escalar máquinas Cada projeto possui seu script de deploy em prod Estendem um script padrão
  19. Desenvolvido pela Google
  20. Orquestrador de Containers
  21. Usamos variáveis de ambiente para chamar configurar o endereço de outros microserviços Estamos começando a ter muitos microserviços e começa a ficar complicado controla-los Estamos estudando para utilizar o Eureka da Netflix
  22. Estava rodando OK Todos contentes Até que um dia o microserviço começou a ficar lento Atenção: Nem tudo é alegria Enquanto o homem planeja, Deus ri Enquanto o Programador codifica, a aplicação cai
  23. O monolito possuía uma chamada para o microserviço no Dashboard
  24. Não deixar uma chamada externa derrubar sua aplicação
  25. Desenvolvido pela Netflix e é open source
  26. Thread Pool: Enfileira as requisições e descarta caso seja muitas
  27. Exemplo do Track
  28. Outro aprendizado foi fazer requisições parelelas Requisições paralelas
  29. Usamos muitas métricas, assim como qualquer startup CSV Pentaho Data Integration Criamos ETLs (Extract, Transform, Load) Limpamos, agrupamos armazenamos em tabelas específicas Tiramos as métricas em cima deles Não é realtime, tem um delay (Streamming) jobs de hora em hora ou minuto e minuto Crontab para jobs Integramos serviços como Github / SalesForce / Hubspot
  30. O que a ContaAzul está usando? (Faz sentido?) Expertise nossa é o que vale a pena (Velocidade do time)