Sei sulla pagina 1di 6

BLOCKBENCH.

Con il rapido sviluppo delle tecnologie informatiche, una grande quantità di set di dati è stata
raccolta, consentendo di realizzare progetti nazionali e internazionali come Human Genome Project,
il progetto HapMap e Genotype-Tissue Expression (GTEx), che hanno prodotto dati di ricerca
inestimabili ed esteso i confini della conoscenza umana. Grazie al progresso della tecnologia
informatica, il costo dei test genomici sta diminuendo esponenzialmente.
La tecnologia blockchain ha ricevuto una crescente attenzione perché fornisce un nuovo paradigma
di scambio di valore. Sebbene derivi dalla criptovaluta, molti studi hanno esaminato l'adozione della
blockchain in diversi scenari applicativi oltre il dominio finanziario che tipicamente coinvolgono
più parti con conflitti di interessi come la condivisione dei dati personali, la catena di
approvvigionamento, l'identità gestione e gestione dei dati medici. Dimostrano che l'utilizzo della
tecnologia blockchain può ridurre l'attrito e aumentare la trasparenza. Un sistema blockchain ha
diverse caratteristiche degne di nota: decentralizzazione, immutabilità e trasparenza. Questi sono
ottenuti mediante hash crittografico, algoritmo di consenso e molte altre innovazioni da campi
precedentemente non correlati come la crittografia e il calcolo distribuito. A causa della limitazione
dello spazio, non introduciamo ulteriori dettagli sulle tecnologie blockchain e indirizziamo i lettori
interessati a sondaggi sulla blockchain.
Alcuni studi recenti della comunità di database considerano un sistema blockchain come un
database distribuito e tentano di migliorare le prestazioni di tale sistema esplorando nuovi modelli
di strati inferiori (come l'archiviazione o l'elaborazione delle transazioni) del sistema. Tuttavia,
senza considerare le caratteristiche dell'applicazione, tali modifiche sul motore di back-end del
sistema potrebbero non avere il miglioramento delle prestazioni desiderato su ogni applicazione o
addirittura causare effetti collaterali imprevisti.
Blockchain e Distributed Ledger stanno suscitando sempre più attenzione mediatica e sono
annoverati tra i trend digitali più interessanti. In particolare, la tecnologia di cui si parla è la
Blockchain, relativamente recente, nata infatti poco più di 10 anni fa con Bitcoin e le criptovalute.
La ragione della grande attenzione dedicata a questa tecnologia, e la vera innovazione introdotta
dalla Blockchain, è stato riuscire ad integrare in maniera efficace soluzioni tecnologiche ben
consolidate (come crittografia, funzioni di hash, mechanism design, sistemi distribuiti) per
realizzare un sistema di trasferimento di “valore" incensurabile, autonomo da garanti centrali e
potenzialmente anonimo. La portata rivoluzionaria va ricercata nel cambio di paradigma che porterà
alla creazione dell'Internet of Value: un sistema che, permette lo scambio di beni di valore senza
intermediari e in modo programmabile, attraverso i cosiddetti smart contract.
BLOCKBENCH è un sistema open source e contiene elaborazione dati carichi di lavoro
comunemente presenti nei benchmark di database. Serve come mezzo di confronto equo per
piattaforme diverse e consente una comprensione più approfondita delle diverse scelte di
progettazione del sistema. BLOCKBENCH è il primo framework di valutazione per l'analisi di
blockchain privata. Tale framework è stato progettato per l'analisi quantitativa di blockchain come
piattaforme di elaborazione dati. Il framework si rivolge ai privati blockchain con contratti
intelligenti completi di Turing. Qualsiasi blockchain privata può essere integrata a BLOCKBENCH
tramite semplici API e confrontata con carichi di lavoro basati su contratti intelligenti reali e
sintetici. BLOCKBENCH misura le prestazioni complessive e per componenti in termini di
throughput, latenza, scalabilità e tolleranza ai guasti.
BLOCKBENCH è il primo benchmark per lo studio e il confronto delle prestazioni delle blockchain
autorizzate. Sebbene i nodi in una blockchain autorizzata non si fidino ancora l'uno dell'altro, le loro
identità vengono autenticate, il che consente al sistema di utilizzare protocolli più efficienti per
tollerare gli errori bizantini rispetto alle impostazioni pubbliche.
Lo sviluppo di BLOCKBENCH comprende molte parti e si osserva che un'ampia varietà di scelte di
design viene effettuata tra piattaforme diverse in quasi ogni singolo dettaglio. In BLOCKBENCH,
dividiamo l'architettura blockchain in tre livelli modulari: il livello di consenso, il modello di dati e
il livello di esecuzione.

4.1 Blockbench design.


BLOCKBENCH prende di mira blockchain che funzionano come dati di elaborazione delle
piattaforme. Una tale blockchain non deve avere restrizioni sulle logiche dell'applicazione, quindi
deve supportare Turing contratti intelligenti completi. Identifichiamo quattro strati trovati in tutti
questi sistemi, e progettiamo i nostri carichi di lavoro per indirizzare questi livelli.

Figura 1:Livelli software blockchain e benchmark corrispondenti in blockbench.

Per ogni strato lì sono più carichi di lavoro BLOCKBENCH per valutarlo individualmente. Il livello
di consenso contiene protocolli tramite i quali un blocco viene considerato aggiunto alla
blockchain. Lo strato del “data model” contiene la struttura, il contenuto e operazioni sui dati
blockchain. Lo strato di esecuzione include i dettagli dell'ambiente di runtime che supporta le
operazioni di blockchain. Infine, lo strato dell'applicazione include classi di applicazioni
blockchain.
Consensus: Il ruolo del livello di consenso è far sì che tutti i nodi del sistema concordino sul
contenuto della blockchain. Cioè, se un nodo aggiunge (o esegue il commit) di un blocco, anche gli
altri nodi aggiungono lo stesso blocco alla loro copia della blockchain. I protocolli per raggiungere
il consenso nel modello di crash-failure svolgono un ruolo chiave nei database distribuiti, in cui i
nodi concordano su un ordine di transazione globale. I sistemi blockchain, d'altra parte, utilizzano
uno spettro di protocolli bizantini tolleranti ai guasti.
Data model: In Bitcoin, le transazioni sono cittadini di prima classe: sono stati di sistema che
rappresentano monete digitali nella rete. Le blockchain private partono da questo modello,
concentrandosi sugli account. Un vantaggio immediato è la semplicità, soprattutto per le
applicazioni che coinvolgono criptovalute. Ad esempio, il trasferimento di denaro da un utente a un
altro in Bitcoin comporta la ricerca di transazioni appartenenti al mittente, quindi contrassegnarne
alcune come spese, mentre è facilmente eseguibile in Ethereum aggiornando due account in
un'unica transazione.
Gli account smart contract di Ethereum combinano codice eseguibile e stati privati. Il codice può
leggere lo stato di altri conti non contrattuali e può inviare nuove transazioni. Hyperledger ha
account chiamati chaincode che sono come i contratti di Ethereum, solo il chaincode può accedere
solo al proprio archivio privato. La parità mantiene il contenuto del blocco in memoria. Ethereum e
Hyperledger utilizzano strutture dati a due livelli con archiviazione valore-chiave basata su disco.
Esistono anche variazioni negli alberi Merkle (ad es. Alberi Patricia-Merkle che supportano un
aggiornamento e una ricerca efficienti e alberi Bucket-Merkle che utilizzano l'hashing per
raggruppare gli stati in un elenco di bucket da cui viene costruito un albero Merkle).
Livello di esecuzione: Un contratto (o chaincode) viene eseguito in un ambiente di runtime. Un
requisito è che l'esecuzione deve essere veloce, perché ci sono più contratti e transazioni in un
blocco e devono essere tutti verificati dal nodo. Un altro è che l'esecuzione deve essere
deterministica, idealmente la stessa in tutti i nodi. L'esecuzione deterministica evita un'incoerenza
non necessaria nell'input e nell'output della transazione che porta all'aborto dei blocchi.
Applicazione: Molte applicazioni vengono proposte per blockchain, sfruttando le due proprietà
chiave di quest'ultima. Innanzitutto, i dati nella blockchain sono immutabili e trasparenti per i
partecipanti, il che significa che una volta che un record viene aggiunto, non può mai essere
modificato. In secondo luogo, resiste ai partecipanti disonesti e maliziosi. Anche in contesti
autorizzati, i partecipanti possono essere reciprocamente diffidenti. L'applicazione più popolare,
tuttavia, è ancora la criptovaluta.

4.2 Blockbench Implementation.


Gli strati di BLOCKBENCH costituiscono un’interfaccia front-end per l'integrazione di nuovi
carichi di lavoro di benchmark, un'interfaccia back-end per l'integrazione di nuove blockchain e un
driver per il pilotaggio dei carichi di lavoro. Una nuova blockchain può essere integrata nel back-
end del framework implementando l'interfaccia IBlockchainConnector. L'interfaccia contiene
operazioni per distribuire l'applicazione smart contract, richiamarla inviando una transazione per
interrogare gli stati della blockchain.
Ethereum, Parity e Hyperledger sono i back-end attuali. È possibile aggiungere un nuovo carico di
lavoro di benchmarking implementando l'interfaccia IWorkloadConnector. Il Driver prende come
input un carico di lavoro e invia le transazioni alla blockchain secondo configurazioni definite
dall'utente, quali ad esempio il numero di operazioni, il numero di client, i thread ecc, per poi
raccogliere le statistiche di runtime che vengono utilizzate per calcolare cinque metriche importanti:
1. Velocità effettiva: il numero di transazioni riuscite al secondo. Un carico di lavoro può
essere configurato con più client e thread per client per saturare il throughput della
blockchain.
2. Latenza: il tempo di risposta per transazione. Il driver implementa il blocco delle
transazioni, ovvero attende che una transazione finisca prima di avviarne un'altra.
3. Scalabilità: le modifiche alla velocità effettiva e alla latenza quando si aumenta il numero di
nodi e il numero di carichi di lavoro simultanei.
4. Tolleranza ai guasti: le modifiche alla velocità effettiva e alla latenza durante il guasto del
nodo. Simuliamo crash, ritardi di rete e corruzioni di messaggi casuali.
5. Metriche di sicurezza: il rapporto tra il numero totale di blocchi inclusi nel ramo principale
e il numero totale di blocchi confermati. Più basso è il rapporto, meno vulnerabile è il
sistema a causa della doppia spesa o dell'egoismo minerario.

Per quanto riguarda i carichi di lavoro, BLOCKBENCH viene fornito con carichi di lavoro di
benchmark macro per la valutazione del livello dell'applicazione e carichi di lavoro di micro
benchmark per l'analisi dei livelli inferiori.
1. Macro benchmark workloads: Portiamo due popolari carichi di lavoro di benchmark di
database in BLOCKBENCH, ovvero YCSB e Smallbank. YCSB è ampiamente utilizzato
per la valutazione dei database NoSQL, per i quali implementiamo un semplice contratto
intelligente che funziona come un archivio di valori-chiave. Il WorkloadClient si basa sul
driver YCSB che pre-carica ogni memoria con un numero di record e supporta le richieste
con diversi rapporti di operazioni di lettura e scrittura. Per Smallbank, un popolare punto di
riferimento per il carico di lavoro OLTP, implementiamo un contratto intelligente che
trasferisce denaro da un account a un altro. Oltre ai carichi di lavoro del database,
BLOCKBENCH fornisce anche altri tre carichi di lavoro basati su contratti Ethereum reali.
Il primo è EtherId, un contratto popolare che implementa un registrar di nomi di dominio. Il
secondo è Doubler, terzo è WavesPresale che implementa una campagna di crowdfunding
tramite vendite di token digitali.
2. Micro benchmark workloads: Per il livello di consenso, BLOCKBENCH fornisce il carico
di lavoro DoNothing in cui il contratto intelligente accetta una transazione come input e
semplicemente restituisce. Poiché l'esecuzione del contratto prevede un numero minimo di
operazioni a livello di esecuzione e modello di dati, le prestazioni complessive saranno
determinate dal livello di consenso. Per il livello del modello di dati, BLOCKBENCH
fornisce un carico di lavoro di Analytics simile a un carico di lavoro OLAP. In particolare,
esegue query di tipo scansione e aggregate le cui prestazioni sono determinate dal modello
di dati del sistema. In particolare, ci sono due query:
 Q1: calcola i valori di transazione totali impegnati tra il blocco ie il blocco j.
 Q2: Calcola il valore di transazione più grande che coinvolge un determinato stato
(account) tra il blocco ie il blocco j.
Per Ethereum e Parity, entrambe le query possono essere implementate tramite API JSON-RPC che
restituiscono i dettagli delle transazioni e i saldi dei conti in un blocco specifico. Per Hyperledger,
tuttavia, la seconda query deve essere implementata tramite uno smart contract (VersionKVStore),
perché Hyperledger non ha API per interrogare gli stati storici. Per supportare la ricerca dei dati
storici, il contratto aggiunge un contatore alla chiave di ogni account. Per recuperare una versione
specifica di un account, viene utilizzata la chiave account: versione. L'ultima versione è archiviata
nell'account chiave: latest. Il contratto mantiene anche un valore CommitBlock nel campo dati per
ogni versione in modo che punti al numero di blocco in cui viene eseguito il commit della versione
corrente. Per recuperare i saldi di un determinato account in un determinato intervallo di blocchi, il
contratto analizza tutte le versioni di questo account e restituisce il saldo corrispondente quando il
valore CommitBlock della versione è compreso nell'intervallo specificato. Un altro carico di lavoro
per il livello del modello di dati sottolinea l'archiviazione persistente. In particolare, il carico di
lavoro IOHeavy valuta le prestazioni IO della blockchain invocando un contratto che esegue un
gran numero di scritture casuali e letture casuali negli stati locali. Infine, per il livello di esecuzione
BLOCKBENCH fornisce il carico di lavoro CPUHeavy. Misura l'efficienza di livello di esecuzione
per attività pesanti richiamando un contratto che esegue l'algoritmo di ordinamento rapido su un
ampio array.

4.3 Performance benchmark


Secondo lo studio condotto da T. T. A. Dinh, R. Liu, M. Zhang, G. Chen, B. C. Ooi, and J. Wang
in “tecnical report”, sono stati selezionati Ethereum, Parity e Hyperledger, poiché occupano diversi
posizioni nello spazio di progettazione della blockchain e anche per la loro maturità della base di
codice. I tre sistemi sono stati valutati utilizzando carichi di lavoro sia macro che micro benchmark,
ottenendo diversi risultati:

 Hyperledger funziona costantemente meglio di Ethereum e Parity in tutto il mondo punti di


riferimenti. Ma non riesce a scalare fino a più di 16 nodi.
 Ethereum e Parity sono più resistenti ai guasti dei nodi, ma sono vulnerabili attacchi alla
sicurezza che fanno il fork della blockchain.
 I principali colli di bottiglia in Hyperledger ed Ethereum sono i protocolli di consenso, ma
per Parity il collo di bottiglia è causato dalla firma della transazione.
 Ethereum e Parity comportano un notevole sovraccarico in termini di utilizzo della memoria
e del disco. Il loro motore di esecuzione è anche meno efficiente di quello di Hyperledger.
 Il modello di dati di Hyperledger è di basso livello, ma la sua flessibilità consente
l'ottimizzazione personalizzata per le query analitiche dei dati blockchain. Abbiamo
utilizzato la popolare implementazione Go di Ethereum, geth v1.4.18, la versione Parity
v1.6.0 e Hyperledger Fabric release v0.6.0-preview. Abbiamo creato una testnet privata per
Gli studi sulle prestazioni dei sistemi blockchain sono stati finora limitati alle blockchain pubbliche.
Le recenti proposte per migliorare le prestazioni di Bitcoin si sono concentrate principalmente sul
livello di consenso, in cui vengono utilizzati modelli analitici o simulazioni di rete per convalidare i
nuovi progetti. Nell’analisi il BLOCKBENCH differisce da altri lavori in quanto è la prima a
valutare i sistemi blockchain privati su larga scala rispetto ai carichi di lavoro del database. Inoltre,
confronta due diversi sistemi e analizza come i loro progetti influenzano le prestazioni complessive.
Le future estensioni di BLOCKBENCH consentirebbero valutazioni più comparative dei
componenti chiave nella blockchain. Esistono molti framework standard per il benchmarking dei
sistemi di database. OLTP-Bench contiene carichi di lavoro standard come TPC-C per sistemi
transazionali. YCSB contiene carichi di lavoro valore-chiave. HiBench e BigBench presentano
carichi di lavoro di analisi di big data per sistemi simili a MapReduce. BLOCKBENCH condivide
lo stesso design di alto livello di questi framework, ma i suoi carichi di lavoro e il driver principale
sono progettati specificamente per i sistemi blockchain.
Riassumendo brevemente, il Blochbench rappresenta il primo framework di benchmarking per la
valutazione dei sistemi blockchain privati. BLOCKBENCH contiene carichi di lavoro per misurare
le prestazioni di elaborazione dei dati e carichi di lavoro per comprendere le prestazioni a diversi
livelli della blockchain. Utilizzando BLOCKBENCH, si può condurre un'analisi completa di tre
principali sistemi blockchain, vale a dire Ethereum, Parity e Hyperledger con due macro benchmark
e quattro micro benchmark. I risultati hanno mostrato che le blockchain attuali non sono adatte per
carichi di lavoro di elaborazione dati su larga scala. Abbiamo dimostrato diversi colli di bottiglia e
compromessi di progettazione a diversi livelli dello stack software

Nota: T. T. A. Dinh, R. Liu, M. Zhang, G. Chen, B. C. Ooi, and J. Wang. Technical Report
(Survey), 2017.
Fonte: https://www.comp.nus.edu.sg/~ooibc/blockbench.pdf

Potrebbero piacerti anche