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

Dados e Microservices: lidando com bancos legados na era de serviços distribuídos

Dados e Microservices: lidando com bancos legados na era de serviços distribuídos

Sem dúvida a característica que causa maior perplexidade em Microservices é o "um banco de dados por Microservice". Entretanto a maioria das equipes não tem o privilégio de iniciar algo do zero: você sempre tem um banco de dados relacional legado para manter.

Como eu escolho qual parte do meu banco de dados devo separar? Como eu faço migrations com zero downtime? Como eu integro esses dados depois? O que é CQRS? Como uso? Participe dessa palestra para ter as respostas para muitas dessas perguntas!

Edson Yanaga

April 25, 2017
Tweet

More Decks by Edson Yanaga

Other Decks in Technology

Transcript

  1. Dados e Microservices: Lidando com bancos legados na era de

    serviços distribuídos Edson Yanaga Director of Developer Experience @yanaga
  2. Join developers.redhat.com ALTER TABLE customers ADD COLUMN correct VARCHAR(20); UPDATE

    customers SET correct = wrong WHERE id BETWEEN 1 AND 100; UPDATE customers SET correct = wrong WHERE id BETWEEN 101 AND 200; ALTER TABLE customers DELETE COLUMN wrong; 27
  3. Join developers.redhat.com 28 Cenários Adicionar uma Coluna Renomear uma Coluna

    Alterar o Tipo/Formato de uma Coluna Remover uma Coluna
  4. Join developers.redhat.com 29 Adicionar uma coluna 1 ADD COLUMN 2

    Código calcula o valor de leitura e escreve na nova coluna 3 Atualize os dados utilizando shards 4 Código lê e escreve na nova coluna
  5. Join developers.redhat.com 30 Renomear uma Coluna 1 ADD COLUMN 2

    Código lê da coluna antiga e escreve em ambas 3 Copiar os dados usando shards 4 Código lê da nova coluna e escreve em ambas 5 Código lê e escreva na nova coluna 6 Remover a coluna (mais tarde)
  6. Join developers.redhat.com 31 Alterar o Tipo/Formato de uma Coluna 1

    ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas 3 Copiar os dados usando shards 4 Código lê da nova coluna e escreve em ambas 5 Código lê e escreva na nova coluna 6 Remover a coluna (mais tarde)
  7. Join developers.redhat.com 32 Remover uma Coluna 1 NUNCA REMOVA UMA

    COLUNA 2 Pare de ler a coluna mas continue escrevendo nela 3 Código para de escrever na coluna 4 Remova a coluna (mais tarde)
  8. • Componentization via Services • Organized around Business Capabilities •

    Products not Projects • Smart endpoints and dumb pipes • Decentralized Governance • Decentralized Data Management • Infrastructure Automation • Design for failure • Evolutionary Design
  9. Join developers.redhat.com 49 Cenários Shared Tables Database View Database Materialized

    View Mirror Table using Trigger Mirror Table using Transactional Code Mirror Table using ETL Mirror Table using Data Virtualization Event Sourcing Change Data Capture
  10. Join developers.redhat.com 51 Database View Alternativa mais fácil de implementar

    O mais difundido suporte entre DBMSs Possíveis problemas de desempenho Consistência forte Um banco de dados deve ser alcançável pelo outro Atualizável dependendo do DBMS
  11. Join developers.redhat.com 52 Database Materialized View Melhor desempenho Consistência forte

    ou eventual Um banco de dados deve ser alcançável pelo outro Atualizável dependendo do DBMS
  12. Join developers.redhat.com 53 Database Trigger Depende de suporte do DBMS

    Consistência forte Um banco de dados deve ser alcançável pelo outro
  13. Join developers.redhat.com 54 Transactional Code Qualquer código: Stored Procedures ou

    Transações Distribuídas Consistência forte Possíveis problemas de coesão/acoplamento Possíveis problemas de desempenho Atualizável dependendo de como foi implementado
  14. Join developers.redhat.com 55 Ferramentas de ETL Muitas ferramentas disponíveis Depende

    de um gatilho externo (geralmente timer) Pode agregar de múltiplos datasources Consistência eventual Integração somente leitura
  15. Join developers.redhat.com 56 Virtualização de Dados Acesso de “tempo real”

    Consistência forte Pode agregar de múltiplos datasources Atualizável dependendo da solução
  16. Join developers.redhat.com 58 Event Sourcing Estado da informação é um

    fluxo de eventos Facilita auditoria Consistência eventual Normalmente combinado com um Message Bus Alta escalabilidade
  17. Join developers.redhat.com 59 Change Data Capture O datasource de leitura

    é atualizado através de um fluxo de eventos Consistência eventual Normalmente combinado com um Message Bus Alta escalabilidade