62
Dados e Microservices: Lidando com bancos legados na era de serviços distribuídos Edson Yanaga Director of Developer Experience @yanaga

Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

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

Edson Yanaga Director of Developer Experience @yanaga

Page 2: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Join developers.redhat.com2

Java Champion Microsoft MVP

Page 3: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

http://developers.redhat.com/promotions/migrating-to-microservice-databases

Page 4: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

“Now, every company is a software company” — Forbes

Page 5: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Join developers.redhat.com5

Page 6: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

DevOps & Microservices

Page 7: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Feedback Loop

Page 8: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Batch Size

Page 9: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Join developers.redhat.com9

Janela de Manutenção

Page 10: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Zero Downtime

Page 11: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Join developers.redhat.com11

Blue Green

Deployments

Page 12: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Join developers.redhat.com12

Deployment

Page 13: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Join developers.redhat.com13

DeploymentProxy

Page 14: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Join developers.redhat.com14

Blue

Proxy

Green

Page 15: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Join developers.redhat.com15

Blue

Proxy

Green

Page 16: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Join developers.redhat.com16

Blue

Proxy

Green

Page 17: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Join developers.redhat.com17

Blue

Proxy

Green

Page 18: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Código é fácil, estado é difícil

Page 19: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

E o meu banco de

dados relacional?

Page 20: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Join developers.redhat.com20

Page 21: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Zero Downtime Migrations

Page 22: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Compatibilidade Retroativa e Futura

Page 23: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Baby Steps = O menor Batch Size possível

Page 24: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Muitas linhas = Locks longos

Page 25: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Utilize shards em seus Updates

Page 26: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Join developers.redhat.com

ALTER TABLE customers RENAME COLUMN wrong TO correct;

26

Page 27: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

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

Page 28: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Join developers.redhat.com28

Cenários

Adicionar uma Coluna

Renomear uma Coluna

Alterar o Tipo/Formato de uma Coluna

Remover uma Coluna

Page 29: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

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

Page 30: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

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)

Page 31: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

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)

Page 32: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

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)

Page 33: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

E a minha integridade referencial?

Page 34: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Remova-as e recrie-as depois de finalizadas as migrations

Page 35: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Características de Microservices

https://martinfowler.com/microservices/

Page 36: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

• 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

Page 37: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Extraindo o Banco de Dados do seu Microservice

Page 38: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Join developers.redhat.com38

Um Banco de Dados por Microservice

Page 39: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Join developers.redhat.com39

Mas eu tenho um banco de dados monolítico!

Page 40: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Join developers.redhat.com40

Page 41: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Separar não é fácil, mas como eu integro os dados

depois?

Page 42: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Modelos de Consistência de Dados

Page 43: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Consistência Forte

Consistência Eventual

Page 44: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

CRUD & CQRS

Page 45: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Join developers.redhat.com45

CRUD (Create, Read, Update, Delete)

Page 46: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Join developers.redhat.com46

CQRS (Command Query Responsibility Segregation)

Page 47: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Join developers.redhat.com47

CQRS com data stores separadas

Page 48: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

CQRS & Event Sourcing

Page 49: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

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

Page 50: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Join developers.redhat.com50

Shared Tables

Integração rápida

Consistência forte

Baixa coesão e alto acoplamento

Page 51: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

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

Page 52: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

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

Page 53: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Join developers.redhat.com53

Database Trigger

Depende de suporte do DBMS

Consistência forte

Um banco de dados deve ser alcançável pelo outro

Page 54: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

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

Page 55: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

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

Page 56: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

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

Page 57: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Join developers.redhat.com57

Page 58: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

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

Page 59: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

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

Page 60: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

http://debezium.io

Page 61: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

Registre-se em developers.redhat.com

Feedback é bem vindo!@yanaga

Page 62: Dados e Microservices - QConSP · 2017-06-02 · 31 Join developers.redhat.com Alterar o Tipo/Formato de uma Coluna 1 ADD COLUMN 2 Código lê da coluna antiga e escreve em ambas

plus.google.com/+RedHat

linkedin.com/company/red-hat

youtube.com/user/RedHatVideos

facebook.com/redhatinc

twitter.com/RedHatNews

Obrigado!