🇮🇹 "Il parallelismo è essenziale per la blockchain"

:it: Traduzione italiana di Parallelism Is Essential to Blockchain

Traduzione italiana a cura di Lordwotton di RIOT Stake Pools. Se apprezzi queste traduzioni, per favore valuta di supportare il mio lavoro delegando i tuoi ada a RIOT :pray: entra nel nostro gruppo Telegram


Il parallelismo è essenziale per la blockchain


La prima generazione di consenso di rete era sequenziale, in quanto la blockchain ha una struttura lineare. L’elaborazione sequenziale è una manifestazione di ogni nuova tecnologia. La bassa efficienza di solito impedisce l’adozione di massa o un maggiore utilizzo della tecnologia. Nella storia, si possono trovare molte tecnologie in cui il parallelismo ha portato a una maggiore adozione o efficienza. Ne mostreremo alcuni esempi. Già oggi possiamo vedere esempi di parallelizzazione nel settore della blockchain. Cardano ha diversi assi nella manica.

Caratteristiche del sistema sequenziale

Nella tecnologia informatica, un sistema sequenziale è un sistema in cui le operazioni vengono eseguite una dopo l’altra in un ordine specifico. I compiti o le istruzioni vengono eseguiti uno alla volta, nell’ordine in cui vengono ricevuti o programmati.

I sistemi sequenziali coinvolgono in genere un singolo processore, che esegue un’istruzione alla volta. Sono tipicamente deterministici, il che significa che, dato lo stesso input, produrranno sempre lo stesso output. Questo perché l’ordine di esecuzione è fisso e non cambia.

La sincronizzazione è intrinseca perché ogni operazione deve essere completata prima che inizi la successiva. Non c’è bisogno di meccanismi di sincronizzazione espliciti, come i lock o le semafori, che sono necessari nei sistemi paralleli per prevenire le condizioni di gara.

In generale, si può dire che i sistemi sequenziali sono più semplici da capire, progettare e implementare. Sono deterministici e non presentano problemi di sincronizzazione. Tuttavia, il loro principale svantaggio è rappresentato dalle basse prestazioni, limitate dalla velocità del singolo processore che esegue le istruzioni.

Per migliorare le prestazioni di un sistema sequenziale è necessario aumentare la velocità del processore o ottimizzare il codice per ridurre il numero di istruzioni. I sistemi sequenziali non sono scalabili con l’aumento del carico di lavoro, perché tutti i task devono essere elaborati uno alla volta. Le risorse possono essere sottoutilizzate.

Una comune rete decentralizzata con un semplice consenso di rete, a cui Cardano attualmente appartiene, ha sia aspetti sequenziali che paralleli. Tuttavia, i progetti possono differire per alcuni dettagli.

La blockchain ha una struttura lineare. Un nuovo blocco viene sempre aggiunto dopo il blocco precedente. La versione attuale di Ouroboros PoS è di tipo sequenziale, in quanto un nuovo blocco viene prodotto a intervalli regolari. Bitcoin ed Ethereum sono uguali in questo senso. La differenza sta solo nella lunghezza dell’intervallo di tempo.

Ci sono molti nodi (CPU) in una rete distribuita, ma a causa della tempistica di produzione dei blocchi, un nuovo blocco viene prodotto da un nodo alla volta. Ogni nodo della rete può avere transazioni simili nel mem-pool (che possono essere arrivate in un ordine diverso), ma solo le transazioni di un mem-pool vengono utilizzate durante la produzione del blocco. La diffusione del blocco nella rete avviene in parallelo.

Caratteristiche del sistema parallelo

Un sistema parallelo si riferisce a un sistema in cui più compiti o operazioni vengono eseguiti simultaneamente, cioè nello stesso momento. Questi sistemi richiedono tipicamente il coinvolgimento di più processori o core, che possono eseguire diversi compiti contemporaneamente.

I sistemi paralleli supportano la concorrenza, in cui diversi task sembrano essere eseguiti contemporaneamente. I meccanismi di sincronizzazione, come i lock o i semafori, sono spesso utilizzati per prevenire le condizioni di gara e garantire che i thread concorrenti eseguano correttamente le operazioni reciprocamente esclusive.

I sistemi paralleli possono utilizzare meglio le capacità dei processori multi-core o delle risorse di calcolo distribuite. Migliorano le prestazioni e la scalabilità. Tuttavia, questo comporta anche diverse sfide tecnologiche. I sistemi paralleli sono generalmente più complessi da progettare e implementare rispetto ai sistemi sequenziali, a causa della necessità di sincronizzazione e comunicazione tra task concorrenti. La sincronizzazione e la comunicazione possono comportare un overhead significativo che può ridurre i guadagni di prestazioni.

L’attuale PoS di Ethereum prevede una forma di parallelismo in cui molti validatori attestano un blocco proposto. Un nuovo blocco viene approvato da molti validatori prima di essere aggiunto alla blockchain. Tuttavia, questo processo di approvazione non significa che il blocco sia finalizzato. Il meccanismo di consenso di Ethereum può convalidare i blocchi in modo più efficiente e ridurre drasticamente il time-to-finality.

La finalizzazione si riferisce al momento in cui le transazioni in un blocco sono considerate irreversibili.

Sia Bitcoin che Cardano utilizzano un meccanismo di consenso probabilistico, il che significa che la definitività delle transazioni è probabilistica e aumenta a ogni nuovo blocco aggiunto. La finalità è raggiunta in modo sequenziale, poiché ogni nuovo blocco aggiunto alla catena aumenta la finalità delle transazioni precedenti. Questo può essere considerato un processo lento e inefficiente (che tuttavia presenta altri vantaggi, come la robustezza).

In Ethereum, la finalizzazione è più esplicita e può essere raggiunta più rapidamente. Un blocco è considerato finalizzato quando è stato inserito nella catena e un numero sufficiente di validatori ne ha attestato la validità. Questo processo può essere eseguito in parallelo, poiché diversi validatori possono attestare blocchi diversi allo stesso tempo.

Questo è un esempio di come la parallelizzazione possa rendere più efficiente il consenso di rete.

La parallelizzazione porta efficienza e adozione

Credo che uno dei motivi dell’attuale scarsa adozione delle reti blockchain sia la scarsa scalabilità ed efficienza. Le reti di transazioni globali decentralizzate o addirittura le applicazioni decentralizzate (principalmente la DeFi) sono un concetto valido che può sconvolgere molti settori e spingere le capacità di Internet a un nuovo livello. L’implementazione di altri elementi di parallelizzazione consentirà una maggiore adozione delle reti blockchain entro un decennio (o due).

Diamo uno sguardo indietro nella storia ad alcune tecnologie che all’inizio erano sequenziali e che il parallelismo ha aiutato a ottenere una maggiore adozione e utilizzo.

Sapete che aspetto aveva la prima connessione tra computer? Era sequenziale. Per trasmettere i dati tra due punti si utilizzava un unico percorso. I dati (byte) venivano inviati in sequenza dal punto A al punto B. Se Internet fosse stato così, non sarebbe mai decollato. Le reti moderne utilizzano tecniche di instradamento multiplo per trasmettere i dati su più percorsi contemporaneamente. Questo permette di aumentare la larghezza di banda creando code di trasmissione multiple. Inoltre, offre un certo grado di tolleranza ai guasti.

Nelle unità disco tradizionali, i dati vengono letti in sequenza da un disco rotante. I dischi avevano una testina di lettura (e scrittura) che doveva essere posizionata nel punto in cui si trovavano i dati. I dati venivano per lo più memorizzati in modo sequenziale per poter essere letti in una sola volta. Tuttavia, con l’avvento della tecnologia RAID (Redundant Array of Independent Disks), i dati possono essere distribuiti su più unità e letti o scritti in parallelo, migliorando notevolmente le prestazioni.

Le CPU tradizionali erano single-core, cioè potevano elaborare una sola operazione alla volta. Quando era necessario lavorare su più attività in parallelo, le CPU dovevano passare rapidamente da un’attività all’altra (principalmente l’interfaccia utente e altre attività). Le moderne CPU sono multi-core, ovvero possono elaborare più operazioni contemporaneamente dividendo il carico di lavoro tra più core. Grazie a ciò, è possibile ascoltare una canzone, scaricare dati da Internet, scrivere un messaggio e avere un antivirus in esecuzione in background.

Un sistema di database tradizionale elabora le query in modo sequenziale. Ciò significa che quando viene eseguita una query, il sistema di database recupera o aggiorna i dati un record alla volta. Ad esempio, se si esegue una query per recuperare dati da una tabella con un milione di record, il sistema di database esamina ogni record uno per uno fino a trovare i record che corrispondono ai criteri della query. Tuttavia, con l’aumento dei volumi di dati, questo approccio sequenziale è diventato meno efficiente. In un database parallelo, quando viene eseguita una query, il sistema di database divide i dati in sottoinsiemi ed elabora ciascun sottoinsieme in modo simultaneo.

Il multiplexing è un metodo con cui più segnali analogici o digitali vengono combinati in un unico segnale su un mezzo condiviso. Lo scopo è quello di condividere una risorsa scarsa, il mezzo di trasmissione fisico. Ad esempio, nelle telecomunicazioni, è possibile effettuare più chiamate telefoniche utilizzando un unico cavo. Il segnale multiplexato viene trasmesso su un canale di comunicazione come un cavo. Il multiplexing divide la capacità del canale di comunicazione in diversi canali logici, uno per ogni segnale o flusso di dati da trasferire. Un processo inverso, noto come demultiplexing, estrae i canali originali all’estremità del ricevitore.

Esistono molti altri esempi simili e gli elementi di parallelizzazione si trovano in quasi tutte le tecnologie moderne, soprattutto nel mondo dei computer e delle reti.

Il raggiungimento del consenso in una rete decentralizzata è molto inefficiente. L’inefficienza aumenta con il numero di nodi tra i quali si verifica il consenso, perché è necessaria una comunicazione reciproca. Questa elaborazione sequenziale può diventare un collo di bottiglia quando la rete gestisce un grande volume di transazioni. La natura sequenziale della produzione dei blocchi può limitare la velocità con cui le transazioni vengono confermate e aggiunte alla blockchain.

Vediamo le possibili forme di parallelizzazione nel settore della blockchain.

La parallelizzazione nell’industria blockchain

Esistono più opzioni per ottenere una maggiore parallelizzazione nel settore della blockchain. L’architettura a strati sembra essere una soluzione più semplice.

L’architettura a strati è un metodo per organizzare i sistemi in livelli separati, dove ogni livello fornisce servizi al livello superiore e utilizza i servizi del livello inferiore.

Una soluzione più complessa è lo sforzo di realizzare la parallelizzazione sul primo livello, cioè nel consenso di rete della blockchain.

L’architettura a strati consente l’elaborazione parallela delle transazioni, migliorando la scalabilità e l’efficienza. Tuttavia, i secondi strati (per i terzi è ancora presto) dipendono ancora in modo significativo dalla scalabilità della blockchain. Il trasferimento di beni da uno strato all’altro richiede solitamente transazioni on-chain.

L’elaborazione delle transazioni nel secondo livello non dipende dal consenso di rete del primo livello (blockchain). Diversi secondi livelli possono avere caratteri diversi. Una maggiore scalabilità è solitamente ottenuta al costo di una minore decentralizzazione e sicurezza.

La parallelizzazione in Hydra o Lightning Network avviene attraverso la creazione di canali di comunicazione tra gli utenti. Le transazioni nei canali sono verificate solo dagli utenti a cui si riferiscono. Lightning Network consentirà l’apertura di un canale tra 2 partecipanti. Hydra consentirà agli utenti di aprire più canali per un numero inferiore di partecipanti.

In questo modo, possono avvenire contemporaneamente più transazioni parallele in canali diversi. Poiché i canali sono indipendenti l’uno dall’altro, i nodi non si bloccano a vicenda nella verifica delle transazioni.

Le sidechain e i rollup sono altre soluzioni che consentono l’elaborazione parallela delle transazioni e l’esecuzione di contratti intelligenti. L’elaborazione avviene fuori dalla catena, ma c’è ancora una dipendenza dalle transazioni sulla catena. Ogni tipo di secondo livello presenta vantaggi e svantaggi ed è difficile prevedere quale sarà il più popolare in futuro.

La comunicazione tra gli strati è ancora un potenziale collo di bottiglia. Se il consenso della rete blockchain non è ben scalabile, potrebbe essere difficile per gli utenti trarre vantaggio dal secondo livello. Pertanto, i secondi livelli potrebbero non essere la soluzione finale e i team devono raggiungere una maggiore parallelizzazione a livello di consenso di rete.

Tecnologie come gli Input Endorser o lo sharding consentono una maggiore parallelizzazione del consenso di rete.

L’Input Endorser consente di separare la selezione e la pre-validazione delle transazioni dalla produzione dei blocchi. Nella rete esistono diversi tipi di blocchi su cui i nodi possono lavorare in parallelo. Ogni tipo di blocco ha uno scopo diverso. Esiste una certa dipendenza tra tutti i tipi di blocco e solo un tipo di blocco viene utilizzato per mantenere la linearità. Le risorse di calcolo sono utilizzate meglio nella rete e gli Input Endorsers aumentano il throughput delle transazioni.

Lo sharding è una tecnica che prevede la suddivisione della rete in parti più piccole (o shard), ognuna delle quali è in grado di elaborare transazioni e smart contract in modo indipendente. Ciò consente un certo grado di parallelismo, in quanto le transazioni in shard diversi possono essere elaborate simultaneamente. Tuttavia, gli shard dipendono comunque l’uno dall’altro e quindi si verifica una comunicazione tra gli shard. È necessario mantenere uno stato globale uniforme in tutto il sistema, cioè in tutti gli shard.

Cardano ha un certo vantaggio grazie al fatto che il team ha deciso di utilizzare il modello di contabilità UTxO. Con questo modello, è relativamente facile ottenere una maggiore parallelizzazione del consenso di rete. La convalida delle transazioni e dei contratti intelligenti sono ampiamente indipendenti l’uno dall’altro. Il modello UTxO ha facilitato il team nella progettazione degli Input Endorser.

D’altra parte, questo modello rappresenta una sfida per gli sviluppatori di applicazioni. L’ideale sarebbe progettare applicazioni che tengano conto della parallelizzazione. Potrebbe volerci del tempo prima di vedere applicazioni che sfruttino appieno il potenziale della parallelizzazione.

Ethereum è più sequenziale da questo punto di vista. Costruire un’applicazione è relativamente facile e i team non devono occuparsi della concorrenza. D’altra parte, può essere difficile ottenere una maggiore parallelizzazione del sistema.

Conclusione

La parallelizzazione ha avuto un impatto profondo sul mondo. Senza la parallelizzazione, molti dei progressi tecnologici che vediamo oggi non sarebbero stati possibili. La capacità di eseguire più compiti contemporaneamente è stata fondamentale per gestire i crescenti volumi di dati generati nell’era digitale.

L’elaborazione in parallelo ha permesso lo sviluppo di computer e server ad alte prestazioni in grado di gestire grandi volumi di dati e di eseguire rapidamente calcoli complessi. È fondamentale per l’addestramento di modelli complessi di intelligenza artificiale. La parallelizzazione nelle reti ha migliorato in modo significativo la velocità, l’affidabilità e l’efficienza della trasmissione e dell’elaborazione dei dati. Attualmente molti team, tra cui lo IOG, utilizzano tecniche di parallelizzazione per migliorare la scalabilità e l’efficienza delle reti blockchain. Ciò consentirà un uso più ampio di questa tecnologia e l’interruzione di molti settori, essenzialmente in modo simile a come i computer o Internet hanno avuto successo in passato.