Slide 1

Slide 1 text

UM OVERVIEW SOBRE OS PRINCIPAIS PATTERNS E QUAIS PROBLEMAS ELES RESOLVEM Microsserviços: Kamila Santos

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

@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.

Slide 4

Slide 4 text

@kamila_code CARACTERÍSTICAS DOS MICROSSERVIÇOS Autônomos - Cada serviço pode ser desenvolvido, escalado e implantado sem interferir em outros serviços.

Slide 5

Slide 5 text

@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.

Slide 6

Slide 6 text

@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.

Slide 7

Slide 7 text

@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.

Slide 8

Slide 8 text

@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

Slide 9

Slide 9 text

https://microservices.io/pattern s/monolithic.html

Slide 10

Slide 10 text

@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.

Slide 11

Slide 11 text

https://microservices.io/pattern s/microservices.html

Slide 12

Slide 12 text

@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:

Slide 13

Slide 13 text

@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

Slide 14

Slide 14 text

https://microservices.io/pattern s/decomposition/decompose- by-business-capability.html

Slide 15

Slide 15 text

@kamila_code DECOMPOSE BY SUBDOMAIN Problema bem semelhante ao anterior e também com solução bem semelhante também

Slide 16

Slide 16 text

https://microservices.io/pattern s/decomposition/decompose- by-subdomain.html

Slide 17

Slide 17 text

@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

Slide 18

Slide 18 text

@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

Slide 19

Slide 19 text

https://microservices.io/pattern s/refactoring/strangler- application.html

Slide 20

Slide 20 text

@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

Slide 21

Slide 21 text

\https://docs.microsoft.com/pt- br/azure/architecture/patterns/ anti-corruption-layer

Slide 22

Slide 22 text

@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.

Slide 23

Slide 23 text

@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).

Slide 24

Slide 24 text

@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.

Slide 25

Slide 25 text

\https://docs.microsoft.com/pt- br/azure/architecture/patterns/ anti-corruption-layer

Slide 26

Slide 26 text

@kamila_code SAGA - COREOGRAFIA decisões distribuídas , cada transação publica eventos que acionam transações locais em outros serviços.

Slide 27

Slide 27 text

\https://docs.microsoft.com/pt- br/azure/architecture/patterns/ anti-corruption-layer

Slide 28

Slide 28 text

@kamila_code SAGA - ORQUESTRAÇÃO um objeto orquestrador informa as aplicações participantes quais transações locais executar.

Slide 29

Slide 29 text

https://microservices.io/pattern s/data/saga.html

Slide 30

Slide 30 text

@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.

Slide 31

Slide 31 text

https://microservices.io/pattern s/data/api-composition.html

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

https://microservices.io/pattern s/data/api-composition.html

Slide 34

Slide 34 text

@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

Slide 35

Slide 35 text

https://microservices.io/pattern s/data/api-composition.html

Slide 36

Slide 36 text

https://microservices.io/pattern s/apigateway.html

Slide 37

Slide 37 text

@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

Slide 38

Slide 38 text

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...

Slide 39

Slide 39 text

@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

Slide 40

Slide 40 text

@kamila_code COMUNICAÇÃO Nenhum microsserviço existe sozinho, ele precisa se comunicar com outras aplicações e serviços

Slide 41

Slide 41 text

@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

Slide 42

Slide 42 text

@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

Slide 43

Slide 43 text

OBRIGADA :) https://www.linkedin.com/in/kamila-santos-oliveira/ https://www.youtube.com/Kamilacode https://www.instagram.com/kamila_code/ https://beacons.page/kamila_code