Arquitetura de Micro
Serviços
Fernando Ike
Fernando Ike
// fernando.ike@gmail.com
// linkedin.com/in/fernandoike
// twitter.com/fernandoike
// www.10deploys.com
// https://events.docker.com/sao-paulo/
Conway’s law
“Organizações que desenvolvem sistemas tendem a produzir sistemas que são
cópias da comunicação das mesmas.”
Arquitetura Monolítica
“É um único programa que faz praticamente tudo, mostra a interface do usuário,
acessa os dados, processa as compras dos clientes, imprime notas fiscais, lança
mísseis e qualquer outra coisa que a aplicação precise fazer.”
Rod Stephens - Beginning Software Engineering
Benefícios de um monolito
● Facilidade para desenvolver
○ Alcança rapidamente o protótipo ou produto final
● Fácil de atualizar versão
○ basta atualizar o diretório específico da aplicação e reiniciar o serviço
● Fácil de escalar
○ basta subir novas instâncias com o mesmo artefato atrás de balanceador de carga
● Padronização
○ Uniformidade da stack/linguagem de programação no desenvolvimento
Mais comum usar o Monolito
● Uma equipe precisa desenvolver rapidamente uma aplicação
● Os novos membros da equipe devem-se tornar rapidamente produtivos
● A aplicação deve ser fácil de entender e modificar
● Testar as tecnologias emergentes (Frameworks, linguagem de programação,
etc. )
Desvantagens do Monolito
● Quando com uma base de código muito grande são difíceis de manter
● Intimida pessoas que entram na equipe a desenvolver rapidamente
● O medo em mexer no código diminui a velocidade de entrega e também a
qualidade do código
● Continuous Deployment, escalabilidade e confiabilidade tornam-se cada vez
mais complexas e demoradas
Influências
● DevOps
● Cloud
● Continuous Delivery
● Immutable Infrastructure
● Domain-Driven Design
E o que é arquitetura de Micro Serviços?
Uma arquitetura orientada a serviço compostas de elementos levemente
acoplados que possuem contextos delimitados
Adrian Crockcroft
E o que é arquitetura de Micro Serviços?
Micro Serviços são serviços pequenos e autônomos que trabalham em conjunto
Sam Newman
E o que é arquitetura de Micro Serviços?
“É uma forma de desenvolver uma aplicação como uma suíte de pequenos
serviços, cada qual rodando em seu próprio processo (...). Esses serviços são
construídos ao redor de capacidades de negócio e são implantados
independentemente com processos automatizados. (...) Podem ser escritos em
diferentes linguagens e usar tecnologias diferentes de armazenamento de dados”
James Lewis e Martin Fowler
Vantagens
● Arquitetura por serviço mais simples
● “Padronização da comunicação (HTTP Rest, Message Broker)
● Serviços “independentes”
● Tende ser mais fácil aplicar Continuous Delivery
Vantagens
● Aplicação de testes unitários e sistêmicos mais facilmente
● Liberdade de escolher a tecnologia
● Times autocontidos
● Diminuição de potenciais pontos de falhas
Desvantagens
● Exige uma boa maturidade em automação, rastreamento de bugs e
monitoramento
● Aumento da coordenação e comunicação entre equipes para evolução do que
existe ou novos serviços
● Torna mais difícil testes de integração
Desvantagens
● Exige uma boa maturidade em automação, rastreamento de bugs e
monitoramento
● Aumento da coordenação e comunicação entre equipes para evolução do que
existe ou novos serviços
● Torna mais difícil testes de integração
● Mais difícil contratação de pessoas. Mais habilidade são requeridas
Premissas
● Centralização dos logs
● “Instâncias” (VMs e containers) stateless
● Distributed Tracing
● Circuit Breaking
● Health Check
Premissas
● Monitoramento “das regras de negócio”
● Use um serviço de “mensageria” para comunicação entre os Micro Serviços
● Cada Micro Serviço tem sua própria instância de banco de dados
● Múltiplas versões da aplicação rodando ao mesmo tempo
● Uso de um gerenciador de segredos “Secrets”
Orquestrado Coreografado
As Equipes
● Organização das equipes capazes de desenvolver um Micro Serviço/Sistema
de forma autônoma
● Desenvolvimento baseado no Trunk/Master
● Autonomia
● Independência
E o legado?
Quando não usar
● Aplicações CRUD simples
● Quando a complexidade e custo de Micro serviços > Monolito
Obrigado
Fernando Ike - fike@nyalix.com

Arquitetura de Micro Serviços

  • 1.
  • 2.
    Fernando Ike // fernando.ike@gmail.com //linkedin.com/in/fernandoike // twitter.com/fernandoike // www.10deploys.com // https://events.docker.com/sao-paulo/
  • 3.
    Conway’s law “Organizações quedesenvolvem sistemas tendem a produzir sistemas que são cópias da comunicação das mesmas.”
  • 6.
    Arquitetura Monolítica “É umúnico programa que faz praticamente tudo, mostra a interface do usuário, acessa os dados, processa as compras dos clientes, imprime notas fiscais, lança mísseis e qualquer outra coisa que a aplicação precise fazer.” Rod Stephens - Beginning Software Engineering
  • 8.
    Benefícios de ummonolito ● Facilidade para desenvolver ○ Alcança rapidamente o protótipo ou produto final ● Fácil de atualizar versão ○ basta atualizar o diretório específico da aplicação e reiniciar o serviço ● Fácil de escalar ○ basta subir novas instâncias com o mesmo artefato atrás de balanceador de carga ● Padronização ○ Uniformidade da stack/linguagem de programação no desenvolvimento
  • 9.
    Mais comum usaro Monolito ● Uma equipe precisa desenvolver rapidamente uma aplicação ● Os novos membros da equipe devem-se tornar rapidamente produtivos ● A aplicação deve ser fácil de entender e modificar ● Testar as tecnologias emergentes (Frameworks, linguagem de programação, etc. )
  • 10.
    Desvantagens do Monolito ●Quando com uma base de código muito grande são difíceis de manter ● Intimida pessoas que entram na equipe a desenvolver rapidamente ● O medo em mexer no código diminui a velocidade de entrega e também a qualidade do código ● Continuous Deployment, escalabilidade e confiabilidade tornam-se cada vez mais complexas e demoradas
  • 12.
    Influências ● DevOps ● Cloud ●Continuous Delivery ● Immutable Infrastructure ● Domain-Driven Design
  • 13.
    E o queé arquitetura de Micro Serviços? Uma arquitetura orientada a serviço compostas de elementos levemente acoplados que possuem contextos delimitados Adrian Crockcroft
  • 14.
    E o queé arquitetura de Micro Serviços? Micro Serviços são serviços pequenos e autônomos que trabalham em conjunto Sam Newman
  • 15.
    E o queé arquitetura de Micro Serviços? “É uma forma de desenvolver uma aplicação como uma suíte de pequenos serviços, cada qual rodando em seu próprio processo (...). Esses serviços são construídos ao redor de capacidades de negócio e são implantados independentemente com processos automatizados. (...) Podem ser escritos em diferentes linguagens e usar tecnologias diferentes de armazenamento de dados” James Lewis e Martin Fowler
  • 17.
    Vantagens ● Arquitetura porserviço mais simples ● “Padronização da comunicação (HTTP Rest, Message Broker) ● Serviços “independentes” ● Tende ser mais fácil aplicar Continuous Delivery
  • 18.
    Vantagens ● Aplicação detestes unitários e sistêmicos mais facilmente ● Liberdade de escolher a tecnologia ● Times autocontidos ● Diminuição de potenciais pontos de falhas
  • 19.
    Desvantagens ● Exige umaboa maturidade em automação, rastreamento de bugs e monitoramento ● Aumento da coordenação e comunicação entre equipes para evolução do que existe ou novos serviços ● Torna mais difícil testes de integração
  • 20.
    Desvantagens ● Exige umaboa maturidade em automação, rastreamento de bugs e monitoramento ● Aumento da coordenação e comunicação entre equipes para evolução do que existe ou novos serviços ● Torna mais difícil testes de integração ● Mais difícil contratação de pessoas. Mais habilidade são requeridas
  • 22.
    Premissas ● Centralização doslogs ● “Instâncias” (VMs e containers) stateless ● Distributed Tracing ● Circuit Breaking ● Health Check
  • 23.
    Premissas ● Monitoramento “dasregras de negócio” ● Use um serviço de “mensageria” para comunicação entre os Micro Serviços ● Cada Micro Serviço tem sua própria instância de banco de dados ● Múltiplas versões da aplicação rodando ao mesmo tempo ● Uso de um gerenciador de segredos “Secrets”
  • 24.
  • 26.
    As Equipes ● Organizaçãodas equipes capazes de desenvolver um Micro Serviço/Sistema de forma autônoma ● Desenvolvimento baseado no Trunk/Master ● Autonomia ● Independência
  • 27.
  • 28.
    Quando não usar ●Aplicações CRUD simples ● Quando a complexidade e custo de Micro serviços > Monolito
  • 29.
    Obrigado Fernando Ike -fike@nyalix.com