Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Padrões de microsserviços: o que são? para que ...

Padrões de microsserviços: o que são? para que servem? e porque você deveria conhecer ?

Tweet

More Decks by Kamila de fatima santos oliveira

Other Decks in Programming

Transcript

  1. O QUE SÃO? PARA QUE SERVEM? E PORQUE VOCÊ DEVERIA

    CONHECER ? Padrões de microsserviços Kamila Santos
  2. Kamila Santos Tech Lead na Zup Innovation, microsoft mvp, co-

    autora dos livros Jornada Java e Jornada Microsserviços, co-organizadora da womakerscode, devsjavagirl e perifacode, microsoft mvp e criadora de conteudo no youtube e instagram Kamila code
  3. @kamila_code O QUE SÃO MICROSSERVIÇOS? São uma abordagem de arquitetura

    na qual o software é composto de pequenos serviços independentes que se comunicam entre si e são organizados de acordo com seus domínios de negócio.
  4. @kamila_code CARACTERÍSTICAS DOS MICROSSERVIÇOS Autônomos - Cada serviço pode ser

    desenvolvido, escalado e implantado sem interferir em outros serviços.
  5. @kamila_code CARACTERÍSTICAS DOS MICROSSERVIÇOS Autônomos - Não é necessário compartilhar

    nenhum código e a comunicação acontece por meio de chamadas as APIs (síncronas) ou de forma assíncrona.
  6. @kamila_code CARACTERÍSTICAS DOS MICROSSERVIÇOS Especialistas - Cada serviço é desenhado

    para resolver um problema específico, se começar a ser necessário ter outras responsabilidades, é indicado que se crie um novo serviço.
  7. @kamila_code CARACTERÍSTICAS DOS MICROSSERVIÇOS Resilientes - A independência do serviço

    aumenta a resiliência a falhas na arquitetura , se um deles tiver algum problema , só afetará alguma parte do fluxo.
  8. @kamila_code BOAS PRÁTICAS As boas práticas apresentadas aqui são as

    mesmas apresentadas no livro Microsserviços prontos para produção
  9. @kamila_code ESTABILIDADE Um microsserviço considerado estável é aquele que durante

    o desenvolvimento, deploy, inclusão de novas tecnologias e desativação de outros serviços não resulta em instabilidade do ecossistemas de microsserviços que ele faz parte.
  10. @kamila_code UM MICROSSERVIÇO PODE SER CONSIDERADO ESTÁVEL E CONFIÁVEL QUANDO

    Tem um ciclo de desenvolvimento padronizado (para se proteger de más práticas de desenvolvimento)
  11. @kamila_code UM MICROSSERVIÇO PODE SER CONSIDERADO ESTÁVEL E CONFIÁVEL QUANDO

    O código é submetido a testes de unidade, integração, e2e, regras de coverage (o tanto que um teste é coberto por testes) etc.
  12. @kamila_code UM MICROSSERVIÇO PODE SER CONSIDERADO ESTÁVEL E CONFIÁVEL QUANDO

    Possui seus clientes (serviços que o consomem) conhecidos.
  13. @kamila_code TOLERÂNCIA A FALHAS Nunca deve existir uma parte do

    ecossistema de microsserviços que uma falha pode parar todo o fluxo.
  14. @kamila_code TOLERÂNCIA A FALHAS Também não deve haver qualquer parte

    individual dentro da arquitetura de um microsserviço que possa derrubar o microsserviço todo quando ele falhar.
  15. @kamila_code TOLERÂNCIA A FALHAS Microsserviços devem suportar falhas internas (do

    próprio microsserviço) e falhas externas (que acontecem em outras camadas e serviços externos).
  16. @kamila_code UM MICROSSERVIÇO PODE SER CONSIDERADO TOLERANTE A FALHAS QUANDO

    Ele é testado por meio de testes de carga e teste de caos.
  17. @kamila_code UM MICROSSERVIÇO PODE SER CONSIDERADO TOLERANTE A FALHAS QUANDO

    Existe um procedimento padrão para tratar incidentes dentro das equipes.
  18. @kamila_code UM MICROSSERVIÇO PODE SER CONSIDERADO COM UM BOM MONITORAMENTO

    QUANDO Seu logging reflete com precisão os estados passados do microsserviço
  19. @kamila_code UM MICROSSERVIÇO PODE SER CONSIDERADO COM UM BOM MONITORAMENTO

    QUANDO Seus dashboards são fáceis de interpretar e possuem todas as métricas principais.
  20. @kamila_code UM MICROSSERVIÇO PODE SER CONSIDERADO COM UM BOM MONITORAMENTO

    QUANDO Os logs não contêm informações sensíveis e só informações relevantes.
  21. @kamila_code DOCUMENTAÇÃO As pessoas que entram na equipe desse serviço

    conseguem ter acesso a esse histórico de informações, sabe como preparar o ambiente, desenho da arquitetura, dentre outras informações essenciais para que possa iniciar o desenvolvimento? Uma equipe que quiser saber desse microsserviço vai conseguir entender o papel dele somente com a documentação?
  22. @kamila_code UM MICROSSERVIÇO PODE SER CONSIDERADO BEM DOCUMENTADO QUANDO A

    DOCUMENTAÇÃO Contém uma descrição da responsabilidade daquele microsserviço É atualizada frequentemente
  23. @kamila_code UM MICROSSERVIÇO PODE SER CONSIDERADO BEM DOCUMENTADO QUANDO A

    DOCUMENTAÇÃO Contém um diagrama de arquitetura Contatos das pessoas responsáveis Guia de bordo de desenvolvimento Collections Faq
  24. @kamila_code UM MICROSSERVIÇO PODE SER CONSIDERADO BEM DOCUMENTADO QUANDO A

    DOCUMENTAÇÃO Qual o papel dele/em que parte esse microsserviço entra dentro daquele ecossistema. Todas as pessoas da equipe devem saber do conteúdo e pessoas de fora devem compreender.
  25. @kamila_code ARQUITETURA MONOLÍTICA arquitetar um aplicativo como uma única unidade

    implantável, resolve casos em que você precisa desenvolver mais rápido, implantar mais rápido , dimensionar de modo mais simples e que a aplicação não tenha tantas responsabilidades diferentes para lidar
  26. @kamila_code ARQUITETURA DE MICROSSERVIÇOS arquitetar um aplicativo como uma coleção

    de serviços fracamente acoplados, resolve o problema de quando temos várias responsabilidades na mesma aplicação, você precisa escalar algumas partes separadas, precisa usar tecnologias diferentes para problemas diferentes, quer separar as responsabilidades da aplicação.
  27. @kamila_code DECOMPOSE BY BUSINESS CAPABILITY Você tem uma aplicação que

    acabou crescendo demais e precisa separa-la em partes menores, pontos a serem considerados:
  28. @kamila_code DECOMPOSE BY BUSINESS CAPABILITY - A arquitetura deve ser

    estável - Serviços devem ser coesos - Serviços devem ser fracamente acoplados - Os serviços devem ser testáveis
  29. @kamila_code PADRÕES DE REFATORAÇÃO Com o tempo as aplicações vão

    crescendo , o código vai ficando mais confuso e ainda vamos evoluindo tecnicamente e pensamos em soluções e implementações melhores do que as anteriores. Para isso, também existem os padrões de refatorações de microsserviços
  30. @kamila_code STRANGLER APPLICATION Problema: Como podemos migrar um legado monolito

    para vários microsserviços? Solução: desenvolva uma nova aplicação em volta da anterior para "estrangular o monolito", uns serviços implementem as antigas funcionalidades e façam novas funcionalidades também
  31. @kamila_code CAMADA DE ANTICORRUPÇÃO Problema: Precisamos evitar que o modelo

    de domínio de um monolito polua o modelo de domínio do novo serviço Solução: Defina uma camada de anticorrupção que se traduz entre os dois modelos de domínio
  32. @kamila_code PADRÕES DE GERENCIAMENTO DE DADOS Em sistemas distribuidas é

    muito importante garantir a consistência dos dados, que estejam com os valores corretos e que nenhum dado se perca entre os sitemas.
  33. @kamila_code SAGA Problema: Como implementar transações que abrangem serviços ?

    Solução: Implementar cada transação que abrange vários serviços (saga -> sequência de transações locais).
  34. @kamila_code SAGA Cada transação local atualizaroa o banco de dados

    e publicaria uma mensagem ou evento para acionar a próxima transação local na saga. Caso uma transação local falhe a saga vai executar uma série de transações para desfazer as alterações feitas pelas transações locais anteriores.
  35. @kamila_code SAGA - COREOGRAFIA decisões distribuídas , cada transação publica

    eventos que acionam transações locais em outros serviços.
  36. @kamila_code API COMPOSITION Problema: como implementar consultas em uma arquitetura

    de microsserviços? Solução: implemente uma consulta definindo um API consumer, que invoca os serviços que possuem os dados e executa uma junção na memória dos resultados.
  37. CQRS Problema: como implementar uma consulta que recupera dados de

    vários serviços em uma arquitetura de microsserviços? Solução: defina um banco de dados de somente leitura, que é uma replica do "oficial" somente para consulta, a aplicação manterá essa replica atualizada por meio de eventos
  38. @kamila_code APIS EXTERNAS Problema: como os clientes de uma aplicação

    baseados em microsserviços acessem os serviços individuais. Solução: implemente um API Gateway que seja o único ponto de entrada para todos os clientes
  39. @kamila_code OBSERVABILIDADE Depois que nosso microsserviço esta no ar, é

    muito importante conseguir entender o que está acontecendo com ele , quando acontece e onde acontece
  40. AGREGAÇÃO DE LOGS Problema: Como entender o comportamento de um

    aplicativo e solucionar problemas? Solução: Usar uma solução de log centralizado de cada instância do serviço, as pessoas usuárias podem pesquisar , analisar e configurar alertas ex: cloud watch, datadog, new relic...
  41. @kamila_code DISTRIBUTED TRACING Problema: Como entender o comportamento de um

    aplicativo e solucionar problemas? Solução: Usar serviços como o sleuth que atribuem um id unico para cada requisição e passa esse id em todos os logs dessa requisição
  42. @kamila_code REMOTE PROCEDURE INVOCATION (RPI) Problema: como os microsserviços podem

    se comunicar de forma síncrona Solução: realize a comunicação utilizando REST ou GRPC
  43. @kamila_code MENSAGERIA Problema: como os microsserviços podem se comunicar de

    forma assíncrona Solução: utilize serviços como Apache Kafka, Rabit Mq ou SQS