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

[DEV TRENDS ] Microsserviços: UM OVERVIEW SOBRE OS PRINCIPAIS PATTERNS E QUAIS PROBLEMAS ELES RESOLVEM

[DEV TRENDS ] Microsserviços: UM OVERVIEW SOBRE OS PRINCIPAIS PATTERNS E QUAIS PROBLEMAS ELES RESOLVEM

palestra apresentada no evento https://agiletrendsbr.com/dev-trends-2022/

More Decks by Kamila de fatima santos oliveira

Other Decks in Programming

Transcript

  1. UM OVERVIEW SOBRE OS PRINCIPAIS PATTERNS E QUAIS PROBLEMAS ELES

    RESOLVEM Microsserviços: Kamila Santos
  2. Kamila Santos Tech Lead na Zup Innovation, 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 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
  9. @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.
  10. @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:
  11. @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
  12. @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
  13. @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
  14. @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
  15. @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.
  16. @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).
  17. @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.
  18. @kamila_code SAGA - COREOGRAFIA decisões distribuídas , cada transação publica

    eventos que acionam transações locais em outros serviços.
  19. @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.
  20. 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
  21. @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
  22. @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
  23. 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...
  24. @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
  25. @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
  26. @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