CQRS/ES com Lagom

Post on 22-Jan-2018

74 views 1 download

Transcript of CQRS/ES com Lagom

CQRS/ES LagomNão mais do que o suficiente

Microservices

• Mais usuários

• Dados exigidos quase a tempo real

• Dados em movimento

• Abordagem poliglota

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

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

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

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.

Passos

• Linguagem: Java+Scala

• Ferramental: Intellij Idea+Activator/Sbt

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

• Implementar serviço

Partes importantes

• Dependency Injection: Lagom faz uso de Google

Guice para construir ‘grafos’ de serviços.

O código

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

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

CQRS/ES

• Checklist:

• Definir agregados

• Definir comandos

• Definir eventos

• Etiquetar eventos

A entidade persistente

Implementar serviço

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

implementada, assim como cada um de seus

métodos.

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

Próximas versões

• Conteiners Docker

• Orquestração com Kubernetes

• Service Location com Zookeeper

Kubernetes

• Pods

• Replication

• Labels

• Services

– Maurício Fernandes de Castro

mauricio@iservport.com

Dúvidas?