CQRS/ES com Lagom

16
CQRS/ES Lagom Não mais do que o suficiente

Transcript of CQRS/ES com Lagom

Page 1: CQRS/ES com Lagom

CQRS/ES LagomNão mais do que o suficiente

Page 2: CQRS/ES com Lagom

Microservices

• Mais usuários

• Dados exigidos quase a tempo real

• Dados em movimento

• Abordagem poliglota

• Ciclos de interação com usuários mais curtos

Page 3: CQRS/ES com Lagom

Microservices

• Programação reativa

• Responsividade - baixa latência

• Resiliência - capacidade de se recuperar de

falhas

• Elasticidade - estabilidade sob carga

• Orientado a mensagens - comunicação

assíncrona

Page 4: CQRS/ES com Lagom

Microservices

Antes Cada vez mais

Máquina Isolada Em clusters

Processador Núcleo único Múltiplos núcleos

RAM Cara Barata

Disco Caro Barato

Rede Lenta Rápida

Usuários simultâneos Poucos Muitos

Dados Pouca quantidade Grande quantidade

Latência Segundos Milisegundos

Page 5: CQRS/ES com Lagom

CQRS/ES

• Uma raiz de agregado (aggregate root) recebe uma

série de comandos; note que os comandos não

são entidades persistentes.

• Como resultado, são gerados eventos que são

persistidos em um armazém de eventos.

• Imediatamente após a persistência, os eventos são

aplicados na raiz de agregado, atualizando seu

estado - é a única maneira de modificar este

estado.

Page 6: CQRS/ES com Lagom

Passos

• Linguagem: Java+Scala

• Ferramental: Intellij Idea+Activator/Sbt

• Definir um serviço (descritor e métodos)

• Implementar serviço

Page 7: CQRS/ES com Lagom

Partes importantes

• Dependency Injection: Lagom faz uso de Google

Guice para construir ‘grafos’ de serviços.

Page 8: CQRS/ES com Lagom

O código

https://github.com/iservport/iservport-voter

Page 9: CQRS/ES com Lagom

Scala, o básico

• Simplificações da

linguagem

• Construtores

• Import tem escopo -

implícitos.

• Case classes

• Genéricos

• Options

• Pattern matching

• Funções anônimas

• Futures

Page 10: CQRS/ES com Lagom

CQRS/ES

• Checklist:

• Definir agregados

• Definir comandos

• Definir eventos

• Etiquetar eventos

Page 11: CQRS/ES com Lagom

A entidade persistente

Page 12: CQRS/ES com Lagom

Implementar serviço

• A interface (trait) de serviço definida pela API será

implementada, assim como cada um de seus

métodos.

Page 13: CQRS/ES com Lagom

Cassandra Read Side

• Não pense como em um BD relacional

• Modele a partir das perguntas (queries)

• Denormalize e duplique para melhorar o

desempenho de leitura

• Não deixe para pensar nos índices depois

• Pense na estrutura física do armazenamento

Page 14: CQRS/ES com Lagom

Próximas versões

• Conteiners Docker

• Orquestração com Kubernetes

• Service Location com Zookeeper

Page 15: CQRS/ES com Lagom

Kubernetes

• Pods

• Replication

• Labels

• Services

Page 16: CQRS/ES com Lagom

– Maurício Fernandes de Castro

[email protected]

Dúvidas?