3. 2014 – Real Time Java com Node.js
Cargo: Hipster Lider Técnico de uma Startup com poucos usuários
2018 – Architecting For Resilience
Cargo: Arquiteto de Software reponsável por projetos que podem afetar
faturamento, pagamento e transporte de uma das maiores empresas do Brasil
4. Banco de Dados
Message Queue
NoSQL
Aplicação
Fornecedor Cloud/Datacenter
Hardware/Network
Outros...
10. ABB – Architectual Building Blocks
“Stable Abstractions... Never mention the name of anything concrete and volatile”
Livro: Clean Architecture by Uncle Bob
Cluster
BD
Aplicação
LB
Technology
Architecture
Business
Architecture
Aplicação
Datacenter
Information
Architecture
CRM Users
12. TicketID Content Status SLA ServiceI
D
Tickets
TicketID Typ
e
Content Statu
s
ServiceID
Events
TicketID: 425-877-
243
TicketID Content Status SLA ServiceI
D
425-877-243 {Dados NFe} PENDING 1 minuto Mensageria1
TicketID Typ
e
Content Statu
s
ServiceID
425-877-243 XML {Dados Nfe} PENDI
NG
MensageriaN-
ABC
TicketID Typ
e
Content Statu
s
ServiceID
425-877-243 XML {Dados Nfe} FINISH
ED
MensageriaN-
ABC
425-877-243 ENV {XML ASSINADO} PENDI
NG
MensageriaN-
ABC
TicketID Typ
e
Content Statu
s
ServiceID
425-877-243 XML {Dados Nfe} FINISH
ED
MensageriaN-
ABC
425-877-243 ENV {XML ASSINADO} FINISH
ED
MensageriaN-
ABC
425-877-243 RET {Numero Lote} PENDI
NG
MensageriaN-
ABC
TicketID Content Status SLA ServiceI
D
425-877-243 {Dados NFe} AUTORIZAD
O
1 minuto Mensageria1
TicketID Typ
e
Content Statu
s
ServiceID
425-877-243 XML {Dados Nfe} FINISH
ED
MensageriaN-
ABC
425-877-243 ENV {XML ASSINADO} FINISH
ED
MensageriaN-
ABC
425-877-243 RET {Numero Lote} FINISH
ED
MensageriaN-
ABC
425-877-243 ERP {XML Distribuição} PENDI
NG
MensageriaN-
ABC
425-877-243 HTTP {XML Distribuição} PENDI
NG
MensageriaN-
ABC
425-877-243 E-
Mail
{XML Distribuição} PENDI
NG
MensageriaN-
ABC
425-877-243 Portal {XML Distribuição} PENDI
NG
MensageriaN-
ABC
TicketID Typ
e
Content Statu
s
ServiceID
425-877-243 XML {Dados Nfe} FINISH
ED
MensageriaN-
ABC
425-877-243 ENV {XML ASSINADO} FINISH
ED
MensageriaN-
ABC
425-877-243 RET {Numero Lote} FINISH
ED
MensageriaN-
ABC
425-877-243 ERP {XML Distribuição} FINISH
ED
MensageriaN-
ABC
425-877-243 HTTP {XML Distribuição} FINISH
ED
MensageriaN-
ABC
425-877-243 E-
Mail
{XML Distribuição} FINISH
ED
MensageriaN-
ABC
425-877-243 Portal {XML Distribuição} FINISH
ED
MensageriaN-
ABC
13. SRP (Single Responsability Principle)
“The SRP says to separate the code that different actor depends on”
Livro Clean Architecture by Uncle Bob
Evento
“Compra
Aprovada”
Diretor(a) de
Marketing
Diretor(a)
Financeiro
14. Regra de negócio com Input e Output bem definidos
Funções “imutáveis”
“The purpose of a procedure is more important than its implementation”
Livro: Timeless Law Of Software Development
Evento
“Celular
Adicionado
Carrinho”
Calcula Valor
Carrinho
Evento
“Valor
Carrinho
Alterado”
INPUT OUTPUT
Cart: 5,
Produto: Celular,
Valor: 20,00
Cart: 5,
Valor: 30,00
15. Isolar ações que acessam camada de infraestrutura
Evento
“Compra
Aprovada”
Atualizar
Histórico de
Compras no
BD
Enviar E-
mail
Confirmação
Citação no livro SRE: Minimal APIs
“perfection is finally attained no when there is no longer more to add, but
when there is no longer anything to take away” by Antoine Saint Expéry
16. Infraestrutura: “Fornece recursos técnicos genéricos
que suportam as camadas mais altas: envio de
mensagem para o aplicativo, persistência de domínio...”
by Eric Evans
18. Gerenciador de Eventos
• Definido Interface IEventManager com métodos para se
registrar e submeter eventos
• Implementação básica da IEventManager com threads e
controle de fila em memória.
19. Gerenciador de Eventos
Regra de Negócio
• Desenvolvido o MVP do sistema orientado a eventos
• Definido interface de IRepository para modelos de dados
• Implementação concreta de IRepository com persistência em Memória
ou MongoDB devido praticidade
20. Gerenciador de Eventos
Regra de Negócio
Persistência
• Desenvolvimento da camada de persistência a partir das
interfaces de IRepository que criamos para atender o MVP
21. Gerenciador de Eventos
Regra de Negócio
Escalabilidade
Persistência
• Implementação da IEventManager para troca de eventos
via RabbitMQ
22. Gerenciador de Eventos
Resiliência
Regra de Negócio
Escalabilidade
Persistência
• Utilizamos Hystrix Framework para controle de Timeout ou
Exception ao se comunicar com a camada de infraestrutura.
• Message Queue: Evoluimos a implementação do IEventManager em
Memória e utilizamos ele como contingência.
• NoSQL: Algumas informações são armazenadas no BD Relacional
• BD Relacional: Utilizamos o H2 como contingência
• Aplicamos Resiliência somente nas funcionalidades do MVP
25. Código de resiliência é código, grandes chances de bug.
Sistemas distribuidos e orientados a eventos são complexos.
26. Desenhe a solução inicial baseada em ABB e não SBB: Mais foco na necessidade
do negócio.
Solução Orientada a Eventos: Crie Regras de Negócios que são iniciadas a partir
de eventos e possuem responsabilidade única (SRP)
Clean Architecture: Respeite as camadas, acesso a camadas de infraestrutura
somente via Abstração/Interface
MVP possui as funcionalidades mais importante do sistema: leve isso em
consideração nas rotinas de resiliência.