Wat is sharding - Een eenvoudige uitleg
- 12 minute read
✔️ Sharding betekent scherf of klein deel van een geheel
✔️ Sharding komt uit de negentiger jaren
✔️ Sharding is bedoeld om een database sneller te maken
✔️ Sharding op een blockchain is vooral bedoeld om snel en goedkoop te zijn
✔️ Ethereum heeft zijn eigen oplossing bedacht voor het schaalbaarheidsprobleem
Je hebt vast wel eens gehoord van sharding, maar wat het nou inhoudt is weer een andere zaak. Na het lezen van dit blog weet je precies wat het is.
Inhoudsopgave
- Wat is sharding?
- Hoe werkt sharding op een blockchain?
- Doel sharding
- Vormen van sharding
- Danksharding in detail
- Sterke punten van sharding
- Zwakke punten van sharding
- Voorbeelden van blockchains die gebruik maken van sharding
- Sharding vergeleken met andere oplossingen
- De toekomst van sharding
Wat is sharding?
Sharding is een term die origineel uit de jaren negentig stamt. Je kunt het vertalen met scherf of klein deel van een geheel. Voor allerlei problemen op computers en in netwerken met databases moest een oplossing gezocht worden. Er werd zelfs voorspeld dat er geen toekomst zou zijn voor gedistribueerde databases met gespecialiseerde hardware.
Daar zaten ze, zoals we kunnen zien in blockchain, volledig naast! Maar ja, de toekomst voorspellen is nou eenmaal lastiger dan gewoon een potje negatief gaan zitten doen.
Er zijn enorm veel ontwikkelingen geweest sindsdien, zowel in hardware, software als databasetechnieken.
In 1997 kwam de term shard ook voor in een populair spel genaamd Ultima Online. Iedere speler kwam terecht in zijn eigen stukje van de virtuele wereld, zodat je dit met recht een shard kunt noemen. De game bestaat nog steeds en heeft sindsdien 8 Guinness World Records behaald.
Sharding is een databasebeheertechniek waarbij een groeiende database wordt opgedeeld in kleinere, beheersbare partities of gedeelten. Zo’n klein gedeelte noemt men een shard.
De bedoeling is dat je deze gedeelten op verschillende machines opslaat als onafhankelijk scherfje.
Een database bestaat uit rijen en kolommen. Bij database sharding ga je horizontaal partitioneren, waarbij de grotere database in kleinere gedeelten wordt opgesplitst, met als doel sneller en gemakkelijker beheer van de database.
Sharding wordt meestal gebruikt als een gegevensset te groot wordt om in een enkele database op te slaan. Als een database te groot wordt kan het zijn dat een gebruikelijke query van een database, waar hij natuurlijk deels voor gemaakt is, te lang duurt of te veel kost. Een shard is dan een oplossing, zodat er niet met dure hardware gewerkt hoeft te worden en query’s een acceptabele reactietijd hebben. Een logische gegevensverzameling wordt dan opgedeeld in meerdere kleine gedeelten van deze totale database.
Sharding is dus horizontaal opschalen. Met deze techniek worden meer apparaten toegevoegd, die de workload verdelen. Als je verticaal gaat schalen voeg je meer verwerkingscapaciteit aan bestaande apparaten toe. Dat laatste kun je nou eenmaal niet eindeloos doen, dus als apparaten alles niet meer kunnen verwerken of te duur worden kun je aan sharding gaan denken, oftewel horizontaal opschalen. Wat eerst door 1 apparaat gedaan werd kan dan verdeeld worden over meerdere apparaten. In theorie kun je door sharding eindeloos opschalen, want je kunt gewoon steeds meer apparaten toevoegen die het werk verdelen.
Door sharding hoeven afzonderlijke apparaten ook niet de hele database te doorzoeken. Ze zitten in een kleine partitie, die verantwoordelijk is voor een specifiek gedeelte van de totale database, waardoor ze veel sneller klaar zijn als er een query komt voor hun database, of als er een transactie verwerkt moet worden waar hun partitie verantwoordelijk voor is. Dat is natuurlijk veel sneller, zeker in steeds grotere databases, waar blockchains om bekend staan.
Een goede visuele weergave van sharding is in feite elke wachtrij. Stel dat iedereen in Nederland een nieuwe ID kaart moet gaan halen op een bepaalde datum. Die miljoenen mensen kun je natuurlijk niet voor één loket laten wachten in Utrecht of zo. Als je slechts een tweede loket opent is de rij al gehalveerd. Dat is de kracht van sharding. Met ieder extra loket dat je opent wordt de wachtrij verminderd. De bedoeling van sharding is dus duidelijk in dit geval: er moet meer doorstroom komen door het openen van meer loketten.
Hoe werkt sharding op een blockchain?
Een shard neemt dus de verantwoordelijkheid op zich voor een deel van de totale database. Een blockchain bestaat uit een database, die door vele computers wordt bijgehouden. Ze noemen dat een gedistribueerde database. Als alle nodes, validatoren of miners de hele database moeten bijhouden kan dit erg veel druk op ze leggen, vooral bij grote databases, zoals bij Ethereum met zijn populaire slimme contracten. Door de database op te delen in partities of gedeelten hoeven de verschillende nodes of knooppunten slechts nog een gedeelte van de database bij te houden en zijn ze dus veel sneller klaar. Met elkaar communiceren wordt dan ook sterk verminderd voor nodes.
Een van de problemen bij blockchain is schaalbaarheid. Aan het begin van een blockchain is de database nog niet zo groot, maar met ieder nieuw toegevoegd blok is de database 1 groter. Als de tijd voortschrijdt kunnen de back ups van de database voor problemen gaan zorgen. Vooral populaire netwerken als Bitcoin en Ethereum hebben problemen met schaalbaarheid. Verwerkingscapaciteit van nog geen 20 per seconde zijn niet meer realistisch als er zo veel mensen gebruik maken van een netwerk. Je kunt mensen niet eindeloos laten wachten op de validatie van hun transactie. Bovendien proberen miners of nodes vaak een slaatje te slaan uit de congestie van een netwerk door zo veel mogelijk geld te vragen voor het valideren.
Een van de manieren om dit op te lossen is dus het sharding proces. Hierbij kunnen enorme hoeveelheden transacties op een blockchain per seconde bereikt worden als men het goed doet. Het gaat dan om aantallen boven de 100.000 per seconde.
Is de indeling van de shards eenmaal bekend, dan moeten deze shards gaan doen wat normaal gesproken alle nodes moeten doen: een transactie controleren binnen hun range. Een voorbeeld zou zijn dat ze alle transacties valideren met een hash die begint met een 1. Vervolgens zullen alle leden van deze shard overeenstemming moeten krijgen volgens een consensus protocol van deze shard en daarna de goedgekeurde transacties in een nieuw te vormen block verzamelen. Deze worden dan onderdeel van de blockchain. Doordat de database relatief klein blijft per shard zijn dit soort blockchain netwerken veel sneller dan de traditionele blockchains als bijvoorbeeld Bitcoin.
Een van de problemen van blockchain is het trilemma, zoals voorgesteld door Vitalik Buterin van Ethereum. Een blockchain moet decentraal zijn, veilig en schaalbaar. Aan dat laatste wil sharding flink bijdragen door een database te partitioneren in kleine stukjes die veel gemakkelijker en goedkoper te verwerken zijn en een stuk sneller. In theorie is een sharded database eindeloos schaalbaar.
Als je een database gaat opdelen kan dit op verschillende manieren. Je kunt iets verzinnen als op alfabet indelen, op nummer, op hash of wat dan ook. De bedoeling is dan dat een shard slechts de verantwoordelijkheid heeft voor dat specifieke gedeelte van de database.
Doel sharding
- Schaalbaarheid vergroten
- Transactiekosten verlagen
- Verdelen van de workload in kleinere partities
- Verhogen van de reactietijd van query’s per database
- Vergroten van de rekenkracht van een netwerk door meer machines toe te voegen
- Goedkopere machines gebruiken voor validatie of query
Vormen van sharding
- Data sharding. Dit is simpelweg een indeling op bijvoorbeeld alfabet.
- Hash sharding. De database wordt ingedeeld op basis van een hash.
- Range sharding. Hierbij wordt een indeling gemaakt op basis van een range, bijvoorbeeld alles dat begint met een letter a tot en met f.
- Network sharding. Het netwerk wordt verdeeld in consensus groepen die samen een gedeelte van alle blokken verifiëren op basis van willekeurigheid.
- Transaction sharding. Hierbij wordt een shard een bepaald gedeelte van de workload toegewezen op basis van een transactie-ID, bijvoorbeeld alle transacties die beginnen met een 1 zitten in shard 1. Een plausibel risico hierbij is double spending, dus echt snel zal dit wel niet populair worden.
- State sharding. Hierbij heeft een node een gedeeltelijk overzicht van een onderdeel van het gehele systeem. Het kan noodzakelijk zijn dat voor het valideren en goedkeuren van een transactie meerdere tabellen en dus shards nodig zijn. Ethereum is hier een tijdje mee bezig geweest en het stond zelfs op hun roadmap, maar ze hebben besloten om verder te werken met layer 2 rollups om Ethereum op te schalen en goedkoper te maken. Hierdoor blijft consensus op Ethereum ook eenvoudiger van aard en hebben ze sharded databases niet nodig.
- Danksharding. Dit is de huidige weg van Ethereum en is bedoeld om uiteindelijk een doorvoer van meer dan 100.000 transacties per seconde te krijgen tegen een zo goedkoop mogelijke prijs.
Danksharding in detail
Omdat Ethereum zulk een belangrijk netwerk is zullen we iets verder in detail treden over hun strategie.
Danksharding is bedoeld om van Ethereum een echt schaalbare blockchain te maken. Hiervoor zijn echter wel nog tussenstappen nodig.
Een van die tussenstappen is Proto-Danksharding . De naam komt van twee onderzoekers die Protolambda en Dankrad Feist heten. De bedoeling van dit Ethereum proposal is om goedkopere data toe te voegen aan blokken op de blockchain.
Rollups moeten nu hun data aan alle nodes in het Ethereum netwerk sturen en die data blijven daar eeuwig staan.
Danksharding introduceert data blobs (klodders) die aan blokken vastgemaakt kunnen worden die niet door de Ethereum Virtual Machine opgepikt kunnen worden en na een bepaalde tijd automatisch verwijderd worden.
Een rollup bestaat uit twee gedeelten: de data en de check van de prover. De prover moet kijken of de rollup correct is. Dit laatste hoeft dus niet voor eeuwig op de EVM te staan.
Volledige Danksharding is eigenlijk helemaal geen sharding. Echte shard chains staan niet meer op de roadmap van Ethereum, omdat Danksharding zulk een goede en simpele oplossing is.
Danksharding is de volledige realisatie van rollup scaling die met Proto-Danksharding begonnen is. Met Danksharding komt er heel veel plaats op Ethereum voor rollups om hun gecomprimeerde transactiedata op te dumpen. Hierdoor kan Ethereum honderden individuele rollups ondersteunen en uiteindelijk miljoenen transacties per seconde gaan halen.
Normaal gesproken zou ik zeggen: “Talk is cheap!”
Maar ja, als Vitalik het zegt ben ik wat gematigder in mijn uitspraken. Zijn netwerk en succes spreekt voor zich. Als ze dit lukt kan het de snelste blockchain in de cryptocurrency wereld worden. Dat is wel even wat anders dan 50 piek voor een transactie betalen en er ook nog twee uur op wachten!
Ze gaan dit doen door niet 1 blob, zoals in het proto gedeelte, maar 64 blobs toe te voegen aan een blok. Voor je het weet heb je een enge film ! Nou ja, eng. Eerder grappig.
Volledige Danksharding zal nog wel een aantal jaren op zich laten wachten, maar na een echte summoning ceremony zal de magie van Ethereum er weer een deel bij hebben in de vorm van Proto-Danksharding die wel wat van hekserij weg heeft, al mag je dat deel dan geen shard noemen.
Sterke punten van sharding
- Bij een uitval van een shard werken alle andere shards nog. Heb je alles op één server staan en die gaat down, dan is je hele netwerk niet meer te bereiken! Bij blockchain komt dit overigens weinig voor gezien hun gedistribueerde database.
- Sharding leidt tot kleinere databases.
- Sharding maakt een blockchain netwerk goedkoper.
- Het beheren van een database is gemakkelijker door sharding.
- Door de workload te delen kunnen complexe bewerkingen eenvoudiger worden.
- Het maakt een blockchain sneller.
- Je kunt gebruik maken van goedkopere hardware.
Zwakke punten van sharding
- Het implementeren van sharding kan een zeer complex en tijdrovend karwei zijn.
- Bij de introductie van sharding kunnen gegevens van de database verloren gaan of de database corrupt worden.
- Gegevens staan op allerlei plaatsen, waardoor je soms door de bomen het bos niet meer kunt zien.
- Congestie kan nog steeds plaatsvinden als een bepaalde shard toevallig veel meer werk krijgt dan de andere.
- De veiligheid van de blockchain of een shard kan in het geding komen.
- Wil je ooit weer af van sharding dan kan het een enorme klus zijn om de database weer correct te krijgen.
- Je hebt meer hardware nodig en ook software.
- Als shards afhankelijk zijn van elkaar kan een enkele corrupte shard de hele database in laten storten.
Voorbeelden van blockchains die gebruik maken van sharding
- Zilliqa
- Ontology
- Polkadot
- Near
- Elrond
- QuarkChain
Sharding vergeleken met andere oplossingen
De bedoeling van sharding is de schaalbaarheid vergroten. Dit doet zij door eilandjes te maken die slechts een klein gedeelte van de blockchain bijhouden. Deze shards hoef je meestal niet te laten communiceren met andere shards.
Als je dit vergelijkt met andere oplossingen, zoals roll ups, sidechains of het Lightning Network van Bitcoin, dan valt op dat deze oplossingen een netwerk wel in staat stelt tot meer schaalbaarheid, maar dat er nog steeds gecommuniceerd moet worden met de hoofdblockchain, waardoor deze nog altijd overbelast kan zijn.
Het voordeel van sharding is dat je feitelijk eindeloos kunt opschalen. Als je eerst werkt met shards die bijvoorbeeld alle transacties die beginnen met 1 verwerkt, kun je nog een onderverdeling maken die bestaat uit de eerste twee cijfers, enzovoorts, waardoor shards steeds kleiner worden ten opzichte van de volledige database.
De toekomst van sharding
Sharding is een veelbelovende en handige manier om de schaalbaarheid van een blockchain enorm te verhogen. Ook de kostenbesparing is een belangrijk onderdeel van deze strategie.
Doordat het zo lastig te implementeren is kan dit echter ook een rem zetten op de groei van sharding als toepassing.
Wie bij de nadelen van sharding gekeken heeft en dat vergeleken heeft met de oplossing van Ethereum kan wellicht gaan twijfelen aan de effectiviteit van sharding.
Als je echter ziet dat het jaren gaat duren voordat zelfs de superhelden van Ethereum zoiets in elkaar geflanst krijgen is er wellicht wel wat te zeggen voor sharding.
Wat echter als een paal boven water staat is het feit dat een blockchain die gebruik maakt van sharding veel goedkoper en sneller is dan de traditionele blockchain. En dat is ontzettend goed nieuws voor de gewone gebruiker.