smontare il monolite delphi redis · tanti servizi che lavorano insieme un servizio si occupa di...
TRANSCRIPT
![Page 1: SMONTARE IL MONOLITE Delphi Redis · Tanti servizi che lavorano insieme Un servizio si occupa di una sola cosa (una cosa ≠ una API) Single responsibility principle Filosofia unix:](https://reader035.vdocuments.mx/reader035/viewer/2022071213/60324a46e0ded43d400877ee/html5/thumbnails/1.jpg)
Delphi ❤ Redis
SMONTARE IL MONOLITE
![Page 3: SMONTARE IL MONOLITE Delphi Redis · Tanti servizi che lavorano insieme Un servizio si occupa di una sola cosa (una cosa ≠ una API) Single responsibility principle Filosofia unix:](https://reader035.vdocuments.mx/reader035/viewer/2022071213/60324a46e0ded43d400877ee/html5/thumbnails/3.jpg)
➔ Microservices➔ Cos’è REDIS➔ Casi d’uso➔ Comandi principali➔ Esempi
AGENDA
![Page 4: SMONTARE IL MONOLITE Delphi Redis · Tanti servizi che lavorano insieme Un servizio si occupa di una sola cosa (una cosa ≠ una API) Single responsibility principle Filosofia unix:](https://reader035.vdocuments.mx/reader035/viewer/2022071213/60324a46e0ded43d400877ee/html5/thumbnails/4.jpg)
![Page 5: SMONTARE IL MONOLITE Delphi Redis · Tanti servizi che lavorano insieme Un servizio si occupa di una sola cosa (una cosa ≠ una API) Single responsibility principle Filosofia unix:](https://reader035.vdocuments.mx/reader035/viewer/2022071213/60324a46e0ded43d400877ee/html5/thumbnails/5.jpg)
➔ Tanti servizi che lavorano insieme➔ Un servizio si occupa di una sola cosa
(una cosa ≠ una API)➔ Single responsibility principle➔ Filosofia unix: una solo cosa fatta bene
➔ Attenzione a non creare “Nanoservice”
COSA SONO
![Page 6: SMONTARE IL MONOLITE Delphi Redis · Tanti servizi che lavorano insieme Un servizio si occupa di una sola cosa (una cosa ≠ una API) Single responsibility principle Filosofia unix:](https://reader035.vdocuments.mx/reader035/viewer/2022071213/60324a46e0ded43d400877ee/html5/thumbnails/6.jpg)
➔ Shared library (DLL)➔ Moduli➔ Delphi package
NOVITÀ?
![Page 7: SMONTARE IL MONOLITE Delphi Redis · Tanti servizi che lavorano insieme Un servizio si occupa di una sola cosa (una cosa ≠ una API) Single responsibility principle Filosofia unix:](https://reader035.vdocuments.mx/reader035/viewer/2022071213/60324a46e0ded43d400877ee/html5/thumbnails/7.jpg)
➔ Lavoro diviso su più team➔ Applicazioni più piccole➔ Continuous deployment➔ Scalabilità: più copie su più macchine➔ Molti framework, architetture e linguaggi
di programmazione
PRO
![Page 8: SMONTARE IL MONOLITE Delphi Redis · Tanti servizi che lavorano insieme Un servizio si occupa di una sola cosa (una cosa ≠ una API) Single responsibility principle Filosofia unix:](https://reader035.vdocuments.mx/reader035/viewer/2022071213/60324a46e0ded43d400877ee/html5/thumbnails/8.jpg)
➔ Complessità◆ Collaborazione tra i servizi◆ Individuazione dei servizi◆ Consistenza◆ Performance◆ Deployment◆ Autenticazione e sicurezza
CONTRO
![Page 9: SMONTARE IL MONOLITE Delphi Redis · Tanti servizi che lavorano insieme Un servizio si occupa di una sola cosa (una cosa ≠ una API) Single responsibility principle Filosofia unix:](https://reader035.vdocuments.mx/reader035/viewer/2022071213/60324a46e0ded43d400877ee/html5/thumbnails/9.jpg)
➔ Monolitico non è sempre una cattiva idea◆ Permette uno sviluppo più rapido nelle prime fasi
del progetto◆ Va bene all’inizio ma può trasformarsi in una
giungla inestricabile◆ Non è male quando c’è un singolo team che ci
lavora
QUINDI?
![Page 10: SMONTARE IL MONOLITE Delphi Redis · Tanti servizi che lavorano insieme Un servizio si occupa di una sola cosa (una cosa ≠ una API) Single responsibility principle Filosofia unix:](https://reader035.vdocuments.mx/reader035/viewer/2022071213/60324a46e0ded43d400877ee/html5/thumbnails/10.jpg)
➔ Data store◆ Ogni servizio dovrebbe avere il suo DB/storage
➔ Logica applicativa➔ Comunicazione con l’esterno
◆ Sincrona (ReST, SOAP, RPC, ...)◆ Asincrona (code)
COM’È FATTO?
![Page 11: SMONTARE IL MONOLITE Delphi Redis · Tanti servizi che lavorano insieme Un servizio si occupa di una sola cosa (una cosa ≠ una API) Single responsibility principle Filosofia unix:](https://reader035.vdocuments.mx/reader035/viewer/2022071213/60324a46e0ded43d400877ee/html5/thumbnails/11.jpg)
![Page 12: SMONTARE IL MONOLITE Delphi Redis · Tanti servizi che lavorano insieme Un servizio si occupa di una sola cosa (una cosa ≠ una API) Single responsibility principle Filosofia unix:](https://reader035.vdocuments.mx/reader035/viewer/2022071213/60324a46e0ded43d400877ee/html5/thumbnails/12.jpg)
➔ REmote DIctionary Server➔ Sviluppato da Salvatore Sanfilippo (aka
antirez) nel 2009➔ Licenza BSD➔ Key-Value database con persistenza
opzionale (lavora in memoria)➔ Performance
REDIS
![Page 13: SMONTARE IL MONOLITE Delphi Redis · Tanti servizi che lavorano insieme Un servizio si occupa di una sola cosa (una cosa ≠ una API) Single responsibility principle Filosofia unix:](https://reader035.vdocuments.mx/reader035/viewer/2022071213/60324a46e0ded43d400877ee/html5/thumbnails/13.jpg)
➔ Strings➔ Lists➔ Sets➔ Sorted Sets (value + score)➔ Hashes
TIPI DI DATI
![Page 14: SMONTARE IL MONOLITE Delphi Redis · Tanti servizi che lavorano insieme Un servizio si occupa di una sola cosa (una cosa ≠ una API) Single responsibility principle Filosofia unix:](https://reader035.vdocuments.mx/reader035/viewer/2022071213/60324a46e0ded43d400877ee/html5/thumbnails/14.jpg)
➔ Performace (100k SET/s - >80k GET/s)➔ Built-in replication➔ Lua scripting➔ LRU (Least recently used) eviction*➔ Transazioni➔ Diversi livelli di persistenza su disco➔ High availability con Redis Sentinel
FUNZIONALITÀ
* Disponibile anche LFU da Redis 4.0
![Page 15: SMONTARE IL MONOLITE Delphi Redis · Tanti servizi che lavorano insieme Un servizio si occupa di una sola cosa (una cosa ≠ una API) Single responsibility principle Filosofia unix:](https://reader035.vdocuments.mx/reader035/viewer/2022071213/60324a46e0ded43d400877ee/html5/thumbnails/15.jpg)
➔ In “Snapshotting mode” salva un dump della memoria ogni:◆ X secondi◆ Y operazioni
➔ Quello che viene salvato è uno snapshot della memoria
➔ Se il server muore tra uno snapshot e l’altro i dati vengono persi
PERSISTENZA 1/3
![Page 16: SMONTARE IL MONOLITE Delphi Redis · Tanti servizi che lavorano insieme Un servizio si occupa di una sola cosa (una cosa ≠ una API) Single responsibility principle Filosofia unix:](https://reader035.vdocuments.mx/reader035/viewer/2022071213/60324a46e0ded43d400877ee/html5/thumbnails/16.jpg)
➔ Modalità Append-Only File (AOF)➔ Ogni comando viene salvato su file➔ Diverse modalità
◆ fsync() per ogni comando◆ fsync() ogni secondo◆ Lascia decidere l’OS
PERSISTENZA 2/3
![Page 17: SMONTARE IL MONOLITE Delphi Redis · Tanti servizi che lavorano insieme Un servizio si occupa di una sola cosa (una cosa ≠ una API) Single responsibility principle Filosofia unix:](https://reader035.vdocuments.mx/reader035/viewer/2022071213/60324a46e0ded43d400877ee/html5/thumbnails/17.jpg)
➔ Nessuna persistenza...
PERSISTENZA 3/3
![Page 18: SMONTARE IL MONOLITE Delphi Redis · Tanti servizi che lavorano insieme Un servizio si occupa di una sola cosa (una cosa ≠ una API) Single responsibility principle Filosofia unix:](https://reader035.vdocuments.mx/reader035/viewer/2022071213/60324a46e0ded43d400877ee/html5/thumbnails/18.jpg)
➔ Cache lato server➔ Invio di messaggi asincroni tra vari
moduli dell'applicazione➔ Gestione dello stato dell’applicazione➔ Sincronizzazione tra microservizi➔ Database temporaneo
CASI D’USO
![Page 19: SMONTARE IL MONOLITE Delphi Redis · Tanti servizi che lavorano insieme Un servizio si occupa di una sola cosa (una cosa ≠ una API) Single responsibility principle Filosofia unix:](https://reader035.vdocuments.mx/reader035/viewer/2022071213/60324a46e0ded43d400877ee/html5/thumbnails/19.jpg)
Keys: inserimento di coppie chiave/valoreLists: gestione di liste, code, pile, ecc.Pub/Sub: messaggi Publish/Subscribe Scripting: Esecuzione di script server sideSets: gestione di set di valoriStrings: permette di manipolare chiavi di tipo stringaTransactions: permette di eseguire più comandi garantendo l’atomicità
COMANDI
![Page 20: SMONTARE IL MONOLITE Delphi Redis · Tanti servizi che lavorano insieme Un servizio si occupa di una sola cosa (una cosa ≠ una API) Single responsibility principle Filosofia unix:](https://reader035.vdocuments.mx/reader035/viewer/2022071213/60324a46e0ded43d400877ee/html5/thumbnails/20.jpg)
demo time
![Page 21: SMONTARE IL MONOLITE Delphi Redis · Tanti servizi che lavorano insieme Un servizio si occupa di una sola cosa (una cosa ≠ una API) Single responsibility principle Filosofia unix:](https://reader035.vdocuments.mx/reader035/viewer/2022071213/60324a46e0ded43d400877ee/html5/thumbnails/21.jpg)
https://github.com/danieleteti/delphiredisclient
➔ Delphi Redis Client➔ Sviluppata da Daniele Teti (Apache license)➔ Due versioni
◆ Redis Client versione 2: Delphi Berlin o superiore◆ Redis Client versione 1: Delphi XE5 o superiore
➔ Piattaforme◆ Win32/64◆ Mobile◆ Linux (solo versione 2)
DELPHI
![Page 22: SMONTARE IL MONOLITE Delphi Redis · Tanti servizi che lavorano insieme Un servizio si occupa di una sola cosa (una cosa ≠ una API) Single responsibility principle Filosofia unix:](https://reader035.vdocuments.mx/reader035/viewer/2022071213/60324a46e0ded43d400877ee/html5/thumbnails/22.jpg)
Esempiouses System.SysUtils, Redis.Commons, // Interfaces and types Redis.Client, // The client itself Redis.NetLib.INDY, // The tcp library used Redis.Values; // nullable types for redis commandsvar lRedis: IRedisClient;begin lRedis := TRedisClient.Create; lRedis.Connect; lRedis.&SET('firstname', 'Daniele');end;
![Page 23: SMONTARE IL MONOLITE Delphi Redis · Tanti servizi che lavorano insieme Un servizio si occupa di una sola cosa (una cosa ≠ una API) Single responsibility principle Filosofia unix:](https://reader035.vdocuments.mx/reader035/viewer/2022071213/60324a46e0ded43d400877ee/html5/thumbnails/23.jpg)
demo time
![Page 24: SMONTARE IL MONOLITE Delphi Redis · Tanti servizi che lavorano insieme Un servizio si occupa di una sola cosa (una cosa ≠ una API) Single responsibility principle Filosofia unix:](https://reader035.vdocuments.mx/reader035/viewer/2022071213/60324a46e0ded43d400877ee/html5/thumbnails/24.jpg)
THANK YOU