SlideShare uma empresa Scribd logo
1 de 29
F24ZeroCodeZeroErrori
Emanuele Garofalo
From sketch to production
Di cosa parleremo
Agenda
• Esplorazione del dominio
– Dall’idea ad una parete piena di post-it
• Context Map
– Requisiti dei singoli contesti e come abbiamo
risposto agli stessi
• Produzione
– Facile o difficile?
Giorno 1: idea
• Abbiamo pensato ad un nuovo progetto
– Codename ZeroCode (dopo F24ZZ)
• L’idea di fondo è che sia un contenitore di F24 a
disposizione degli sportelli bancari per velocizzare
il processo di pagamento allo sportello.
• Lo sportello, al completamento del pagamento, ci
farà sapere che il pagamento è avvenuto
Facile no?!
Ciclo classico
Produttori di
deleghe F24
PSP
Contribuente
Ciclo F24ZZ
Produttori di
deleghe F24
PSP
Contribuente
F24ZZ
Facile no?!
Giorno 1: idea
NO!
Facciamo un passo indietro…
Q:
A:
Event Storming is a workshop format
for quickly exploring complex business
domains.
Cit: Alberto Brandolini (link alla fine)
Come posso esplorare un dominio che mi
è sconosciuto facendo emergere nel più
breve tempo possibile i requisiti che sono
scontati per gli stackholder?
Giorno 2: EventStorming
• Il primo errore
– «4 post-it in croce»
Delega Caricata
Delega Pagata
Delega Stornata
Paga Delega
Storna Delega
Storna Delega
Giorno 3: EventStorming «fatto meglio»
Giorno 4: EventStorming «definitivo»
Context Map
Gestione
Contratti
Erogazione /
Trattamento
deleghe
Forniture
Massive
Contabilità
HD
I Numeri
Q:
A: Ci aspettiamo di avere 40Mln di deleghe e 1Mln di
transazioni nel giorno di picco (6Mln durante tutto
l’anno)
Ok cosa vorremmo ce lo siamo "detti" ma quali sono
le previsioni per questa roba? Come dimensioniamo
il tutto?
Il nostro primo aggregato (2.0)
Trattamento Deleghe
• Requisiti non funzionali:
– Scalabilità (Tempo di risposta < 2 sec)
– Sicurezza
– RPO & RTO  minuti (se possibile 0) 
– High Availability
Trattamento Deleghe - le nostre scelte
• Mutua Autenticazione
• Messaging per scalare orizzontalmente
• CQRS per garantirci la consistenza dell’aggregato e
la maneggevolezza di un read model agnostico
rispetto al salvataggio
• Accettare di essere «in fine consistenti»
• CommandLog oltre all’EventLog in altro
datacenter per replicare i comandi fuori «backup»
• Azure per garantirci SLA accettabili senza
richiedere sforzi infrastrutturali da parte nostra
• Rebus per «wrappare» il transport
Trattamento Deleghe
Azure
Deliver
Rebus
Payment
Rebus
Feed
Rebus
Azure Service Bus
Worker
Service
Rebus
E
F
Sql Azure (limite imposto)
PostgreSQL (limite imposto)
Nel prossimo futuro
E
F
Sql Azure (limite imposto)
PostgreSQL (limite imposto)
Nel prossimo futuro
Write Model
Read Model
Guardians
Forniture Massive
• Requisiti funzionali a maggior impatto
– Non modificare i gestionali dei fornitori
– Adattabilità a diversi formati di forniture
– Per le forniture manuali fornire uno strumento in grado di
guidare durante la lavorazione e calato nei processi aziendali
• Controlli di qualità
• Monitoraggio dei processi
• Rispetto dei SLA
– Per le forniture «standard» eseguire un processo automatico
che però sia anche monitorabile
• Requisiti non funzionali:
– Scalabilità
– RPO & RTO in Ore
Forniture Massive – Le nostre scelte
• Microservices
• Creare degli interpreti per i file prodotti dai
verticali (Mapper)
• Projection degli eventi relativi alle forniture su un
read model delle forniture massive a supporto
dell’applicazione di monitoring (o auditing)
• Allarmi in caso di superamento di una delle
tempistiche all’interno dello SLA
Forniture Massive
Sql Azure
Ricezione
sFTP Server
Rebus
Rabbit MQ
Mapper
Accettazione
Importazione
PM
Generazione
Ricevute
Audit /
Monitoring
Pubblicazione /
Denorm.
Fornitura
Trattamento
Deleghe
Desktop
Application
Forniture Massive - PM
PM IAmStartedBy<FornituraDiImportazioneRegistrataEvent>
Fornitore FTP Ricezione PM Mapper Accettazione Importazione Pubblicazione Gen. Ric
Carica
File
Polling FornituraRegistrata
Subscribe
FornituraRegistrata
Subscribe
FornituraMappata
Subscribe
ContrattoValidato
Subscribe
FornituraImportata
Subscribe
FornituraPubblicata
MappaFornitura
For. Mappata
ValidaContratto
ContrattoValidato
ImportaFornitura
FornituraImportata
PubblicaFornitura
FornituraPubblicata
GeneraRicevuta
RicevutaGenerata
Contratti
• Il vero core
– Tutti i contesti vogliono sapere qualcosa dei
contratti.
– Ai contratti c’è attaccato il pricing, quindi è qui che
gli diciamo come contare i soldi che facciamo o che
faremo 
Contratti
Contratti
• Requisiti
• Possibilità per gli account manager di registrare
contratti dall’esterno
• Mi interessa sapere lo stato del mio contratto nel
tempo e poter eventualmente fare previsioni su quale
sarà o sarebbe potuto essere lo stato del mio sistema
se l’account manager avesse fatto scelte differenti
• Presente all’inizio e di recente eliminato
Contratti – Le nostre scelte
• Applicazione web («classico» html/angular/web
api)
– Di recente abbiamo switchato su sola
autenticazione Windows perché il requisito è
cambiato
• ES implementato usando NEventStore (forkato)
Contratti
WebApp
Web API
Aggregato
BusPulser «ContrattiPM»
ProjectionsEventStore
Repository
ReadModel
Altri contesti
Produzione
• Facile o difficile?
Questione di punti
di vista.
– Stress test
– Penetration test
– Metriche
– Scaling
Domande?
Link-o-grafia
• http://ziobrando.blogspot.it/search/label/EventSt
orming
• http://martinfowler.com/articles/microservices.ht
ml
• http://Commitstrip.com
• https://github.com/rebus-org/Rebus
• https://github.com/NEventStore/NEventStore

Mais conteúdo relacionado

Destaque

Mini-curso de Podcast
Mini-curso de  PodcastMini-curso de  Podcast
Mini-curso de PodcastVanessa Bohn
 
RILA 2011 ePoster - Trading Places: Empowering Users Through the Cephalonian ...
RILA 2011 ePoster - Trading Places: Empowering Users Through the Cephalonian ...RILA 2011 ePoster - Trading Places: Empowering Users Through the Cephalonian ...
RILA 2011 ePoster - Trading Places: Empowering Users Through the Cephalonian ...Amanda Izenstark
 
Easter in Poland
Easter in PolandEaster in Poland
Easter in Polandjazelgra
 
bảng giá thiết kế video quảng cáo tốt nhất
bảng giá thiết kế video quảng cáo tốt nhấtbảng giá thiết kế video quảng cáo tốt nhất
bảng giá thiết kế video quảng cáo tốt nhấtvergie515
 
Ciudad de lille
Ciudad de lilleCiudad de lille
Ciudad de lilleAs Andres
 

Destaque (10)

Mini-curso de Podcast
Mini-curso de  PodcastMini-curso de  Podcast
Mini-curso de Podcast
 
RILA 2011 ePoster - Trading Places: Empowering Users Through the Cephalonian ...
RILA 2011 ePoster - Trading Places: Empowering Users Through the Cephalonian ...RILA 2011 ePoster - Trading Places: Empowering Users Through the Cephalonian ...
RILA 2011 ePoster - Trading Places: Empowering Users Through the Cephalonian ...
 
Music magazine covers
Music magazine coversMusic magazine covers
Music magazine covers
 
Easter in Poland
Easter in PolandEaster in Poland
Easter in Poland
 
Pitch magazine
Pitch magazinePitch magazine
Pitch magazine
 
ECG Interpretation
ECG InterpretationECG Interpretation
ECG Interpretation
 
bảng giá thiết kế video quảng cáo tốt nhất
bảng giá thiết kế video quảng cáo tốt nhấtbảng giá thiết kế video quảng cáo tốt nhất
bảng giá thiết kế video quảng cáo tốt nhất
 
Media quesiton 3
Media quesiton 3Media quesiton 3
Media quesiton 3
 
Audacity
Audacity   Audacity
Audacity
 
Ciudad de lille
Ciudad de lilleCiudad de lille
Ciudad de lille
 

Semelhante a F24ZZ - DDD applicato

2015 CLOUD LOGIN - Servizi su Piattaforma Softlayer
2015 CLOUD LOGIN - Servizi su Piattaforma Softlayer2015 CLOUD LOGIN - Servizi su Piattaforma Softlayer
2015 CLOUD LOGIN - Servizi su Piattaforma SoftlayerServiceCloud - Esprinet
 
festival ICT 2013: Versatilità del Cloud Computing: dalle APP al Disaster Rec...
festival ICT 2013: Versatilità del Cloud Computing: dalle APP al Disaster Rec...festival ICT 2013: Versatilità del Cloud Computing: dalle APP al Disaster Rec...
festival ICT 2013: Versatilità del Cloud Computing: dalle APP al Disaster Rec...festival ICT 2016
 
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS Imola Informatica
 
7° CLOUD WEBINAR - 20141218 - Servizi Cloud Gestiti su piattaforma Softlayer
7° CLOUD WEBINAR - 20141218 - Servizi Cloud Gestiti su piattaforma Softlayer7° CLOUD WEBINAR - 20141218 - Servizi Cloud Gestiti su piattaforma Softlayer
7° CLOUD WEBINAR - 20141218 - Servizi Cloud Gestiti su piattaforma SoftlayerServiceCloud - Esprinet
 
Progettare e sviluppare soluzioni serverless con AWS
Progettare e sviluppare soluzioni serverless con AWSProgettare e sviluppare soluzioni serverless con AWS
Progettare e sviluppare soluzioni serverless con AWSsparkfabrik
 
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFSLa nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFSMorlini Gabriele
 
Mobile app and disaster recovery with aws
Mobile app and disaster recovery with awsMobile app and disaster recovery with aws
Mobile app and disaster recovery with awsPaolo latella
 
ETL on Cloud: Azure Data Factory
ETL on Cloud: Azure Data FactoryETL on Cloud: Azure Data Factory
ETL on Cloud: Azure Data FactoryLeonardo Marcucci
 
Praticamente... AWS - Amazon Web Services
Praticamente... AWS - Amazon Web ServicesPraticamente... AWS - Amazon Web Services
Praticamente... AWS - Amazon Web ServicesSpeck&Tech
 
Confio Ignite - webinar by Matteo Durighetto
Confio Ignite - webinar by Matteo DurighettoConfio Ignite - webinar by Matteo Durighetto
Confio Ignite - webinar by Matteo DurighettoMiriade Spa
 
Cloud for sap evento15.4
Cloud for sap evento15.4Cloud for sap evento15.4
Cloud for sap evento15.4Otello Costa
 
VMUGIT - Virtualizzare con i piedi per terra
VMUGIT - Virtualizzare con i piedi per terraVMUGIT - Virtualizzare con i piedi per terra
VMUGIT - Virtualizzare con i piedi per terraVMUG IT
 
Open Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studioOpen Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studioPar-Tec S.p.A.
 
October 2009 - JBoss Cloud
October 2009 - JBoss CloudOctober 2009 - JBoss Cloud
October 2009 - JBoss CloudJBug Italy
 
JBoss Clouds - JBug Roma october 2009
JBoss Clouds -  JBug Roma october 2009JBoss Clouds -  JBug Roma october 2009
JBoss Clouds - JBug Roma october 2009Sanne Grinovero
 
Industrial iot: dalle parole ai fatti
Industrial iot: dalle parole ai fatti Industrial iot: dalle parole ai fatti
Industrial iot: dalle parole ai fatti Riccardo Zamana
 

Semelhante a F24ZZ - DDD applicato (20)

Laravel & Passport
Laravel & PassportLaravel & Passport
Laravel & Passport
 
2015 CLOUD LOGIN - Servizi su Piattaforma Softlayer
2015 CLOUD LOGIN - Servizi su Piattaforma Softlayer2015 CLOUD LOGIN - Servizi su Piattaforma Softlayer
2015 CLOUD LOGIN - Servizi su Piattaforma Softlayer
 
festival ICT 2013: Versatilità del Cloud Computing: dalle APP al Disaster Rec...
festival ICT 2013: Versatilità del Cloud Computing: dalle APP al Disaster Rec...festival ICT 2013: Versatilità del Cloud Computing: dalle APP al Disaster Rec...
festival ICT 2013: Versatilità del Cloud Computing: dalle APP al Disaster Rec...
 
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
 
7° CLOUD WEBINAR - 20141218 - Servizi Cloud Gestiti su piattaforma Softlayer
7° CLOUD WEBINAR - 20141218 - Servizi Cloud Gestiti su piattaforma Softlayer7° CLOUD WEBINAR - 20141218 - Servizi Cloud Gestiti su piattaforma Softlayer
7° CLOUD WEBINAR - 20141218 - Servizi Cloud Gestiti su piattaforma Softlayer
 
Progettare e sviluppare soluzioni serverless con AWS
Progettare e sviluppare soluzioni serverless con AWSProgettare e sviluppare soluzioni serverless con AWS
Progettare e sviluppare soluzioni serverless con AWS
 
2015 CLOUD LOGIN - DR e BR
2015 CLOUD LOGIN - DR e BR2015 CLOUD LOGIN - DR e BR
2015 CLOUD LOGIN - DR e BR
 
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFSLa nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
 
Mobile app and disaster recovery with aws
Mobile app and disaster recovery with awsMobile app and disaster recovery with aws
Mobile app and disaster recovery with aws
 
ETL on Cloud: Azure Data Factory
ETL on Cloud: Azure Data FactoryETL on Cloud: Azure Data Factory
ETL on Cloud: Azure Data Factory
 
Praticamente... AWS - Amazon Web Services
Praticamente... AWS - Amazon Web ServicesPraticamente... AWS - Amazon Web Services
Praticamente... AWS - Amazon Web Services
 
Confio Ignite - webinar by Matteo Durighetto
Confio Ignite - webinar by Matteo DurighettoConfio Ignite - webinar by Matteo Durighetto
Confio Ignite - webinar by Matteo Durighetto
 
Cloud for sap evento15.4
Cloud for sap evento15.4Cloud for sap evento15.4
Cloud for sap evento15.4
 
VMUGIT - Virtualizzare con i piedi per terra
VMUGIT - Virtualizzare con i piedi per terraVMUGIT - Virtualizzare con i piedi per terra
VMUGIT - Virtualizzare con i piedi per terra
 
Presentazione Unibo
Presentazione UniboPresentazione Unibo
Presentazione Unibo
 
Open Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studioOpen Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studio
 
October 2009 - JBoss Cloud
October 2009 - JBoss CloudOctober 2009 - JBoss Cloud
October 2009 - JBoss Cloud
 
JBoss Clouds - JBug Roma october 2009
JBoss Clouds -  JBug Roma october 2009JBoss Clouds -  JBug Roma october 2009
JBoss Clouds - JBug Roma october 2009
 
Cloud in Action_6 giugno 2014
Cloud in Action_6 giugno 2014Cloud in Action_6 giugno 2014
Cloud in Action_6 giugno 2014
 
Industrial iot: dalle parole ai fatti
Industrial iot: dalle parole ai fatti Industrial iot: dalle parole ai fatti
Industrial iot: dalle parole ai fatti
 

F24ZZ - DDD applicato

  • 3. Agenda • Esplorazione del dominio – Dall’idea ad una parete piena di post-it • Context Map – Requisiti dei singoli contesti e come abbiamo risposto agli stessi • Produzione – Facile o difficile?
  • 4. Giorno 1: idea • Abbiamo pensato ad un nuovo progetto – Codename ZeroCode (dopo F24ZZ) • L’idea di fondo è che sia un contenitore di F24 a disposizione degli sportelli bancari per velocizzare il processo di pagamento allo sportello. • Lo sportello, al completamento del pagamento, ci farà sapere che il pagamento è avvenuto Facile no?!
  • 6. Ciclo F24ZZ Produttori di deleghe F24 PSP Contribuente F24ZZ Facile no?!
  • 8. Facciamo un passo indietro… Q: A: Event Storming is a workshop format for quickly exploring complex business domains. Cit: Alberto Brandolini (link alla fine) Come posso esplorare un dominio che mi è sconosciuto facendo emergere nel più breve tempo possibile i requisiti che sono scontati per gli stackholder?
  • 9. Giorno 2: EventStorming • Il primo errore – «4 post-it in croce» Delega Caricata Delega Pagata Delega Stornata Paga Delega Storna Delega Storna Delega
  • 10. Giorno 3: EventStorming «fatto meglio»
  • 11. Giorno 4: EventStorming «definitivo»
  • 13. I Numeri Q: A: Ci aspettiamo di avere 40Mln di deleghe e 1Mln di transazioni nel giorno di picco (6Mln durante tutto l’anno) Ok cosa vorremmo ce lo siamo "detti" ma quali sono le previsioni per questa roba? Come dimensioniamo il tutto?
  • 14. Il nostro primo aggregato (2.0)
  • 15. Trattamento Deleghe • Requisiti non funzionali: – Scalabilità (Tempo di risposta < 2 sec) – Sicurezza – RPO & RTO  minuti (se possibile 0)  – High Availability
  • 16. Trattamento Deleghe - le nostre scelte • Mutua Autenticazione • Messaging per scalare orizzontalmente • CQRS per garantirci la consistenza dell’aggregato e la maneggevolezza di un read model agnostico rispetto al salvataggio • Accettare di essere «in fine consistenti» • CommandLog oltre all’EventLog in altro datacenter per replicare i comandi fuori «backup» • Azure per garantirci SLA accettabili senza richiedere sforzi infrastrutturali da parte nostra • Rebus per «wrappare» il transport
  • 17. Trattamento Deleghe Azure Deliver Rebus Payment Rebus Feed Rebus Azure Service Bus Worker Service Rebus E F Sql Azure (limite imposto) PostgreSQL (limite imposto) Nel prossimo futuro E F Sql Azure (limite imposto) PostgreSQL (limite imposto) Nel prossimo futuro Write Model Read Model Guardians
  • 18. Forniture Massive • Requisiti funzionali a maggior impatto – Non modificare i gestionali dei fornitori – Adattabilità a diversi formati di forniture – Per le forniture manuali fornire uno strumento in grado di guidare durante la lavorazione e calato nei processi aziendali • Controlli di qualità • Monitoraggio dei processi • Rispetto dei SLA – Per le forniture «standard» eseguire un processo automatico che però sia anche monitorabile • Requisiti non funzionali: – Scalabilità – RPO & RTO in Ore
  • 19. Forniture Massive – Le nostre scelte • Microservices • Creare degli interpreti per i file prodotti dai verticali (Mapper) • Projection degli eventi relativi alle forniture su un read model delle forniture massive a supporto dell’applicazione di monitoring (o auditing) • Allarmi in caso di superamento di una delle tempistiche all’interno dello SLA
  • 20. Forniture Massive Sql Azure Ricezione sFTP Server Rebus Rabbit MQ Mapper Accettazione Importazione PM Generazione Ricevute Audit / Monitoring Pubblicazione / Denorm. Fornitura Trattamento Deleghe Desktop Application
  • 21. Forniture Massive - PM PM IAmStartedBy<FornituraDiImportazioneRegistrataEvent> Fornitore FTP Ricezione PM Mapper Accettazione Importazione Pubblicazione Gen. Ric Carica File Polling FornituraRegistrata Subscribe FornituraRegistrata Subscribe FornituraMappata Subscribe ContrattoValidato Subscribe FornituraImportata Subscribe FornituraPubblicata MappaFornitura For. Mappata ValidaContratto ContrattoValidato ImportaFornitura FornituraImportata PubblicaFornitura FornituraPubblicata GeneraRicevuta RicevutaGenerata
  • 22. Contratti • Il vero core – Tutti i contesti vogliono sapere qualcosa dei contratti. – Ai contratti c’è attaccato il pricing, quindi è qui che gli diciamo come contare i soldi che facciamo o che faremo 
  • 24. Contratti • Requisiti • Possibilità per gli account manager di registrare contratti dall’esterno • Mi interessa sapere lo stato del mio contratto nel tempo e poter eventualmente fare previsioni su quale sarà o sarebbe potuto essere lo stato del mio sistema se l’account manager avesse fatto scelte differenti • Presente all’inizio e di recente eliminato
  • 25. Contratti – Le nostre scelte • Applicazione web («classico» html/angular/web api) – Di recente abbiamo switchato su sola autenticazione Windows perché il requisito è cambiato • ES implementato usando NEventStore (forkato)
  • 27. Produzione • Facile o difficile? Questione di punti di vista. – Stress test – Penetration test – Metriche – Scaling
  • 29. Link-o-grafia • http://ziobrando.blogspot.it/search/label/EventSt orming • http://martinfowler.com/articles/microservices.ht ml • http://Commitstrip.com • https://github.com/rebus-org/Rebus • https://github.com/NEventStore/NEventStore