cqrs/es com lagom
TRANSCRIPT
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.
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