Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Dados e Microservices: Lidando com bancos legados na era de serviços distribuídos
Edson Yanaga Director of Developer Experience @yanaga
http://developers.redhat.com/promotions/migrating-to-microservice-databases
“Now, every company is a software company” — Forbes
Join developers.redhat.com5
DevOps & Microservices
Feedback Loop
Batch Size
Zero Downtime
Código é fácil, estado é difícil
E o meu banco de
dados relacional?
Join developers.redhat.com20
Zero Downtime Migrations
Compatibilidade Retroativa e Futura
Baby Steps = O menor Batch Size possível
Muitas linhas = Locks longos
Utilize shards em seus Updates
Join developers.redhat.com
ALTER TABLE customers RENAME COLUMN wrong TO correct;
26
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
Join developers.redhat.com28
Cenários
Adicionar uma Coluna
Renomear uma Coluna
Alterar o Tipo/Formato de uma Coluna
Remover uma Coluna
Join developers.redhat.com29
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
Join developers.redhat.com30
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)
Join developers.redhat.com31
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)
Join developers.redhat.com32
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)
E a minha integridade referencial?
Remova-as e recrie-as depois de finalizadas as migrations
Características de Microservices
https://martinfowler.com/microservices/
• 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
Extraindo o Banco de Dados do seu Microservice
Join developers.redhat.com39
Mas eu tenho um banco de dados monolítico!
Join developers.redhat.com40
Separar não é fácil, mas como eu integro os dados
depois?
Modelos de Consistência de Dados
Consistência Forte
Consistência Eventual
CRUD & CQRS
Join developers.redhat.com46
CQRS (Command Query Responsibility Segregation)
CQRS & Event Sourcing
Join developers.redhat.com49
CenáriosShared TablesDatabase ViewDatabase Materialized ViewMirror Table using TriggerMirror Table using Transactional CodeMirror Table using ETLMirror Table using Data VirtualizationEvent SourcingChange Data Capture
Join developers.redhat.com50
Shared Tables
Integração rápida
Consistência forte
Baixa coesão e alto acoplamento
Join developers.redhat.com51
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
Join developers.redhat.com52
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
Join developers.redhat.com53
Database Trigger
Depende de suporte do DBMS
Consistência forte
Um banco de dados deve ser alcançável pelo outro
Join developers.redhat.com54
Transactional Code
Qualquer código: Stored Procedures ou Transações DistribuídasConsistência forte
Possíveis problemas de coesão/acoplamento
Possíveis problemas de desempenho
Atualizável dependendo de como foi implementado
Join developers.redhat.com55
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
Join developers.redhat.com56
Virtualização de Dados
Acesso de “tempo real”
Consistência forte
Pode agregar de múltiplos datasources
Atualizável dependendo da solução
Join developers.redhat.com57
Join developers.redhat.com58
Event Sourcing
Estado da informação é um fluxo de eventos
Facilita auditoria
Consistência eventual
Normalmente combinado com um Message Bus
Alta escalabilidade
Join developers.redhat.com59
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
http://debezium.io
plus.google.com/+RedHat
linkedin.com/company/red-hat
youtube.com/user/RedHatVideos
facebook.com/redhatinc
twitter.com/RedHatNews
Obrigado!