Arquitetura orientada a eventos

emmanuelnerisouza 903 views 44 slides Oct 16, 2020
Slide 1
Slide 1 of 44
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44

About This Presentation

A arquitetura orientada a eventos é um modelo de arquitetura de sistemas diferente do tradicional modelo orientado a solicitações, onde os dados são modelados e trafegados no formato de eventos ocorridos nos sistemas gerando um maior reaproveitamento e desacoplamento na troca de informações en...


Slide Content

ARQUITETURA ORIENTADA A EVENTOS
Emmanuel Neri
@emmanuelnerii
www.emmanuelneri.com.br
DESACOPLANDO A COMUNICAÇÃO ENTRE SERVIÇOS

EMMANUEL NERI
‣Mestre em Desenvolvimento de Tecnologia
‣Desenvolvedor desde 2010
‣Atualmente trabalhando com Go
‣Especialista de Tecnologia na
‣Membro do

TRENDS

ARQUITETURA

PADRÕES DE ARQUITETURA
Layered
Clean ArchitectureEvent-driven
Service-Oriented CQRS

PADRÕES DE ARQUITETURA ORIENTADA A EVENTOS
Mediator
Broker

ARQUITETURA ORIENTADA A EVENTOS
The event-driven architecture pattern is a popular
distributed asynchronous architecture pattern used to produce highly
scalable applications. It is also highly adaptable and can be used for
small applications and as well as large, complex ones. The event-driven
architecture is made up of highly decoupled, single-purpose event
processing components that asynchronously receive and process
events. 
Mark Richards

ARQUITETURA ORIENTADA A EVENTOS
Event-driven architecture (EDA) is a software design pattern that
enables an organization to detect “events” or important business
moments (such as a transaction, site visit, shopping cart abandonment,
etc) and act on them in real time or near real time.
tibco.com
Event-driven systems reflect how modern businesses actually
work–thousands of small changes happening all day, every day.
spring.io

EVENTOS
EVENTO = ACONTECIMENTO
‣UsuarioCriado
‣TransacaoAprovada
‣ProdutoAdicionado
An event can be defined as "a significant change in  state"
Event-Driven Applications: Costs, Benefits and Design Approaches

ARQUITETURA ORIENTADA A EVENTOS
UsuarioCriado
TransacaoAprovada
ProdutoAdicionado

ARQUITETURA ORIENTADA A EVENTOS
Cliente criado
Cliente
OnBoarding

ARQUITETURA ORIENTADA A EVENTOS
Transação Aprovada
Transação
Bonificação
Agendamento

ARQUITETURA ORIENTADA A EVENTOS
Pedido Criado
Pedidos
Pagamentos
Entregas
Pagamento Aprovado
Pedido Confirmado

FORMAS DE INTERAÇÕES
Solicitação Evento

EVENTO != COMANDOS
‣CriarUsuario != UsuarioCriado
‣ProcessarTransacao != TransacaoAprovada
‣AdicionarProduto != ProdutoAdicionado

PENSANDO EM EVENTOS
‣Evento “de comando”
‣Eu entro na sala, ligo o interruptor de luz e a luz se acende
‣Evento “Event First”
‣Eu entro na sala, é gerado um evento “entrei na sala” e a luz se
acende
https://www.confluent.io/blog/journey-to-event-driven-part-1-why-event-first-thinking-changes-everything/

FORMAS DE INTERAÇÕES
Designing Event-Driven Systems

REDUZIR ACOPLAMENTO
Software Architecture Fundamentals

MENSAGERIA
Point-to-Point
Publish/subscribe

POINT-TO-POINT
Onboarding
ClienteCriado
Cliente
Usuario
C1C2C3

PUB/SUB (PUBLISH/SUBSCRIBE)
Onboarding
ClienteCriado
Cliente
Notificação
userCreated
Usuario
C1
C1
C1
C2
C2
C2
C3
C3
C3

PLATAFORMA DE MENSAGENS

ARQUITETURA ORIENTADA A EVENTOS
‣Event Notification
‣Event-Carried State Transfer
‣Event-Sourcing

EVENT NOTIFICATION
Faturas
faturaEncerrada
Auditoria
SISTEMA DE
ARQUIVOS

EVENT NOTIFICATION
TIMESTAMP
REQUEST ID
URL
ArquivoCriado
05/29/2020 05:50:06
2bc7bd56-80f1-436e-84f6-c7f3099bd0ef
https://filestore/nfe/99902
TIMESTAMP
ID
TYPE
VendaModificada
09/30/2020 20:00:00
662aa64b-0f70-4fc1-96a0-046d46e142ba
OrderCreatedEvent

EVENT-CARRIED STATE TRANSFER
Transação
transacaoConfirmada
Agendamento de pagamentos

EVENT-CARRIED STATE TRANSFER
EMAIL
NAME
ROLES
UsuarioCriado
[email protected]
User
[ADMIN]
ID
CUSTOMER ID
CUSTOMER DOCUMENT
CUSTOMER NAME
VALUE
DATETIME
TYPE
Transação
9c64f9c1-c02f-4b57-a8c0-7e5550b49ace
a7e8a733-78e3-4cac-bda2-ea7b16395949
59.792.056/0001-79
Customer
100.00
09/29/2020 14:00:06
APPROVED

EVENT-SOURCING
Operação
OperacaoConfirmada
Conta
CRÉDITO - R$ 100
CRÉDITO - R$ 50
DÉBITO - R$ 20 Saldo = R$ 130

EVENT-SOURCING
DATETIME
ACCOUNT
TYPE
VALUE
operacaoExecutada
09/29/2020 14:00:06
a8f28235-1b97-4efc-b63d-0bfcbba30588
DEBIT
10.00
DATETIME
ORIGIN_NUMBER
DESTINATION_NUMBER
DURATION
ligacaoEncerrada
01/10/2020 20:36:02
44999002332
44999822300
1.2

DOMAIN EVENTS X EVENT SOURCE
Event Sourcing ensures that all changes to application state are stored as a
sequence of events.
Martin Fowler
Domain Events
‣Pedido foi confirmado
‣Transação foi aprovada
‣Novo produto foi cadastrado
Event source
‣Iniciado pedido para o cliente Teste
‣Adicionado produto celular de valor
1999 no pedido 001
‣Adicionado produto capa protetora
de valor 80 no pedido 001
‣Finalizado pedido 001

APIS NA ARQUITETURA ORIENTADA A EVENTOS

CONSULTAS
/clientes /transacoes
EVENTOS

CONSULTAS
EVENTOS
/query

CONSULTAS
/clientes /transacoes

ESCRITAS

ESCRITAS
Notificação
Recebidoapi
Criado / Processado
Contexto

CONSISTÊNCIA EVENTUAL
Eventual consistency

ALGUMAS MUDANÇAS
‣Responses
‣200 (Ok) -> 201 (Created) / 202 (Accepted)
‣Calbacks / webhook
‣Dados “não prontos"
‣Tempo de execução
‣Atenção nos Logs e monitoria
‣Monitoria de negócio

ARMADILHAS
‣ Consistência “Fake”
‣Bloquear requisição até processo assíncrona terminar
‣ Polling esperando o término da operação assíncrona

ATENÇÃO
‣Mudanças estruturais nos eventos são complicadas
‣Remoção de campos
‣Tolerant Reader
‣Reprocessamento dos eventos
‣Consumer idempotente
‣Conceitos de garantia de entrega
‣At-most-once / At-least-once / Exactly-once

RESUMO
‣Flexível
‣Comunicação assíncrona
‣Menor acoplamento
‣Escalável
‣Mudança no modelo
‣Consistência eventual
‣Arquitetura distribuída

ARQUITETURA ANTI-PATTERN
Software Architecture Fundamentals

REFERÊNCIAS

[email protected]
@emmanuelnerii
www.emmanuelneri.com.br
github.com/emmanuelneri
emmanuelnerisouza
OBRIGADO!