+ All Categories
Home > Software > Como construir software altamente eficiente com CQRS

Como construir software altamente eficiente com CQRS

Date post: 14-Apr-2017
Category:
Upload: guilherme-ferreira
View: 104 times
Download: 5 times
Share this document with a friend
52
Como construir software altamente eficiente com CQRS Guilherme Ferreira http://netpont o.org 12ª Reunião Presencial no Porto 17/09/2016
Transcript
Page 1: Como construir software altamente eficiente com CQRS

Como construir software altamente eficiente com

CQRSGuilherme Ferreira

http://netponto.org12ª Reunião Presencial no Porto 17/09/2016

Page 2: Como construir software altamente eficiente com CQRS

Guilherme Ferreira• http://gsferreira.com• @gsferreira

Page 3: Como construir software altamente eficiente com CQRS

CQRSCommand Query Responsibility Segregation

Page 4: Como construir software altamente eficiente com CQRS

Disclaimer

Page 5: Como construir software altamente eficiente com CQRS
Page 6: Como construir software altamente eficiente com CQRS

CQRS CommandQuery

Event SourcingAsync Processing

MessagingCache

Queue

Service BusTask Oriented

Eventual Consistency

Page 7: Como construir software altamente eficiente com CQRS

Novo projeto!

Data Layer

Business Layer

Service Layer

Presentation Layer

DB

Page 8: Como construir software altamente eficiente com CQRS
Page 9: Como construir software altamente eficiente com CQRS
Page 10: Como construir software altamente eficiente com CQRS
Page 11: Como construir software altamente eficiente com CQRS
Page 12: Como construir software altamente eficiente com CQRS

Command–query separation (CQS)• Eiffel por Bertrand Meyer• “… asking a question should not change the answer…”

Page 13: Como construir software altamente eficiente com CQRS

CQS na prática

Altera o estado

Retorna um valor sem ter impactos no

estado

Page 14: Como construir software altamente eficiente com CQRS

CQS na prática

Page 15: Como construir software altamente eficiente com CQRS

CQRS é…• Abordagem• Conjunto de práticas comuns

• Domínio Colaborativo• Single Responsibility• Workload Managment• Mais leituras do que escritas

• Software de fácil manutenção a longo prazo• Eficiência!

Page 16: Como construir software altamente eficiente com CQRS

CQRS não é…• Um padrão• Uma receita• “Don’t write a CQRS framework” by Greg Young

Page 17: Como construir software altamente eficiente com CQRS

CQRS = CQS em grande escala

Page 18: Como construir software altamente eficiente com CQRS
Page 19: Como construir software altamente eficiente com CQRS

CQRS CommandQuery

Event SourcingAsync Processing

MessagingCache

Queue

Service BusTask Oriented

Eventual Consistency

Page 20: Como construir software altamente eficiente com CQRS

Query Side

Page 21: Como construir software altamente eficiente com CQRS

Layered Architecture

Data Layer

Business Layer

Service Layer

Presentation Layer

DB

Com

man

d

Que

ry

Page 22: Como construir software altamente eficiente com CQRS

KISSKeep It Simple, Stupid

“Simple code is fast code” Udi Dahan

Page 23: Como construir software altamente eficiente com CQRS

Layered Architecture

View Model Data Layer

Business Layer

Service Layer

DB

Presentation Layer

Com

man

d

Que

ry

Page 24: Como construir software altamente eficiente com CQRS

Base de Dados• “Transações ACID são para bases de dados e não para sistemas” by

Paulo Gandra de Sousa• 3ª Forma Normal• Mas as Listagens não estão na 3FN

• ORM• Será mesmo preciso?

Page 25: Como construir software altamente eficiente com CQRS

Base de Dados• View Model• Tabelas simples, desnormalizadas• O mundo não é só SQL• Single source of truth is dead• Cache• Cache de Entidades vs Cache de Views

Page 26: Como construir software altamente eficiente com CQRS

Eventual Consistency• Dados não precisam de ser consistentes em todos os momentos• Eventual Consistency !== Dados errados• Stale data/Dados antigos• Dados datados

Page 27: Como construir software altamente eficiente com CQRS

Query Side: Resumindo…• Não precisas de muito para começar• Keep it Simple• É uma cache e não uma BD

Page 28: Como construir software altamente eficiente com CQRS

Command Side

Page 29: Como construir software altamente eficiente com CQRS

O que são Comandos?• Regista a intenção do utilizador• Nome no imperativo• Pré-validação• Business Rules• Taxa de sucesso elevada• Gere o Domain Model

Page 30: Como construir software altamente eficiente com CQRS

Task Based UI• Utilizadores não pensam em “modo CRUD”• Captura a intenção do utilizador• Uma página = Uma tarefa principal

Page 31: Como construir software altamente eficiente com CQRS

Task Based UI

Page 32: Como construir software altamente eficiente com CQRS

Processamento assíncrono• Separar a receção do comando do seu tratamento• Gestão de workload• Queue / Service Bus

Page 33: Como construir software altamente eficiente com CQRS
Page 34: Como construir software altamente eficiente com CQRS
Page 35: Como construir software altamente eficiente com CQRS
Page 36: Como construir software altamente eficiente com CQRS

Comandos: Resumindo• Registam a intenção do utilizador• Elevada taxa de sucesso• Task Based UI• Impactos no negócio

Page 37: Como construir software altamente eficiente com CQRS

Event Sourcing

Page 38: Como construir software altamente eficiente com CQRS

O que é o Event Sourcing?• O que mudou e quando mudou• Nomes no passado• Não há deletes• View Model atualizado por eventos • Eventos gerados pelos comandos• Por oposição a Cache Invalidation

• Permite reprocessamento/playing back

Page 39: Como construir software altamente eficiente com CQRS

Eventos

Workshop Created

Price Added

Location Added

Workshop

Published

Page 40: Como construir software altamente eficiente com CQRS

Event Sourcing Architecture

View Model Data Layer

Business Layer

Service Layer

DB

Presentation Layer

Com

man

d

Que

ry

Cache EventHandlers

Page 41: Como construir software altamente eficiente com CQRS

Event Sourcing: Resumindo…• O que aconteceu e quando aconteceu• Permite um Audit Trail de tudo o que aconteceu no sistema• Atualiza o View Model

Page 42: Como construir software altamente eficiente com CQRS

Overengineering?

Page 43: Como construir software altamente eficiente com CQRS
Page 44: Como construir software altamente eficiente com CQRS

Bounded Contexts• Dividir um grande sistema em pequenas partes• Domain Model independente• Comunica com outros Bounded Contexts através de Eventos• CQRS só nos Bounded Contexts em que precisas• Não te lembra nada?• Micro Serviços

Page 45: Como construir software altamente eficiente com CQRS
Page 46: Como construir software altamente eficiente com CQRS

Resumindo…1. Keep It Simple, start simple.2. Escolhe um Domínio Colaborativo• CQRS não é “Tudo ou Nada”

3. Separa as Queries dos Comandos4. Simplifica o teu Query Side

Page 47: Como construir software altamente eficiente com CQRS

Resumindo…5. Implementa uma Base de Dados para o teu View Model6. Captura a intenção do teu utilizador7. Gere a carga de trabalho com processamento assíncrono8. Implementa Event Sourcing9. Evangeliza o negócio

Page 48: Como construir software altamente eficiente com CQRS

Questões?

@gsferreirahttps://gsferreira.com

Page 49: Como construir software altamente eficiente com CQRS

Patrocinadores “GOLD”

Page 50: Como construir software altamente eficiente com CQRS

Patrocinadores “Silver”

Page 51: Como construir software altamente eficiente com CQRS

Patrocinadores “Bronze”

Page 52: Como construir software altamente eficiente com CQRS

http://bit.ly/netponto-aval-po-12

* Para quem não puder preencher durante a reunião, iremos enviar um email com o link à tarde


Recommended