SlideShare une entreprise Scribd logo
1  sur  33
Télécharger pour lire hors ligne
Luigi Fugaro
Real Time Data
No CRDTs, no party!
Nell’IT da oltre 20 anni.
Mi sono sempre occupato di programmazione, partendo dal QuickBasic,
al Pascal, al Fortran, fino a Java nel 1996 con la prima specifica delle
Servlet.
La mia esperienza lavorativa comincia nel 1999, come WebMaster.
Da lì in poi è stato un susseguirsi di evoluzioni (e involuzioni ho fatto un
gestionale in Clipper 5.2) fino ad approdare in Red Hat nel 2012 dove sono
stato per oltre 7 anni - esperienza fantastica!
Successivamente sono entrato in Datadog, dove ho avuto il piacere di
conoscere il mondo del monitoraggio e dell’observability.
Nell’estate 2021, la chiamata Redis - tecnologia made in Italy.
Redis è quella tecnologia dove le architetture, i dati e le applicazioni
gioiscono nello stare insieme!
Luigi Fugaro
Solutions Architect
luigi.fugaro@redis.com
Contesto
1
Data
Big Data
Data Lake
I dati son dati!
Scritture concorrenti
3
Algoritmi noti (WIP)
Operational Transformation (OT)
(1989-2006)
Conflict-Free Replicated Data Types (CRDTs)
(2006-now)
|C|I|A|O|_|M|A|M|M|A|!|_
aggiungi “_MAMMA”
alla posizione 4
|0|1|2|3|4|5|6|7|8|9|0|
|C|I|A|O|!|
|C|I|A|O|!|!|_
|0|1|2|3|4|5|
|0|1|2|3|4|
aggiungi “!”
alla posizione 5
aggiungi “!”
alla posizione 11
aggiungi “_MAMMA”
alla posizione 4
|C|I|A|O|_|M|A|M|M|A|!|!|
|0|1|2|3|4|5|6|7|8|9|0|1|
|C|I|A|O|_|M|A|M|M|A|!|!|
|0|1|2|3|4|5|6|7|8|9|0|1|
Qualcuno l’ha notato?
CRDTs
4
|C|I|A|O|_|M|A|M|M|A|!|_
aggiungi “_MAMMA”
alla posizione 4
|0|1|2|3|4|5|6|7|8|9|0|
|C|I|A|O|!|
|C|I|A|O|!|!|_
|0|1|2|3|4|5|
|0|1|2|3|4|
aggiungi “!”
alla posizione 5
aggiungi “!”
alla posizione 5
aggiungi “_MAMMA”
alla posizione 4
|C|I|A|O|_|!|M|A|M|M|A|!|
|0|1|2|3|4|5|6|7|8|9|0|1|
|C|I|A|O|_|M|A|M|M|A|!|!|
|0|1|2|3|4|5|6|7|8|9|0|1|
|C|I|A|O|_|M|A|M|M|A|!|_
aggiungi “_MAMMA”
alla posizione 4
|0|1|2|3|4|5|6|7|8|9|0|
|C|I|A|O|!|
|C|I|A|O|!|!|_
|0|1|2|3|4|5|
|0|1|2|3|4|
aggiungi “!”
alla posizione 5
aggiungi “!”
alla posizione 5
aggiungi “_MAMMA”
alla posizione 4
|C|I|A|O|_|!|M|A|M|M|A|!|
|0|1|2|3|4|5|6|7|8|9|0|1|
|C|I|A|O|_|M|A|M|M|A|!|!|
|0|1|2|3|4|5|6|7|8|9|0|1|
Algoritmi basati su CRDTs
● Logoot - Interleaving anomalies
● LSEQ - Interleaving anomalies
● RGA - Interleaving anomalies free, quasi!
● Treedoc - no Interleaving anomalies
● WOOT - no Interleaving anomalies
● Astrong - Interleaving anomalies
Algoritmi basati su CRDTs
● LWW - Last Write Wins
○ Ogni mutazione ha il proprio timestamp unico. La
mutazione con il timestamp più alto vince.
● PN-Counters - Positive Negative Counters
○ Somma algebrica degli incrementi, meno, la
somma algebrica dei decrementi.
● OR-Set - Oberved Removed-Set
○ Se un elemento è aggiunto e rimosso, l’aggiunta
vince sulla cancellazione.
Qualcuno ha notato qualcosa di ambiguo?
Algoritmi basati su CRDTs
● LWW - Last Write Wins
○ Ogni mutazione ha il proprio timestamp unico. La
mutazione con il timestamp più alto vince.
● PN-Counters - Positive Negative Counters
○ Somma algebrica degli incrementi, meno, la
somma algebrica dei decrementi.
● OR-Set - Oberved Removed-Set
○ Se un elemento è aggiunto e rimosso, l’aggiunta
vince sulla cancellazione.
Codice Descrizione
1 Spesa
2 Posta
3 Tintoria
Codice Descrizione
1 Spesa
2 Posta
3 Tintoria
Esempio LWW
Codice Descrizione
1 Spesa
2 Posta
3 Tintoria
Codice Descrizione
1 Spesa
2 Posta
3 Tintoria
Codice Descrizione
1 Tintoria
2 Spesa
3 Posta
Codice Descrizione
1 Spesa
2 Tintoria
3 Posta
Codice Descrizione
1 Tintoria
2 Spesa
3 Posta
Codice Descrizione
1 Tintoria
2 Spesa
3 Posta
LWW
Esempio LWW
Sincronizziamo gli orologi
● Gli orologi non sono sincronizzati in un sistema
distribuito asincrono!
● Gli eventi devono essere ordinati per poter
essere processati in modo deterministico.
● Algoritmi di sincronizzazione del tempo:
○ Cristian’s algorithm
○ Berkley’s algorithm
○ NTP algorithm
● Logical timestamp → Vector Clocks
Vector Clocks
R1
R2
R3
(0,0,0)
(0,0,0)
(0,0,0)
(1,0,0) (3,0,0)
(2,2,1) (2,3,1)
(0,0,2)
(4,3,1)
(5,3,3)
(5,3,1)
(2,0,0)
(0,0,1)
(0,1,1)
Redis CRDTs
5
Redis ed i suoi CRDTs
Strings
Bitmaps
Bit fields
Hashes
Lists
Sets
Sorted Sets
Geospatial
HyperLogLog
Streams
KEY
Redis ed i suoi CRDTs
Strings
Bitmaps
Bit fields
Hashes
Lists
Sets
Sorted Sets
Geospatial
HyperLogLog
Streams
KEY
JSON
Search
Consistenza
4
Modelli di consistenza
Real Time Data
No CRDTs, no party!
Grazie!
l.fugaro@gmail.com
@foogaro
@foogaro
https:/
/www.linkedin.com/in/luigifugaro/

Contenu connexe

Similaire à Codemotion Milan '22 - Real Time Data - No CRDTs, no party!

Edsger W. Dijkstra - Flipped Classroom
Edsger W. Dijkstra - Flipped ClassroomEdsger W. Dijkstra - Flipped Classroom
Edsger W. Dijkstra - Flipped ClassroomAntonio De Piano
 
Jc06 Antonio Terreno Fluidtime
Jc06 Antonio Terreno FluidtimeJc06 Antonio Terreno Fluidtime
Jc06 Antonio Terreno FluidtimeAntonio Terreno
 
Google Dev Fest 2016 - Roma
Google Dev Fest 2016 - RomaGoogle Dev Fest 2016 - Roma
Google Dev Fest 2016 - Romagabriele nocco
 
Data Analysis & Machine Learning
Data Analysis & Machine LearningData Analysis & Machine Learning
Data Analysis & Machine LearningCaffeina
 
Azure IoT Central per lo SCADA engineer
Azure IoT Central per lo SCADA engineerAzure IoT Central per lo SCADA engineer
Azure IoT Central per lo SCADA engineerMarco Parenzan
 
Algoritmi ed architetture per la risoluzione di problemi di visual search
Algoritmi ed architetture per la risoluzione di problemi di visual searchAlgoritmi ed architetture per la risoluzione di problemi di visual search
Algoritmi ed architetture per la risoluzione di problemi di visual searchAlessandro D'Ambrosio
 
Layered Expression Trees feat. CQRS
Layered Expression Trees feat. CQRSLayered Expression Trees feat. CQRS
Layered Expression Trees feat. CQRSAndrea Saltarello
 
Loosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain modelLoosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain modelFrancesca1980
 
AdWorld Experience - Microtargeting
AdWorld Experience - MicrotargetingAdWorld Experience - Microtargeting
AdWorld Experience - MicrotargetingBooster Box
 
LiMapper e LiDAR360 - una panoramica di due nuovi software di modellazione 3D
LiMapper e LiDAR360 - una panoramica di due nuovi software di modellazione 3DLiMapper e LiDAR360 - una panoramica di due nuovi software di modellazione 3D
LiMapper e LiDAR360 - una panoramica di due nuovi software di modellazione 3DPaolo Corradeghini
 
Predictive Maintenance per le aziende del nord-est con Azure e IoT
Predictive Maintenance per le aziende del nord-est con Azure e IoTPredictive Maintenance per le aziende del nord-est con Azure e IoT
Predictive Maintenance per le aziende del nord-est con Azure e IoTMarco Parenzan
 
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015Codemotion
 
Elk - Elasticsearch Logstash Kibana stack explained
Elk - Elasticsearch Logstash Kibana stack explainedElk - Elasticsearch Logstash Kibana stack explained
Elk - Elasticsearch Logstash Kibana stack explainedFederico Panini
 
MySQL Day Milano 2019 - Il backup non ammette ignoranza
MySQL Day Milano 2019 - Il backup non ammette ignoranzaMySQL Day Milano 2019 - Il backup non ammette ignoranza
MySQL Day Milano 2019 - Il backup non ammette ignoranzaPar-Tec S.p.A.
 
Riccardo it starts_with_a_goal_DevOps_Heroes_Parma
Riccardo it starts_with_a_goal_DevOps_Heroes_ParmaRiccardo it starts_with_a_goal_DevOps_Heroes_Parma
Riccardo it starts_with_a_goal_DevOps_Heroes_ParmaRiccardo Porrini
 
TecnoWorkshop Taranto2013: OpenERP implementazione e migrazione da sistemi pr...
TecnoWorkshop Taranto2013: OpenERP implementazione e migrazione da sistemi pr...TecnoWorkshop Taranto2013: OpenERP implementazione e migrazione da sistemi pr...
TecnoWorkshop Taranto2013: OpenERP implementazione e migrazione da sistemi pr...Andrea Cometa
 

Similaire à Codemotion Milan '22 - Real Time Data - No CRDTs, no party! (20)

Edsger W. Dijkstra - Flipped Classroom
Edsger W. Dijkstra - Flipped ClassroomEdsger W. Dijkstra - Flipped Classroom
Edsger W. Dijkstra - Flipped Classroom
 
Jc06 Antonio Terreno Fluidtime
Jc06 Antonio Terreno FluidtimeJc06 Antonio Terreno Fluidtime
Jc06 Antonio Terreno Fluidtime
 
Google Dev Fest 2016 - Roma
Google Dev Fest 2016 - RomaGoogle Dev Fest 2016 - Roma
Google Dev Fest 2016 - Roma
 
Data Analysis & Machine Learning
Data Analysis & Machine LearningData Analysis & Machine Learning
Data Analysis & Machine Learning
 
F24ZZ - DDD applicato
F24ZZ - DDD applicatoF24ZZ - DDD applicato
F24ZZ - DDD applicato
 
Azure IoT Central per lo SCADA engineer
Azure IoT Central per lo SCADA engineerAzure IoT Central per lo SCADA engineer
Azure IoT Central per lo SCADA engineer
 
3DD 1e 1 Agosto Def Roadmap
3DD 1e 1 Agosto Def Roadmap3DD 1e 1 Agosto Def Roadmap
3DD 1e 1 Agosto Def Roadmap
 
Algoritmi ed architetture per la risoluzione di problemi di visual search
Algoritmi ed architetture per la risoluzione di problemi di visual searchAlgoritmi ed architetture per la risoluzione di problemi di visual search
Algoritmi ed architetture per la risoluzione di problemi di visual search
 
Layered Expression Trees feat. CQRS
Layered Expression Trees feat. CQRSLayered Expression Trees feat. CQRS
Layered Expression Trees feat. CQRS
 
Loosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain modelLoosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain model
 
AdWorld Experience - Microtargeting
AdWorld Experience - MicrotargetingAdWorld Experience - Microtargeting
AdWorld Experience - Microtargeting
 
LiMapper e LiDAR360 - una panoramica di due nuovi software di modellazione 3D
LiMapper e LiDAR360 - una panoramica di due nuovi software di modellazione 3DLiMapper e LiDAR360 - una panoramica di due nuovi software di modellazione 3D
LiMapper e LiDAR360 - una panoramica di due nuovi software di modellazione 3D
 
Predictive Maintenance per le aziende del nord-est con Azure e IoT
Predictive Maintenance per le aziende del nord-est con Azure e IoTPredictive Maintenance per le aziende del nord-est con Azure e IoT
Predictive Maintenance per le aziende del nord-est con Azure e IoT
 
Algorithmic Modeling
Algorithmic ModelingAlgorithmic Modeling
Algorithmic Modeling
 
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
 
Elk - Elasticsearch Logstash Kibana stack explained
Elk - Elasticsearch Logstash Kibana stack explainedElk - Elasticsearch Logstash Kibana stack explained
Elk - Elasticsearch Logstash Kibana stack explained
 
3DD 1e Salomone
3DD 1e Salomone3DD 1e Salomone
3DD 1e Salomone
 
MySQL Day Milano 2019 - Il backup non ammette ignoranza
MySQL Day Milano 2019 - Il backup non ammette ignoranzaMySQL Day Milano 2019 - Il backup non ammette ignoranza
MySQL Day Milano 2019 - Il backup non ammette ignoranza
 
Riccardo it starts_with_a_goal_DevOps_Heroes_Parma
Riccardo it starts_with_a_goal_DevOps_Heroes_ParmaRiccardo it starts_with_a_goal_DevOps_Heroes_Parma
Riccardo it starts_with_a_goal_DevOps_Heroes_Parma
 
TecnoWorkshop Taranto2013: OpenERP implementazione e migrazione da sistemi pr...
TecnoWorkshop Taranto2013: OpenERP implementazione e migrazione da sistemi pr...TecnoWorkshop Taranto2013: OpenERP implementazione e migrazione da sistemi pr...
TecnoWorkshop Taranto2013: OpenERP implementazione e migrazione da sistemi pr...
 

Plus de Luigi Fugaro

Ottimizzare le performance dell'API Server K8s come utilizzare cache e eventi...
Ottimizzare le performance dell'API Server K8s come utilizzare cache e eventi...Ottimizzare le performance dell'API Server K8s come utilizzare cache e eventi...
Ottimizzare le performance dell'API Server K8s come utilizzare cache e eventi...Luigi Fugaro
 
Sharp Coding 2023 - Luigi Fugaro - ACRE.pdf
Sharp Coding 2023 - Luigi Fugaro - ACRE.pdfSharp Coding 2023 - Luigi Fugaro - ACRE.pdf
Sharp Coding 2023 - Luigi Fugaro - ACRE.pdfLuigi Fugaro
 
Red Hat Summit Connect 2023 - Redis Enterprise, the engine of Generative AI
Red Hat Summit Connect 2023 - Redis Enterprise, the engine of Generative AIRed Hat Summit Connect 2023 - Redis Enterprise, the engine of Generative AI
Red Hat Summit Connect 2023 - Redis Enterprise, the engine of Generative AILuigi Fugaro
 
Unleashing the Power of Vector Search in .NET - DotNETConf2024.pdf
Unleashing the Power of Vector Search in .NET - DotNETConf2024.pdfUnleashing the Power of Vector Search in .NET - DotNETConf2024.pdf
Unleashing the Power of Vector Search in .NET - DotNETConf2024.pdfLuigi Fugaro
 
Unleashing the Power of Vector Search in .NET - SharpCoding2024.pdf
Unleashing the Power of Vector Search in .NET - SharpCoding2024.pdfUnleashing the Power of Vector Search in .NET - SharpCoding2024.pdf
Unleashing the Power of Vector Search in .NET - SharpCoding2024.pdfLuigi Fugaro
 
Caching Patterns for lazy devs for lazy loading - Luigi Fugaro VDTJAN23
Caching Patterns for lazy devs for lazy loading - Luigi Fugaro VDTJAN23Caching Patterns for lazy devs for lazy loading - Luigi Fugaro VDTJAN23
Caching Patterns for lazy devs for lazy loading - Luigi Fugaro VDTJAN23Luigi Fugaro
 
OpenSlava 2018 - Cloud Native Applications with OpenShift
OpenSlava 2018 - Cloud Native Applications with OpenShiftOpenSlava 2018 - Cloud Native Applications with OpenShift
OpenSlava 2018 - Cloud Native Applications with OpenShiftLuigi Fugaro
 
Redis - Non solo cache
Redis - Non solo cacheRedis - Non solo cache
Redis - Non solo cacheLuigi Fugaro
 
JDV for Codemotion Rome 2017
JDV for Codemotion Rome 2017JDV for Codemotion Rome 2017
JDV for Codemotion Rome 2017Luigi Fugaro
 
2.5tier Javaday (italian)
2.5tier Javaday (italian)2.5tier Javaday (italian)
2.5tier Javaday (italian)Luigi Fugaro
 

Plus de Luigi Fugaro (10)

Ottimizzare le performance dell'API Server K8s come utilizzare cache e eventi...
Ottimizzare le performance dell'API Server K8s come utilizzare cache e eventi...Ottimizzare le performance dell'API Server K8s come utilizzare cache e eventi...
Ottimizzare le performance dell'API Server K8s come utilizzare cache e eventi...
 
Sharp Coding 2023 - Luigi Fugaro - ACRE.pdf
Sharp Coding 2023 - Luigi Fugaro - ACRE.pdfSharp Coding 2023 - Luigi Fugaro - ACRE.pdf
Sharp Coding 2023 - Luigi Fugaro - ACRE.pdf
 
Red Hat Summit Connect 2023 - Redis Enterprise, the engine of Generative AI
Red Hat Summit Connect 2023 - Redis Enterprise, the engine of Generative AIRed Hat Summit Connect 2023 - Redis Enterprise, the engine of Generative AI
Red Hat Summit Connect 2023 - Redis Enterprise, the engine of Generative AI
 
Unleashing the Power of Vector Search in .NET - DotNETConf2024.pdf
Unleashing the Power of Vector Search in .NET - DotNETConf2024.pdfUnleashing the Power of Vector Search in .NET - DotNETConf2024.pdf
Unleashing the Power of Vector Search in .NET - DotNETConf2024.pdf
 
Unleashing the Power of Vector Search in .NET - SharpCoding2024.pdf
Unleashing the Power of Vector Search in .NET - SharpCoding2024.pdfUnleashing the Power of Vector Search in .NET - SharpCoding2024.pdf
Unleashing the Power of Vector Search in .NET - SharpCoding2024.pdf
 
Caching Patterns for lazy devs for lazy loading - Luigi Fugaro VDTJAN23
Caching Patterns for lazy devs for lazy loading - Luigi Fugaro VDTJAN23Caching Patterns for lazy devs for lazy loading - Luigi Fugaro VDTJAN23
Caching Patterns for lazy devs for lazy loading - Luigi Fugaro VDTJAN23
 
OpenSlava 2018 - Cloud Native Applications with OpenShift
OpenSlava 2018 - Cloud Native Applications with OpenShiftOpenSlava 2018 - Cloud Native Applications with OpenShift
OpenSlava 2018 - Cloud Native Applications with OpenShift
 
Redis - Non solo cache
Redis - Non solo cacheRedis - Non solo cache
Redis - Non solo cache
 
JDV for Codemotion Rome 2017
JDV for Codemotion Rome 2017JDV for Codemotion Rome 2017
JDV for Codemotion Rome 2017
 
2.5tier Javaday (italian)
2.5tier Javaday (italian)2.5tier Javaday (italian)
2.5tier Javaday (italian)
 

Codemotion Milan '22 - Real Time Data - No CRDTs, no party!

  • 1. Luigi Fugaro Real Time Data No CRDTs, no party!
  • 2. Nell’IT da oltre 20 anni. Mi sono sempre occupato di programmazione, partendo dal QuickBasic, al Pascal, al Fortran, fino a Java nel 1996 con la prima specifica delle Servlet. La mia esperienza lavorativa comincia nel 1999, come WebMaster. Da lì in poi è stato un susseguirsi di evoluzioni (e involuzioni ho fatto un gestionale in Clipper 5.2) fino ad approdare in Red Hat nel 2012 dove sono stato per oltre 7 anni - esperienza fantastica! Successivamente sono entrato in Datadog, dove ho avuto il piacere di conoscere il mondo del monitoraggio e dell’observability. Nell’estate 2021, la chiamata Redis - tecnologia made in Italy. Redis è quella tecnologia dove le architetture, i dati e le applicazioni gioiscono nello stare insieme! Luigi Fugaro Solutions Architect luigi.fugaro@redis.com
  • 7. I dati son dati!
  • 8.
  • 9.
  • 11. Algoritmi noti (WIP) Operational Transformation (OT) (1989-2006) Conflict-Free Replicated Data Types (CRDTs) (2006-now)
  • 12. |C|I|A|O|_|M|A|M|M|A|!|_ aggiungi “_MAMMA” alla posizione 4 |0|1|2|3|4|5|6|7|8|9|0| |C|I|A|O|!| |C|I|A|O|!|!|_ |0|1|2|3|4|5| |0|1|2|3|4| aggiungi “!” alla posizione 5 aggiungi “!” alla posizione 11 aggiungi “_MAMMA” alla posizione 4 |C|I|A|O|_|M|A|M|M|A|!|!| |0|1|2|3|4|5|6|7|8|9|0|1| |C|I|A|O|_|M|A|M|M|A|!|!| |0|1|2|3|4|5|6|7|8|9|0|1|
  • 15. |C|I|A|O|_|M|A|M|M|A|!|_ aggiungi “_MAMMA” alla posizione 4 |0|1|2|3|4|5|6|7|8|9|0| |C|I|A|O|!| |C|I|A|O|!|!|_ |0|1|2|3|4|5| |0|1|2|3|4| aggiungi “!” alla posizione 5 aggiungi “!” alla posizione 5 aggiungi “_MAMMA” alla posizione 4 |C|I|A|O|_|!|M|A|M|M|A|!| |0|1|2|3|4|5|6|7|8|9|0|1| |C|I|A|O|_|M|A|M|M|A|!|!| |0|1|2|3|4|5|6|7|8|9|0|1|
  • 16. |C|I|A|O|_|M|A|M|M|A|!|_ aggiungi “_MAMMA” alla posizione 4 |0|1|2|3|4|5|6|7|8|9|0| |C|I|A|O|!| |C|I|A|O|!|!|_ |0|1|2|3|4|5| |0|1|2|3|4| aggiungi “!” alla posizione 5 aggiungi “!” alla posizione 5 aggiungi “_MAMMA” alla posizione 4 |C|I|A|O|_|!|M|A|M|M|A|!| |0|1|2|3|4|5|6|7|8|9|0|1| |C|I|A|O|_|M|A|M|M|A|!|!| |0|1|2|3|4|5|6|7|8|9|0|1|
  • 17. Algoritmi basati su CRDTs ● Logoot - Interleaving anomalies ● LSEQ - Interleaving anomalies ● RGA - Interleaving anomalies free, quasi! ● Treedoc - no Interleaving anomalies ● WOOT - no Interleaving anomalies ● Astrong - Interleaving anomalies
  • 18. Algoritmi basati su CRDTs ● LWW - Last Write Wins ○ Ogni mutazione ha il proprio timestamp unico. La mutazione con il timestamp più alto vince. ● PN-Counters - Positive Negative Counters ○ Somma algebrica degli incrementi, meno, la somma algebrica dei decrementi. ● OR-Set - Oberved Removed-Set ○ Se un elemento è aggiunto e rimosso, l’aggiunta vince sulla cancellazione.
  • 19. Qualcuno ha notato qualcosa di ambiguo?
  • 20. Algoritmi basati su CRDTs ● LWW - Last Write Wins ○ Ogni mutazione ha il proprio timestamp unico. La mutazione con il timestamp più alto vince. ● PN-Counters - Positive Negative Counters ○ Somma algebrica degli incrementi, meno, la somma algebrica dei decrementi. ● OR-Set - Oberved Removed-Set ○ Se un elemento è aggiunto e rimosso, l’aggiunta vince sulla cancellazione.
  • 21. Codice Descrizione 1 Spesa 2 Posta 3 Tintoria Codice Descrizione 1 Spesa 2 Posta 3 Tintoria Esempio LWW
  • 22. Codice Descrizione 1 Spesa 2 Posta 3 Tintoria Codice Descrizione 1 Spesa 2 Posta 3 Tintoria Codice Descrizione 1 Tintoria 2 Spesa 3 Posta Codice Descrizione 1 Spesa 2 Tintoria 3 Posta Codice Descrizione 1 Tintoria 2 Spesa 3 Posta Codice Descrizione 1 Tintoria 2 Spesa 3 Posta LWW Esempio LWW
  • 23. Sincronizziamo gli orologi ● Gli orologi non sono sincronizzati in un sistema distribuito asincrono! ● Gli eventi devono essere ordinati per poter essere processati in modo deterministico. ● Algoritmi di sincronizzazione del tempo: ○ Cristian’s algorithm ○ Berkley’s algorithm ○ NTP algorithm ● Logical timestamp → Vector Clocks
  • 24. Vector Clocks R1 R2 R3 (0,0,0) (0,0,0) (0,0,0) (1,0,0) (3,0,0) (2,2,1) (2,3,1) (0,0,2) (4,3,1) (5,3,3) (5,3,1) (2,0,0) (0,0,1) (0,1,1)
  • 26. Redis ed i suoi CRDTs Strings Bitmaps Bit fields Hashes Lists Sets Sorted Sets Geospatial HyperLogLog Streams KEY
  • 27. Redis ed i suoi CRDTs Strings Bitmaps Bit fields Hashes Lists Sets Sorted Sets Geospatial HyperLogLog Streams KEY JSON Search
  • 30.
  • 31.
  • 32. Real Time Data No CRDTs, no party!