SlideShare uma empresa Scribd logo
1 de 42
PRODUZINDO E
CONSUMINDO UM STREAM
DE EVENTOS
SQLBH
PUC Minas
11 de Novembro de 2017
IVAN PAULOVICH
• Arquiteto de Softwares
ivan@100loop.com
github.com/ivanpaulovich
De 2012 à 2014
ARMAZENAMENTO EM BANCO DE DADOS
RELACIONAL
COMO OS DADOS SÃO ARMAZENADOS
ATUALMENTE?
Código Funcionário Nome Salário Código Departamento
42 André Gomes R$5000,00 12
70 Vinícius Lima R$4500,00 29
77 Luciano Reis R$5200,00 17
Tabela de Funcionários em 17 de agosto
COMO OS DADOS SÃO ARMAZENADOS
ATUALMENTE?
Código Funcionário Nome Salário Código Departamento
42 André Gomes R$5000,00 12
70 Vinícius Lima R$4500,00 29
77 Luciano Reis R$5200,00 17
Tabela de Funcionários em 17 de agosto
Código Funcionário Nome Salário Código Departamento
42 André Gomes R$6000,00 12
70 Vinícius Lima R$4500,00 29
77 Luciano Reis R$5200,00 17
Tabela de Funcionários em 18 de agosto
Por quê?
Quem?
Quando?
COMO OS DADOS SÃO ARMAZENADOS
ATUALMENTE?
• Bancos de Dados Relacionais
• Informações mais antigas são destruídas a cada UPDATE e DELETE.
• Não armazena o usuário, a motivação e o horário da alteração.
(A não ser que faça parte do modelo)
• Existe concorrência entre escrita e leitura.
ARMAZENAMENTO EM FLUXO DE DADOS
ARMAZENAMENTO EM FLUXO DE DADOS
C/C Saldo
2010-0 R$ 200,00
4030-1 R$ 300,00
Tabela de Saldos por C/C
Extrato das Contas Correntes
ProjeçãoPublicação
1 Depositado
C/C: 4030-1
Data: 17/08/2017
Valor: R$ 500,00
2 Depositado
C/C: 2010-0
Data: 20/08/2017
Valor: R$ 300,00
3 Sacado
C/C: 2010-0
Data: 23/08/2017
Valor: R$ 100,00
4 Sacado
C/C: 4030-1
Data: 25/08/2017
Valor: R$ 200,00
Sabemos o porquê,
o quem, e o quando de foi
realizada cada operação.
ARMAZENAMENTO EM FLUXO DE DADOS
C/C Saldo
2010-0 R$ 200,00
4030-1 R$ 300,00
Extrato das Contas Correntes
ProjeçãoPublicação
1 Depositado
C/C: 4030-1
Data: 17/08/2017
Valor: R$ 500,00
2 Depositado
C/C: 2010-0
Data: 20/08/2017
Valor: R$ 300,00
3 Sacado
C/C: 2010-0
Data: 23/08/2017
Valor: R$ 100,00
4 Sacado
C/C: 4030-1
Data: 25/08/2017
Valor: R$ 200,00
Base Analítica em
Linha do Tempo
Tabela de Saldos por C/C
BENEFÍCIOS
AUDITORIA
• Cada alteração no estado da aplicação é gravada contendo:
• O autor da modificação
• Horário.
• E o motivo.
• Modificações são sempre incrementais.
• Não usa-se as operações DELETE ou UPDATE.
REDUNDÂNCIA
• Permite múltiplas projeções e replay.
• Geo-distribuído (On premise / Cloud).
• Evita o Single Point of Failure
C/C Saldo
4030-1 R$ 60,00
2060-0 R$ 150,00
4 3 2 1
Atual Projeção do Saldo
das Contas Correntes
PRONTO PARA BIG DATA
Event Stream Base
Relacional
Base de
Grafos
Chaves /
Valores
Base Analítica
no Tempo
Base
Documentos
A SOLUÇÃO
DIAGRAMA DA SOLUÇÃO
Stream
Producer
API
Consumer
APP
Banco de Dados
Processo de Escrita:
Primeiro no Stream e depois no Banco de Dados
Leitura diretamente do Banco de Dados
PRODUÇÃO DE EVENTOS
Sacar
Dinheiro
Command
Sacar
Dinheiro
Command
Handler
Criança
Adicionada
Domain
Event
Armazenamento Permanente de
Eventos do Domínio em um Stream
Saque Realizado
Domain
Event
CONSUMO E PROJEÇÃO DE EVENTOS
Saque
Realizado
Domain
Event
Saque
Realizado
Domain
Event
Handler
C/C Nome
4020-1 R$700,00
Projeção dos Eventos de Domínio em
um banco de dados SQL ou NoSQL
A IMPLEMENTAÇÃO
AS CAMADAS
Presentation Layer
Application Layer
Domain Layer
Infrastructure Layer
Presentation Layer
Infrastructure Layer
Data Access LayerApplication Layer
Domain Layer
ESTILOS ARQUITETURAIS
• Arquitetura para Microserviços
• Domain-Driven Design (DDD)
• Aggregates
• Event-Sourcing
• Command-Query-Responsibility-Segregation (CQRS)
AS DIFICULDADES
• O desenvolvimento com DDD exige um profundo conhecimento do Domínio e dos
princípios de OO para a sua correta modelagem
• Necessário manter dois sistemas de armazenamento
(Stream e banco de dados)
• Alta complexidade dos Princípios de Microsserviços e da comunicação distribuída
AGGREGATES E DOMAIN EVENTS
• Aggregates
• Protegem o quanto possível o grafo de entidades de acesso externo.
• Garantem que o estado das entidades filhas são sempre consistentes.
• Determinam um escopo de transação.
AGGREGATES E DOMAIN EVENTS
• Aggregates
• Protegem o quanto possível o grafo de entidades de acesso externo.
• Garantem que o estado das entidades filhas são sempre consistentes.
• Determinam um escopo de transação.
• Domain Events
• Algo que ocorreu no passado.
• Uma vez armazenados se tornam imutáveis.
• Todo o processamento relativo ao evento já foi realizado
AGGREGATES E DOMAIN EVENTS
• Aggregates
• Protegem o quanto possível o grafo de entidades de acesso externo.
• Garantem que o estado das entidades filhas são sempre consistentes.
• Determinam um escopo de transação.
• Domain Events
• Algo que ocorreu no passado.
• Uma vez armazenados se tornam imutáveis.
• Todo o processamento relativo ao evento já foi realizado
Event Sourcing != Command Sourcing
PRODUZINDO EVENTOS
Busca o estado atual
Realiza uma operação na Agregação
Publica os Domain Events
CONSUMINDO EVENTOS
Busca o estado atual
Aplica uma operação na Agregação
Atualiza em BD
OptimisticConcurrency
ONDE AS TÉCNICAS PODEM SER
APLICADAS?
• Mercado Financeiro, Contabilidade
• Bancos
• Saúde
• Redes Sociais
• Aplicações Reativas a Eventos
• Sistemas que possuem rastreamento do comportamento do usuário
CÓDIGOS E RESULTADOS
MFA
Microserviço para Gerenciamento de
Entrada e Saída de Crianças
com implementação de Event Sourcing
https://github.com/ivanpaulovich/mfa
Jambo
Microserviço para Gerenciamento de Conteúdo de
blogs pessoais com implementação de
Event Sourcing
https://github.com/ivanpaulovich/jambo
REFERÊNCIAS
• VERNON, V. Implementing Domain-Driven Design 1st Edition.
United States: Addison-Wesley Professional, 2013. 656 p.
• HALL, G. M. Adaptive Code via C#: Agile coding with design patterns and SOLID
principles (Developer Reference) 1st Edition.
United States: Addison-Wesley, 2014. 416 p.
PERGUNTAS

Mais conteúdo relacionado

Semelhante a Produzindo e consumindo um stream de eventos

Data Cleansing SAP ERP - Metodologia passo-a-passo
Data Cleansing SAP ERP - Metodologia passo-a-passoData Cleansing SAP ERP - Metodologia passo-a-passo
Data Cleansing SAP ERP - Metodologia passo-a-passoJOSUE DIAS
 
Seminário Aese - Definição das ferramentas do LSS
Seminário Aese - Definição das ferramentas do LSSSeminário Aese - Definição das ferramentas do LSS
Seminário Aese - Definição das ferramentas do LSSPedrodosSantos
 
TDC2018FLN | Trilha Arquitetura - Architecting for Resilience
TDC2018FLN | Trilha Arquitetura - Architecting for ResilienceTDC2018FLN | Trilha Arquitetura - Architecting for Resilience
TDC2018FLN | Trilha Arquitetura - Architecting for Resiliencetdc-globalcode
 
Architecting For Resilience
Architecting For ResilienceArchitecting For Resilience
Architecting For ResilienceFabiano Modos
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAmazon Web Services LATAM
 
Events, event driven architecture and async api, what the fork-
Events, event driven architecture and async api, what the fork-Events, event driven architecture and async api, what the fork-
Events, event driven architecture and async api, what the fork-Ana Simiqueli
 
TDC 2017 - Borg até o Prometheus: Site Reliability Engineering
TDC 2017 - Borg até o Prometheus: Site Reliability EngineeringTDC 2017 - Borg até o Prometheus: Site Reliability Engineering
TDC 2017 - Borg até o Prometheus: Site Reliability EngineeringFelipe Klerk Signorini
 
Implantação de ERP
Implantação de ERPImplantação de ERP
Implantação de ERPMarco Coghi
 
URCAMP (Jun2017) - Como o papel e atividades de DBA ficam no contexto da cult...
URCAMP (Jun2017) - Como o papel e atividades de DBA ficam no contexto da cult...URCAMP (Jun2017) - Como o papel e atividades de DBA ficam no contexto da cult...
URCAMP (Jun2017) - Como o papel e atividades de DBA ficam no contexto da cult...Fabrízio Mello
 
Implementações no Parque Tecnológico
Implementações no Parque TecnológicoImplementações no Parque Tecnológico
Implementações no Parque TecnológicoFelipe Perin
 
Arquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine LearningArquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine LearningFelipe Santos
 
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...Marcus Garcia
 
Aplicações Multitenant
Aplicações MultitenantAplicações Multitenant
Aplicações MultitenantMarcelo Diniz
 

Semelhante a Produzindo e consumindo um stream de eventos (20)

Data Cleansing SAP ERP - Metodologia passo-a-passo
Data Cleansing SAP ERP - Metodologia passo-a-passoData Cleansing SAP ERP - Metodologia passo-a-passo
Data Cleansing SAP ERP - Metodologia passo-a-passo
 
Seminário Aese - Definição das ferramentas do LSS
Seminário Aese - Definição das ferramentas do LSSSeminário Aese - Definição das ferramentas do LSS
Seminário Aese - Definição das ferramentas do LSS
 
Abaas - Advanced Beer-as-a-Service
Abaas - Advanced Beer-as-a-ServiceAbaas - Advanced Beer-as-a-Service
Abaas - Advanced Beer-as-a-Service
 
TDC2018FLN | Trilha Arquitetura - Architecting for Resilience
TDC2018FLN | Trilha Arquitetura - Architecting for ResilienceTDC2018FLN | Trilha Arquitetura - Architecting for Resilience
TDC2018FLN | Trilha Arquitetura - Architecting for Resilience
 
Architecting For Resilience
Architecting For ResilienceArchitecting For Resilience
Architecting For Resilience
 
New Relic Insights
New Relic InsightsNew Relic Insights
New Relic Insights
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
 
Events, event driven architecture and async api, what the fork-
Events, event driven architecture and async api, what the fork-Events, event driven architecture and async api, what the fork-
Events, event driven architecture and async api, what the fork-
 
TDC 2017 - Borg até o Prometheus: Site Reliability Engineering
TDC 2017 - Borg até o Prometheus: Site Reliability EngineeringTDC 2017 - Borg até o Prometheus: Site Reliability Engineering
TDC 2017 - Borg até o Prometheus: Site Reliability Engineering
 
Iasapoa eca eda
Iasapoa eca edaIasapoa eca eda
Iasapoa eca eda
 
Implantação de ERP
Implantação de ERPImplantação de ERP
Implantação de ERP
 
Openday PUC-RIO - Engenharia de Requisitos
Openday PUC-RIO - Engenharia de RequisitosOpenday PUC-RIO - Engenharia de Requisitos
Openday PUC-RIO - Engenharia de Requisitos
 
URCAMP (Jun2017) - Como o papel e atividades de DBA ficam no contexto da cult...
URCAMP (Jun2017) - Como o papel e atividades de DBA ficam no contexto da cult...URCAMP (Jun2017) - Como o papel e atividades de DBA ficam no contexto da cult...
URCAMP (Jun2017) - Como o papel e atividades de DBA ficam no contexto da cult...
 
Implementações no Parque Tecnológico
Implementações no Parque TecnológicoImplementações no Parque Tecnológico
Implementações no Parque Tecnológico
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Arquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine LearningArquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine Learning
 
Bancos de dados NoSQL na AWS
Bancos de dados NoSQL na AWSBancos de dados NoSQL na AWS
Bancos de dados NoSQL na AWS
 
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...
Trabalhando com TFS na nuvem (Microsoft Azure). Quais vantagens de migrar o A...
 
Continuous Deployment e DevOps na Nuvem
Continuous Deployment e DevOps na NuvemContinuous Deployment e DevOps na Nuvem
Continuous Deployment e DevOps na Nuvem
 
Aplicações Multitenant
Aplicações MultitenantAplicações Multitenant
Aplicações Multitenant
 

Mais de Ivan Paulovich

DDD Tactical Design with Clean Architecture - Ivan Paulovich
DDD Tactical Design with Clean Architecture - Ivan PaulovichDDD Tactical Design with Clean Architecture - Ivan Paulovich
DDD Tactical Design with Clean Architecture - Ivan PaulovichIvan Paulovich
 
Clean Architecture Essentials - Stockholm Software Craftsmanship
Clean Architecture Essentials - Stockholm Software CraftsmanshipClean Architecture Essentials - Stockholm Software Craftsmanship
Clean Architecture Essentials - Stockholm Software CraftsmanshipIvan Paulovich
 
Clean Architecture Essentials @ivanpaulovich
Clean Architecture Essentials @ivanpaulovichClean Architecture Essentials @ivanpaulovich
Clean Architecture Essentials @ivanpaulovichIvan Paulovich
 
Building rich domain models with ddd and tdd ivan paulovich - betsson
Building rich domain models with ddd and tdd   ivan paulovich - betssonBuilding rich domain models with ddd and tdd   ivan paulovich - betsson
Building rich domain models with ddd and tdd ivan paulovich - betssonIvan Paulovich
 
Moving to Microservices
Moving to MicroservicesMoving to Microservices
Moving to MicroservicesIvan Paulovich
 
Como uma aplicação baseada em fluxo de dados pode ampliar a segurança em crec...
Como uma aplicação baseada em fluxo de dados pode ampliar a segurança em crec...Como uma aplicação baseada em fluxo de dados pode ampliar a segurança em crec...
Como uma aplicação baseada em fluxo de dados pode ampliar a segurança em crec...Ivan Paulovich
 
Como uma aplicação baseada em fluxo de dados pode ampliar a segurança em creches
Como uma aplicação baseada em fluxo de dados pode ampliar a segurança em crechesComo uma aplicação baseada em fluxo de dados pode ampliar a segurança em creches
Como uma aplicação baseada em fluxo de dados pode ampliar a segurança em crechesIvan Paulovich
 
Aggregates com Event Sourcing
Aggregates com Event SourcingAggregates com Event Sourcing
Aggregates com Event SourcingIvan Paulovich
 
Estudo do eShopOnContainers
Estudo do eShopOnContainersEstudo do eShopOnContainers
Estudo do eShopOnContainersIvan Paulovich
 
Introdução ao Domain-Driven-Design (DDD)
Introdução ao Domain-Driven-Design (DDD)Introdução ao Domain-Driven-Design (DDD)
Introdução ao Domain-Driven-Design (DDD)Ivan Paulovich
 
Princípios SOLID de OO usando .NET
Princípios SOLID de OO usando .NETPrincípios SOLID de OO usando .NET
Princípios SOLID de OO usando .NETIvan Paulovich
 
Utilize o vso e publique imagens docker Global Azure Bootcamp - BH
Utilize o vso e publique imagens docker Global Azure Bootcamp - BHUtilize o vso e publique imagens docker Global Azure Bootcamp - BH
Utilize o vso e publique imagens docker Global Azure Bootcamp - BHIvan Paulovich
 
Windows Azure Mobile Services InfoTech 2014
Windows Azure Mobile Services InfoTech 2014Windows Azure Mobile Services InfoTech 2014
Windows Azure Mobile Services InfoTech 2014Ivan Paulovich
 
Mercado de ti e suas oportunidades
Mercado de ti e suas oportunidadesMercado de ti e suas oportunidades
Mercado de ti e suas oportunidadesIvan Paulovich
 
Construindo Apps Com SignalR
Construindo Apps Com SignalRConstruindo Apps Com SignalR
Construindo Apps Com SignalRIvan Paulovich
 
Construindo apps de tempo real com SignalR
Construindo apps de tempo real com SignalRConstruindo apps de tempo real com SignalR
Construindo apps de tempo real com SignalRIvan Paulovich
 
Construindo Apps com ASP.NET SignalR
Construindo Apps com ASP.NET SignalRConstruindo Apps com ASP.NET SignalR
Construindo Apps com ASP.NET SignalRIvan Paulovich
 
Levando sua aplicação para a nuvem
Levando sua aplicação para a nuvemLevando sua aplicação para a nuvem
Levando sua aplicação para a nuvemIvan Paulovich
 
Conhecendo os recursos do ASP.NET Web API
Conhecendo os recursos do ASP.NET Web APIConhecendo os recursos do ASP.NET Web API
Conhecendo os recursos do ASP.NET Web APIIvan Paulovich
 
Criando aplicativos para Windows 8 usando apenas HTML5 e Javascript
Criando aplicativos para Windows 8 usando apenas HTML5 e JavascriptCriando aplicativos para Windows 8 usando apenas HTML5 e Javascript
Criando aplicativos para Windows 8 usando apenas HTML5 e JavascriptIvan Paulovich
 

Mais de Ivan Paulovich (20)

DDD Tactical Design with Clean Architecture - Ivan Paulovich
DDD Tactical Design with Clean Architecture - Ivan PaulovichDDD Tactical Design with Clean Architecture - Ivan Paulovich
DDD Tactical Design with Clean Architecture - Ivan Paulovich
 
Clean Architecture Essentials - Stockholm Software Craftsmanship
Clean Architecture Essentials - Stockholm Software CraftsmanshipClean Architecture Essentials - Stockholm Software Craftsmanship
Clean Architecture Essentials - Stockholm Software Craftsmanship
 
Clean Architecture Essentials @ivanpaulovich
Clean Architecture Essentials @ivanpaulovichClean Architecture Essentials @ivanpaulovich
Clean Architecture Essentials @ivanpaulovich
 
Building rich domain models with ddd and tdd ivan paulovich - betsson
Building rich domain models with ddd and tdd   ivan paulovich - betssonBuilding rich domain models with ddd and tdd   ivan paulovich - betsson
Building rich domain models with ddd and tdd ivan paulovich - betsson
 
Moving to Microservices
Moving to MicroservicesMoving to Microservices
Moving to Microservices
 
Como uma aplicação baseada em fluxo de dados pode ampliar a segurança em crec...
Como uma aplicação baseada em fluxo de dados pode ampliar a segurança em crec...Como uma aplicação baseada em fluxo de dados pode ampliar a segurança em crec...
Como uma aplicação baseada em fluxo de dados pode ampliar a segurança em crec...
 
Como uma aplicação baseada em fluxo de dados pode ampliar a segurança em creches
Como uma aplicação baseada em fluxo de dados pode ampliar a segurança em crechesComo uma aplicação baseada em fluxo de dados pode ampliar a segurança em creches
Como uma aplicação baseada em fluxo de dados pode ampliar a segurança em creches
 
Aggregates com Event Sourcing
Aggregates com Event SourcingAggregates com Event Sourcing
Aggregates com Event Sourcing
 
Estudo do eShopOnContainers
Estudo do eShopOnContainersEstudo do eShopOnContainers
Estudo do eShopOnContainers
 
Introdução ao Domain-Driven-Design (DDD)
Introdução ao Domain-Driven-Design (DDD)Introdução ao Domain-Driven-Design (DDD)
Introdução ao Domain-Driven-Design (DDD)
 
Princípios SOLID de OO usando .NET
Princípios SOLID de OO usando .NETPrincípios SOLID de OO usando .NET
Princípios SOLID de OO usando .NET
 
Utilize o vso e publique imagens docker Global Azure Bootcamp - BH
Utilize o vso e publique imagens docker Global Azure Bootcamp - BHUtilize o vso e publique imagens docker Global Azure Bootcamp - BH
Utilize o vso e publique imagens docker Global Azure Bootcamp - BH
 
Windows Azure Mobile Services InfoTech 2014
Windows Azure Mobile Services InfoTech 2014Windows Azure Mobile Services InfoTech 2014
Windows Azure Mobile Services InfoTech 2014
 
Mercado de ti e suas oportunidades
Mercado de ti e suas oportunidadesMercado de ti e suas oportunidades
Mercado de ti e suas oportunidades
 
Construindo Apps Com SignalR
Construindo Apps Com SignalRConstruindo Apps Com SignalR
Construindo Apps Com SignalR
 
Construindo apps de tempo real com SignalR
Construindo apps de tempo real com SignalRConstruindo apps de tempo real com SignalR
Construindo apps de tempo real com SignalR
 
Construindo Apps com ASP.NET SignalR
Construindo Apps com ASP.NET SignalRConstruindo Apps com ASP.NET SignalR
Construindo Apps com ASP.NET SignalR
 
Levando sua aplicação para a nuvem
Levando sua aplicação para a nuvemLevando sua aplicação para a nuvem
Levando sua aplicação para a nuvem
 
Conhecendo os recursos do ASP.NET Web API
Conhecendo os recursos do ASP.NET Web APIConhecendo os recursos do ASP.NET Web API
Conhecendo os recursos do ASP.NET Web API
 
Criando aplicativos para Windows 8 usando apenas HTML5 e Javascript
Criando aplicativos para Windows 8 usando apenas HTML5 e JavascriptCriando aplicativos para Windows 8 usando apenas HTML5 e Javascript
Criando aplicativos para Windows 8 usando apenas HTML5 e Javascript
 

Produzindo e consumindo um stream de eventos

  • 1. PRODUZINDO E CONSUMINDO UM STREAM DE EVENTOS SQLBH PUC Minas 11 de Novembro de 2017
  • 2. IVAN PAULOVICH • Arquiteto de Softwares ivan@100loop.com github.com/ivanpaulovich De 2012 à 2014
  • 3. ARMAZENAMENTO EM BANCO DE DADOS RELACIONAL
  • 4. COMO OS DADOS SÃO ARMAZENADOS ATUALMENTE? Código Funcionário Nome Salário Código Departamento 42 André Gomes R$5000,00 12 70 Vinícius Lima R$4500,00 29 77 Luciano Reis R$5200,00 17 Tabela de Funcionários em 17 de agosto
  • 5. COMO OS DADOS SÃO ARMAZENADOS ATUALMENTE? Código Funcionário Nome Salário Código Departamento 42 André Gomes R$5000,00 12 70 Vinícius Lima R$4500,00 29 77 Luciano Reis R$5200,00 17 Tabela de Funcionários em 17 de agosto Código Funcionário Nome Salário Código Departamento 42 André Gomes R$6000,00 12 70 Vinícius Lima R$4500,00 29 77 Luciano Reis R$5200,00 17 Tabela de Funcionários em 18 de agosto Por quê? Quem? Quando?
  • 6. COMO OS DADOS SÃO ARMAZENADOS ATUALMENTE? • Bancos de Dados Relacionais • Informações mais antigas são destruídas a cada UPDATE e DELETE. • Não armazena o usuário, a motivação e o horário da alteração. (A não ser que faça parte do modelo) • Existe concorrência entre escrita e leitura.
  • 8. ARMAZENAMENTO EM FLUXO DE DADOS C/C Saldo 2010-0 R$ 200,00 4030-1 R$ 300,00 Tabela de Saldos por C/C Extrato das Contas Correntes ProjeçãoPublicação 1 Depositado C/C: 4030-1 Data: 17/08/2017 Valor: R$ 500,00 2 Depositado C/C: 2010-0 Data: 20/08/2017 Valor: R$ 300,00 3 Sacado C/C: 2010-0 Data: 23/08/2017 Valor: R$ 100,00 4 Sacado C/C: 4030-1 Data: 25/08/2017 Valor: R$ 200,00 Sabemos o porquê, o quem, e o quando de foi realizada cada operação.
  • 9. ARMAZENAMENTO EM FLUXO DE DADOS C/C Saldo 2010-0 R$ 200,00 4030-1 R$ 300,00 Extrato das Contas Correntes ProjeçãoPublicação 1 Depositado C/C: 4030-1 Data: 17/08/2017 Valor: R$ 500,00 2 Depositado C/C: 2010-0 Data: 20/08/2017 Valor: R$ 300,00 3 Sacado C/C: 2010-0 Data: 23/08/2017 Valor: R$ 100,00 4 Sacado C/C: 4030-1 Data: 25/08/2017 Valor: R$ 200,00 Base Analítica em Linha do Tempo Tabela de Saldos por C/C
  • 11. AUDITORIA • Cada alteração no estado da aplicação é gravada contendo: • O autor da modificação • Horário. • E o motivo. • Modificações são sempre incrementais. • Não usa-se as operações DELETE ou UPDATE.
  • 12. REDUNDÂNCIA • Permite múltiplas projeções e replay. • Geo-distribuído (On premise / Cloud). • Evita o Single Point of Failure C/C Saldo 4030-1 R$ 60,00 2060-0 R$ 150,00 4 3 2 1 Atual Projeção do Saldo das Contas Correntes
  • 13. PRONTO PARA BIG DATA Event Stream Base Relacional Base de Grafos Chaves / Valores Base Analítica no Tempo Base Documentos
  • 15. DIAGRAMA DA SOLUÇÃO Stream Producer API Consumer APP Banco de Dados Processo de Escrita: Primeiro no Stream e depois no Banco de Dados Leitura diretamente do Banco de Dados
  • 17. CONSUMO E PROJEÇÃO DE EVENTOS Saque Realizado Domain Event Saque Realizado Domain Event Handler C/C Nome 4020-1 R$700,00 Projeção dos Eventos de Domínio em um banco de dados SQL ou NoSQL
  • 19. AS CAMADAS Presentation Layer Application Layer Domain Layer Infrastructure Layer Presentation Layer Infrastructure Layer Data Access LayerApplication Layer Domain Layer
  • 20. ESTILOS ARQUITETURAIS • Arquitetura para Microserviços • Domain-Driven Design (DDD) • Aggregates • Event-Sourcing • Command-Query-Responsibility-Segregation (CQRS)
  • 21. AS DIFICULDADES • O desenvolvimento com DDD exige um profundo conhecimento do Domínio e dos princípios de OO para a sua correta modelagem • Necessário manter dois sistemas de armazenamento (Stream e banco de dados) • Alta complexidade dos Princípios de Microsserviços e da comunicação distribuída
  • 22. AGGREGATES E DOMAIN EVENTS • Aggregates • Protegem o quanto possível o grafo de entidades de acesso externo. • Garantem que o estado das entidades filhas são sempre consistentes. • Determinam um escopo de transação.
  • 23. AGGREGATES E DOMAIN EVENTS • Aggregates • Protegem o quanto possível o grafo de entidades de acesso externo. • Garantem que o estado das entidades filhas são sempre consistentes. • Determinam um escopo de transação. • Domain Events • Algo que ocorreu no passado. • Uma vez armazenados se tornam imutáveis. • Todo o processamento relativo ao evento já foi realizado
  • 24. AGGREGATES E DOMAIN EVENTS • Aggregates • Protegem o quanto possível o grafo de entidades de acesso externo. • Garantem que o estado das entidades filhas são sempre consistentes. • Determinam um escopo de transação. • Domain Events • Algo que ocorreu no passado. • Uma vez armazenados se tornam imutáveis. • Todo o processamento relativo ao evento já foi realizado Event Sourcing != Command Sourcing
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31. Busca o estado atual Realiza uma operação na Agregação Publica os Domain Events
  • 32.
  • 33.
  • 35.
  • 36.
  • 37.
  • 38. Busca o estado atual Aplica uma operação na Agregação Atualiza em BD OptimisticConcurrency
  • 39. ONDE AS TÉCNICAS PODEM SER APLICADAS? • Mercado Financeiro, Contabilidade • Bancos • Saúde • Redes Sociais • Aplicações Reativas a Eventos • Sistemas que possuem rastreamento do comportamento do usuário
  • 40. CÓDIGOS E RESULTADOS MFA Microserviço para Gerenciamento de Entrada e Saída de Crianças com implementação de Event Sourcing https://github.com/ivanpaulovich/mfa Jambo Microserviço para Gerenciamento de Conteúdo de blogs pessoais com implementação de Event Sourcing https://github.com/ivanpaulovich/jambo
  • 41. REFERÊNCIAS • VERNON, V. Implementing Domain-Driven Design 1st Edition. United States: Addison-Wesley Professional, 2013. 656 p. • HALL, G. M. Adaptive Code via C#: Agile coding with design patterns and SOLID principles (Developer Reference) 1st Edition. United States: Addison-Wesley, 2014. 416 p.