na creditas architecture event driven - qconsp · event driven architecture na creditas...

191
@camposmilaa Event Driven Architecture na Creditas @camposmilaa

Upload: others

Post on 29-May-2020

50 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Event Driven Architecturena Creditas

@camposmilaa

Page 2: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Camila CamposCreditas

Rails Girls São PauloWomen Dev Summit

@camposmilaa

Page 3: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Plataforma online

Empréstimo com garantia

Juros baixos pra você <3

creditas.com.br

vagas.creditas.com.br

@CreditasBR

Page 4: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Event Driven Architecturena Creditas

@camposmilaa

Page 5: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Orientação a Objetos

Page 6: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Orientação a Objetos

Alan Kay

Page 7: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

"OOP to me means only messaging, local retention and

protection and hiding of state-process, and extreme late-binding of all things."

Alan Kay

Page 8: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

"The big idea is messaging [...] The key in making great and

growable systems is much more to design how its modules

communicate rather than what their internal properties and

behaviors should be"

Alan Kay

Page 9: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

ANALISE DE RISCO- data

- resultado

IMÓVEL- endereço

- valorCLIENTE- cpf

- nome- data de nascimento

Page 10: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 11: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Orientação a Objetosé sobre

Troca de Mensagens

Page 12: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Orientação a Objetosé sobre

Comunicação

Page 13: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Orientação a Objetosé sobre

Comunicação

Page 14: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Remetente(emissor)

Comunicação

Page 15: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Remetente(emissor)

Destinatário(receptor)

Comunicação

Page 16: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Remetente(emissor)

Destinatário(receptor)Mensagem

Comunicação

Page 17: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Remetente(emissor)

Destinatário(receptor)Mensagem

Comunicação

CódigoContexto

Canal

Page 18: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Domain Driven Design(DDD)

Page 19: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 20: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

cliente

cliente

Linguagem Ubíqua

Page 21: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Bounded Context

Page 22: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Creditas + DDD

Page 23: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 24: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 25: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 26: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 27: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 28: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 29: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Entender e modelara realidade

Page 30: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 31: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 32: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 33: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Invasão de contextos

Page 34: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Invasão de contextosOnboarding de devs

Page 35: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Invasão de contextosOnboarding de devs

Deploy lento

Page 36: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Invasão de contextosOnboarding de devs

Deploy lentoTudo ou nada

Page 37: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Invasão de contextosOnboarding de devs

Deploy lentoTudo ou nada

Right tool for the job

Page 38: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Invasão de contextosOnboarding de devs

Deploy lentoTudo ou nada

Right tool for the jobEscalabilidade

Page 39: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Micro-services! .

Page 40: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 41: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 42: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Isolamento real

Page 43: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Isolamento realServiços menores

Page 44: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Isolamento realServiços menores

Deploy menor

Page 45: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Isolamento realServiços menores

Deploy menor, mas mais complexo

Page 46: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Isolamento realServiços menores

Deploy menor, mas mais complexoRight tool for the job

Page 47: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Isolamento realServiços menores

Deploy menor, mas mais complexoRight tool for the job

Escalabilidade

Page 48: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 49: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Comunicação entre sistemas

Page 50: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 51: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

A B

Remote Procedure Invocation (RPC)

Page 52: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Simplicidade

Page 53: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

SimplicidadeGeralmente síncrona

Page 54: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

SimplicidadeGeralmente síncrona

Encapsulamento

Page 55: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

SimplicidadeGeralmente síncrona

EncapsulamentoAcoplamento

Page 56: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

SimplicidadeGeralmente síncrona

EncapsulamentoAcoplamentoPerformance

Page 57: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

SimplicidadeGeralmente síncrona

EncapsulamentoAcoplamentoPerformance

Disponibilidade

Page 58: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

A B

Remote Procedure Invocation (RPC)

Page 59: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Mensageria

Page 60: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

A B

Mensageria

Mes

sage

bu

s

Page 61: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Assíncrona

Page 62: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

AssíncronaDesacoplamento

Page 63: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

AssíncronaDesacoplamentoNão bloqueante

Page 64: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

A B

Mensageria

Mes

sage

bu

s

Page 65: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

AssíncronaDesacoplamentoNão bloqueante

Realidade

Page 66: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Remetente(emissor)

Destinatário(receptor)Mensagem

Código

Comunicação

Contexto

Canal

Page 67: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Remetente(emissor)

Destinatário(receptor)Mensagem

Comunicação entre sistemas

ContratoContexto

Canal

Page 68: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Nem tudo são flores!

Page 69: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Complexidade

Page 70: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

ComplexidadeRequest-Response

Page 71: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

ComplexidadeRequest-Response

Tratamento de erros

Page 72: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

ComplexidadeRequest-Response

Tratamento de errosSistema para mensageria

Page 73: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Teorema CAP

Escolha dois

Tolerância a falhas

DisponibilidadeConsistência

Page 74: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Mensageria

A B

Mes

sage

bu

s

Page 75: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 76: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Tipos de mensagem

Page 77: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 78: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Comandos

Page 79: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Comandos

Documentos

Page 80: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Comandos

Documentos

Eventos

Page 81: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Eventos são fatos que expressam o passado

Page 82: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

A vida é expressada por eventos

Page 83: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Como cê tá?

Page 84: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

BEM ou MAL

Page 85: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

BEM ou MAL

Page 86: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 87: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 88: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

1.2.3.4.5.

Page 89: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Solicitei um empréstimo1.2.3.4.5.

Page 90: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Solicitei um empréstimoPreenchi o cadastro

1.2.3.4.5.

Page 91: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Solicitei um empréstimoPreenchi o cadastro

Coloquei a casa como garantia

1.2.3.4.5.

Page 92: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Solicitei um empréstimoPreenchi o cadastro

Coloquei a casa como garantiaMeu crédito foi aprovado

1.2.3.4.5.

Page 93: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Solicitei um empréstimoPreenchi o cadastro

Coloquei a casa como garantiaMeu crédito foi aprovado

O empréstimo foi concedido

1.2.3.4.5.

Page 94: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Event Driven Architecture(EDA)

Page 95: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Martin Fowler

1.2.

3.4.

Page 96: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Event Notification

Martin Fowler

1.2.

3.4.

Page 97: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Event Notification

Solicitações Priorização

Crédito Solicitado

Page 98: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Event Notification

Solicitações Priorização

Crédito Solicitado

Quais dados?

Page 99: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Event NotificationEvent-carried State

Transfer

Martin Fowler

1.2.

3.4.

Page 100: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Event-carried State Notification

Solicitações Notificações

Crédito Solicitado

+ dados

Page 101: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Event NotificationEvent-carried State

TransferEvent Sourcing

Martin Fowler

1.2.

3.4.

Page 102: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Event Sourcing diz que todo estado é transiente e que

apenas fatos são persistidos

Page 103: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

ANALISE DE RISCO- data

- resultado

IMÓVEL- endereço

- valor

CLIENTE- cpf

- nome

Page 104: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Modelo tradicional

Clienteid cpf nome

1 11122233344 Pedro Salomão

2 55566677788 Maria Rita

3 98765432100 Sandy & Junior

Page 105: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Modelo tradicional

Clienteid cpf nome

1 11122233344 Pedro Salomão

2 55566677788 Maria Rita

3 98765432100 Sandy

Page 106: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Event Sourcing

Event Store

Cliente Cadastrado {nome: Sandy & Junior, cpf: 12345678900}

Solicitação criada {valor: 50.000, motivo: Reforma}

Garantia Adicionada {tipo: Casa, valor: 200.000}

Nome Alterado {nome: Sandy}

Page 107: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Cliente preenche cadastro

Solicitação criada

Page 108: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Cliente preenche cadastro

Cliente adiciona

documento

Doc adicionadoSolicitação criada

Page 109: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Cliente preenche cadastro

Cliente adiciona

documento

Doc removidoDoc adicionado

Solicitação criada

Cliente remove

documento

Page 110: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Cliente preenche cadastro

Cliente adiciona

documento

Cliente adiciona

documento

Doc adicionadoDoc removido

Doc adicionadoSolicitação criada

Cliente remove

documento

Page 111: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Cliente preenche cadastro

Cliente adiciona

documento

Cliente cadastra garantia

Cliente adiciona

documento

Garantia adicionadaDoc adicionadoDoc removido

Doc adicionadoSolicitação criada

Cliente remove

documento

Page 112: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Cliente preenche cadastro

Cliente adiciona

documento

Cliente cadastra garantia

Cliente adiciona

documento

Creditas aprova o crédito

Crédito aprovadoGarantia adicionada

Doc adicionadoDoc removido

Doc adicionadoSolicitação criada

Cliente remove

documento

Page 113: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Crédito aprovadoGarantia adicionada

Doc adicionadoDoc removido

Doc adicionadoSolicitação criada

Query

Page 114: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Crédito aprovadoGarantia adicionada

Doc adicionadoDoc removido

Doc adicionadoSolicitação criada

Query

Page 115: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Event NotificationEvent-carried State

TransferEvent Sourcing

CQRS

Martin Fowler

1.2.

3.4.

Page 116: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Asking a question should not change the answer

Bertrand Meyer

Page 117: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Commands

Queries

Command Query Separation

Page 118: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Modelo tradicional

Page 119: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Command Query Responsibility Segregation

Page 120: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

CQRSCommand Model

Page 121: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

CQRSCommand Model

Page 122: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

CQRSCommand Model

Query Model

Page 123: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

CQRS

Base para relatóriosAplicação

Page 124: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

CQRS + Event Sourcing

Event Sourcing Banco de leitura

evento 1, id: 2evento 2, id: 1evento 1, id: 1

id: 1, estado 2id: 2, estado 1

Page 125: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Crédito aprovadoGarantia adicionada

Doc adicionadoDoc removido

Doc adicionadoSolicitação criada

Query

Page 126: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Crédito aprovadoGarantia adicionada

Doc adicionadoDoc removido

Doc adicionadoSolicitação criada

Page 127: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Crédito aprovadoGarantia adicionada

Doc adicionadoDoc removido

Doc adicionadoSolicitação criada

Query

Page 128: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Quem já usou um sistema com event sourcing?

Page 129: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Adiciona atributo aos dados do veículo

app/vehicle_data/get_vehicle_data.rb | 2 +-

spec/infra/get_molicar_versions_spec.rb | 10 ++++++----

spec/use_case/fetch_vehicle_data_spec.rb | 2 +-

spec/vehicle_data/get_vehicle_data_spec.rb | 2 +-

4 files changed, 9 insertions(+), 7 deletions(-)

Page 130: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Saldo disponível

Conta Corrente 10.000

Conta Poupança 2.000

Page 131: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Saldo disponível

Conta Corrente 10.000

Conta Poupança 2.000

Extrato Conta Corrente

data valor descrição

03/05 +7000 Salário

05/05 +4000 Freela

06/05 -1000 Aluguel

Page 132: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 133: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 134: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Producer

Producer

Tópico 1

Tópico 2

Consumer

Consumer Group

Consumer

Consumer

Page 135: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Tópico

0 1 2 3 4 5 6

0 1 2 3 4 5 6 7 8 9 10 11 12

0 1 2 3 4 5 6 7 8 9

Partição 1

Partição 2

Partição 3

Page 136: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Tópico

0 1 2 3 4 5 6

1 1 2 3 4 5 6 7 8 9 10 11 12

2 1 2 3 4 5 6 7 8 9

Partição 1

Partição 2

Partição 3

Page 137: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Tópico

0 1 2 3 4 5 6

0 1 2 3 4 5 6 7 8 9 10 11 12

0 1 2 3 4 5 6 7 8 9

Partição 1

Partição 2

Partição 3

Page 138: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Tópico

0 1 2 3 4 5 6

0 1 2 3 4 5 6 7 8 9 10 11 12

0 1 2 3 4 5 6 7 8 9

Partição 1

Partição 2

Partição 3

Page 139: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

O problema

Page 140: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 141: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 142: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 143: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 144: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 145: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 146: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Versão 1

Versão 3 Versão N

Versão X

Page 147: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

A solução

Page 148: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Versão 1

Versão 3 Versão N

Versão X

Page 149: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Solicitação criada

Imóvel modificado

Condições alteradas

Pessoa adicionada

Garantia substituída

Page 150: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Solicitação criada

Imóvel modificado

Condições alteradas

Pessoa adicionada

Garantia substituída

Page 151: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Page 152: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

/karafka/karafka

/camilacampos/sample-karafka-sinatra

Page 153: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

AplicaçãoA

Front-end Eventos

Page 154: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

AplicaçãoA

Front-endAplicação

ES

Page 155: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

ACLAplicaçãoA

Front-end Evento Comando

Page 156: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

AplicaçãoES

Comando Evento

Page 157: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Event Store

+Aplicação

ESComando Evento

Page 158: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Event Store

+

Projeção

+

AplicaçãoES

Comando Evento

Page 159: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Não fizemos

Page 160: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

RespostaAplicação

AAplicação

ES

Page 161: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Aplicação Event SourcingSHOW ME THE CODE

Page 162: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Comando

{

"id": "id-da-solicitacao",

"data_da_solicitacao": "2019-05-04 22:28:14 UTC",

"valor_solicitado": 100000,

"motivo_do_emprestimo": "pagar dividas",

"solicitante": {"nome": "Mariazinha"},

"garantias": [{"type": "house", "value": 200000}],

"metadata": {

"timestamp": "2019-05-05 10:14:29 UTC",

"name": "CriarSolicitacao",

"id": "some-id",

"user_id": "some-user-id"

}

}

Entrada da aplicação

Page 163: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

command.metadata.name # => CriarSolicitacao

Solicitacao.new(command.to_h)

class Solicitacao

def initialize(data, valor, ...)

publish_event(SolicitacaoCriada.new(data, valor, ...))

end

end

Consumo dos comandos

Page 164: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

command.metadata.name # => CriarSolicitacao

Solicitacao.new(command.to_h)

class Solicitacao

def initialize(data, valor, ...)

publish_event(SolicitacaoCriada.new(data, valor, ...))

end

end

Consumo dos comandos

Page 165: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

command.metadata.name # => CriarSolicitacao

Solicitacao.new(command.to_h)

class Solicitacao

def initialize(data, valor, ...)

publish_event(SolicitacaoCriada.new(data, valor, ...))

end

end

Consumo dos comandos

Page 166: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

def publish_event(evento)

pending_events << evento

event_handlers[evento.name].call(evento)

end

def solicitacao_criada_handler(evento)

@data = evento.data

@valor = evento.valor

# ...

end

Lidando com os eventos

Page 167: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

def publish_event(evento)

pending_events << evento

event_handlers[evento.name].call(evento)

end

def solicitacao_criada_handler(evento)

@data = evento.data

@valor = evento.valor

# ...

end

Lidando com os eventos

Page 168: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

class SolicitacaoRepository

def save(solicitacao)

eventos = solicitacao.pending_events

eventos.each do |evento|

events_table.insert(id: solicitacao.id, event: evento.to_json)

events_producer.publish(evento)

end

ProjecaoEstadoAtual.new.save(solicitacao)

end

end

Persistência+

Event Store

Projeção

+Evento

Page 169: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

class SolicitacaoRepository

def save(solicitacao)

eventos = solicitacao.pending_events

eventos.each do |evento|

events_table.insert(id: solicitacao.id, event: evento.to_json)

events_producer.publish(evento)

end

ProjecaoEstadoAtual.new.save(solicitacao)

end

end

Persistência+

Event Store

Projeção

+Evento

Page 170: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

class SolicitacaoRepository

def save(solicitacao)

eventos = solicitacao.pending_events

eventos.each do |evento|

events_table.insert(id: solicitacao.id, event: evento.to_json)

events_producer.publish(evento)

end

ProjecaoEstadoAtual.new.save(solicitacao)

end

end

Persistência+

Event Store

Projeção

+Evento

Page 171: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

class SolicitacaoRepository

def save(solicitacao)

eventos = solicitacao.pending_events

eventos.each do |evento|

events_table.insert(id: solicitacao.id, event: evento.to_json)

events_producer.publish(evento)

end

ProjecaoEstadoAtual.new.save(solicitacao)

end

end

Persistência+

Event Store

Projeção

+Evento

Page 172: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

class SolicitacaoRepository

def save(solicitacao)

eventos = solicitacao.pending_events

eventos.each do |evento|

events_table.insert(id: solicitacao.id, event: evento.to_json)

events_producer.publish(evento)

end

ProjecaoEstadoAtual.new.save(solicitacao)

end

end

Persistência+

Event Store

Projeção

+Evento

Page 173: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

class ProjecaoEstadoAtual

def save(solicitacao)

estado_atual.update_or_insert(

id: solicitacao.id, solicitacao: solicitacao.to_json

)

end

def find_by_id(id)

estado_atual.where(id: id)

end

end

Projeção - Estado atual

Page 174: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

class ProjecaoEstadoAtual

def save(solicitacao)

estado_atual.update_or_insert(

id: solicitacao.id, solicitacao: solicitacao.to_json

)

end

def find_by_id(id)

estado_atual.where(id: id)

end

end

Projeção - Estado atual

Page 175: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Banco de dadosEvent Store

id event

1 Solicitação criada {valor: 50.000, motivo: Reforma}

Projeção - Estado Atual

id estado atual

1 {id: 1, valor: 50.000, motivo: Reforma}

Page 176: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Event Driven Architecture

Page 177: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Event Driven Architecture

Não é complicada

Page 178: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Event Driven Architecture

Não é complicada

Reflete a realidade

Page 179: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Event Driven Architecture

Não é complicada

Auditoria "de graça"

Reflete a realidade

Page 180: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Event Driven Architecture

Não é complicada

Auditoria "de graça"

Serviços autônomos

Reflete a realidade

Page 181: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Event Driven Architecture

Não é complicada

Auditoria "de graça"

Serviços autônomos

Reflete a realidade

Escalável

Page 182: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Não é complicada

Auditoria "de graça"

Serviços autônomos

Reflete a realidade

Escalável

Análises complexas

Event Driven Architecture

Page 183: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Event

Driven Architecture

Page 184: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Event

Driven Architecture

Assincronia

Page 185: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Event

Driven Architecture

Assincronia

Consistência Eventual

Page 186: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Event

Driven Architecture

Assincronia

Correções por eventos

Consistência Eventual

Page 187: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Event

Driven Architecture

Assincronia

Correções por eventos

Demanda projeções

Consistência Eventual

Page 188: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Event

Driven Architecture

Assincronia

Correções por eventos

Demanda projeções

Consistência Eventual

Replay tenso

Page 189: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Assincronia

Correções por eventos

Demanda projeções

Overengineering

Consistência Eventual

Replay tenso

Event

Driven Architecture

Page 190: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Não use um canhão para matar uma formiga

Page 191: na Creditas Architecture Event Driven - QConSP · Event Driven Architecture na Creditas @camposmilaa. @camposmilaa Camila Campos Creditas Rails Girls São Paulo Women Dev Summit @camposmilaa

@camposmilaa

Agradecida!

bit.ly/camila-qcon

camposmilaa