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

Gerenciando transações em uma arquitetura com m...

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

Gerenciando transações em uma arquitetura com microserviços

Avatar for Leonel

Leonel

July 17, 2018
Tweet

Other Decks in Programming

Transcript

  1. 2 + LEONEL MORAIS • ~ 10 anos de experiência

    em engenharia de software • Java, PHP, Ruby, Python, NodeJS, GoLang, Angular • Incentivador da cultura DevOps
  2. 4 MONOLITO • Todos os módulos que compõem a aplicação

    compartilham um mesmo banco de dados • Várias tabelas podem ser envolvidas em uma transação • Banco de dados se torna um único ponto de falha +
  3. 5 COM O TEMPO O MONOLITO... • Fica difícil de

    manter • Difícil de lançar novas features • Torna processos de deployment e releases lentos e dolorosos +
  4. 7 MICROSERVIÇOS • Arquitetura autosuficiente e isolada • Evolução e

    processo de deployment mais rápido • Facilita a adoção de novas tecnologias • Possível escalar de forma independente +
  5. 8 MICROSERVIÇOS • Interface bem definida e persistência independente •

    Não deve compartilhar dados com bancos de dados de outros serviços • Integrações devem ser feitas via API, não via banco +
  6. 12 COMO MANTER A CONSISTÊNCIA DE DADOS? • Quando movemos

    para uma arquitetura de microserviços as coisas ficam um pouco mais complicadas • Necessitamos compartilhar dados entre diferentes serviços • Consumir dados de tabelas dos bancos de dados de serviços • E também fazer transações, várias operações entre múltiplos serviços que no final geram uma única unidade atômica. +
  7. 13 TRANSAÇÕES DISTRIBUÍDAS? NÃO! • Coordenador de transações se torna

    ponto único de falha • Performance ruim, locks! • Processamento síncrono • Nenhum serviço de Cloud implementa transações distribuídas pois é difícil alcançar escalabilidade e confiabilidade +
  8. 15 SAGA • Primeiro paper publicado em 1987 • https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf

    • Implementa um workflow de transações, cada transação acontece no escopo de cada serviço localmente • Para cada transação existe uma operação de compensação para caso de falha • Ao final de cada transação é publicado um evento que é consumido pela transação seguinte. +
  9. 20 SAGA - Eventos • O serviço executa uma transação

    local e publica um evento referente. • O evento pode ser escutado por um ou mais serviços que podem executar transações e publicar novos eventos. • O workflow é finalizado quando o último serviço executa uma transação e não publica nenhum evento +
  10. 23 CONCLUSÃO • SAGA para manter a consistência entre os

    serviços • 2PC não é recomendado • Modelo de implementação se torna simples com eventos • Nenhum acoplamento entre os participantes (serviços) +