46
Resiliência em microsserviços porque precisamos falar sobre transações distribuídas @humbertostreb

Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

  • Upload
    others

  • View
    32

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

Resiliênciaem microsserviços

porque precisamos falar sobretransações distribuídas

@humbertostreb

Page 2: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

- arquiteto de software na Unicred

- apaixonado por sistemas distribuídos

- goleiro bem meia boca ;(

twitter.com/humbertostrebgithub.com/hstreb

Humberto Streb

Page 3: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

cenário dos anos 90/2000

Page 4: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

- estabilidade de regras de negócio (maturidade do sistema financeiro)

- baixa demanda por inovação (concorrentes estabilizados)

- baixo volume de requisições (casa de centenas/milhares)

- poucas funcionalidades expostas fora da agência (ATM)

cenário dos anos 90/2000

Page 5: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

tecnologia nos anos 90/2000

Page 6: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

- soluções mais generalistas, geralmente cliente/servidor

- uma aplicação conectando em uma base de dados

- regras de negócio em banco de dados (triggers / procedures)

- transações locais

- poucas tecnologias envolvidas

- poucos servidores e com grande capacidade de processamento

tecnologias nos anos 90/2000

Page 7: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

cenário dos anos 2010

Page 8: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

- mais funcionalidades expostas fora da agência (mobile, open banking)

- aumento da concorrência (transformação digital)

- necessidade de entregar valor mais rápido

- regras de negócio mais dinâmicas (sistema financeiro em evolução)

- utilização de soluções de terceiros (avaliação de riscos, bureaus)

- aumento do volume de requisições (casa de milhões)

cenário dos anos 2010

Page 9: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

tecnologia nos anos 2010

Page 10: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

- soluções baseadas em serviços, cada vez mais especializadas

- integrações entre soluções PaaS/SaaS

- regras de negócio na camada de aplicação (eventos)

- transações distribuídas

- mais tecnologias (Java/NodeJS/Angular/Python ...)

- mais servidores e e grande utilização de virtualização

tecnologia nos anos 2010

Page 11: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

+ serviços

+ ambientes

+ tecnologias

= novas exigências técnicas

em resumo

Page 12: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

https://twitter.com/davecheney/status/1015746597139841024

Page 13: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

exemplo

Page 14: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

falhas e suas consequências

Page 15: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

- entenda que a rede e outros componentes de software vão falhar

- obrigatório entender o comportamento quando há uma falha

- como fica o estado da aplicação se o processo cair, em qualquer

momento

falhas e suas consequências

Page 16: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

problema: falha em uma requisição

Page 17: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

problema: lentidão / timeout

Page 18: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

retentativa

Page 19: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

solução: retentativa

Page 20: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

https://twitter.com/mathiasverraes/status/632260618599403520

Page 21: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

problema: duplicação de registros

Page 22: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

idempotência

Page 23: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

uma operação pode ser aplicada mais de uma vez,

e o valor do resultado não se altera após a aplicação inicial.

idempotência

Page 24: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -
Page 25: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

problema: lentidão do sistema

Page 26: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

jornada de uma requisição

Page 27: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

- montar uma narrativa do ciclo de vida uma requisição

- mapear as transformações dos dados

- deixar explícito os possíveis caminhos percorridos

jornada de uma requisição

Page 28: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

save point

Page 29: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

- criar save points para deixar o estado sempre válido

- analogia de um jogo, reinício é do último save point

save point

Page 30: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

paralelismo e concorrência

Page 31: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

- paralelismo na aplicação (threads)

- múltiplas instâncias

- tarefas agendadas

paralelismo e concorrência

Page 32: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

solução: save points

Page 33: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

solução: save points

Page 34: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

técnicas

Page 35: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

design da solução

Page 36: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

- aumentou a complexidade, não é mais um único sistema

- são mais times envolvidos

- temos dificuldade para lembrar de muita coisa de uma vez só

- precisamos expor as ideias em diagramas, fluxogramas, docs

design da solução

Page 37: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

desfazer / compensação

Page 38: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

- desfazer uma ação

- pode ser em uma transação com o banco de dados

- pode-se gerar uma nova requisição para desfazer

desfazer / compensação

Page 39: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

timeout

Page 40: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

- calcule o tempo necessário para uma requisição ser processada

- todos devem saber o tempo máximo que uma requisição pode demorar

- leve em consideração o impacto de re-tentativas

timeout

Page 41: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

identificadores de transação

Page 42: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

- são necessários para diferenciar as transações

- usados para ações de desfazer

- auxiliam na depuração de erros

identificador de transação

Page 43: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

- design da solução, pensando em uma jornada da requisição

- usar save points, para recuperar das falhas

- usar idempotência para habilitar retry e rollbacks

- usar timeouts e deixar explícito para os clientes

- adicionar identificador de transação

conclusão

Page 44: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

mais

- Two-phase commit (2pc) (wikipédia)

- Saga pattern (microservices.io)

Page 45: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

referências

https://samnewman.io/talks/principles-of-microservices/

https://martinfowler.com/ieeeSoftware/coffeeShop.pdf

https://hackernoon.com/idempotency-apis-and-retries-34b161f64cb4

https://www.slideshare.net/toff63/microservices-architecture-nirvana-or-nightmare

https://developers.redhat.com/blog/2018/10/01/patterns-for-distributed-transactions-within-a-microservices-architecture/

Page 46: Resiliência em microsserviços porque precisamos falar ...€¦ · - soluções mais generalistas, geralmente cliente/servidor - uma aplicação conectando em uma base de dados -

muito obrigado!

@humbertostreb