Sharding - mechanizm działania i wykorzystanie w sieciach kryptowalut.
Sharding jest to rodzaj partycjonowania, który dzieli bardzo duże bazy z danymi na mniejsze, szybsze i łatwiejsze w zarządzaniu segmenty. Ma to na celu poprawienie wydajności i skrócenie czasu odpowiedzi na zapytania. Słowo shard w wolnym tłumaczeniu oznacza odłamek, małą część czegoś większego. Zjawisko to nie jest nową koncepcją i istnieje w tradycyjnym, scentralizowanym zarządzaniu bazami danych już od lat 90-tych. Sharding został spopularyzowany w grach on-line, w których deweloperzy tworzyli kilka serwerów dla graczy, aby rozładować natężenie i zmniejszyć ich obciążenie, co rzutowało na sprawniejsze działanie. W dużych biznesach powszechnym zabiegiem jest dzielenie baz danych klientów ze względu na lokalizacje geograficzne. Klienci w tych samych lokalizacjach są grupowani i umieszczani na unikalnych serwerach.
Implementacja shardingu w technologii blockchain.
W sieci blockchain węzły (tj. komputery o dużej mocy obliczeniowej, które weryfikują poprawność transakcji) reprezentują poszczególne bazy danych. Jeśli zastosujemy sharding w takiej sieci oznaczałoby to rozbicie jej na pojedyncze segmenty. Każdy fragment posiadałby swój unikalny zestaw inteligentnych umów (ang. smart contracts) oraz sald. Podzielenie dużych bloków na mniejsze segmenty znacznie wpłynęłoby na zwiększenie przepustowości sieci, a tym samym drastyczny wzrost skalowalności oraz przyśpieszenie transakcji. Wiązałoby się to również ze zmniejszeniem opłat za korzystanie z niej.
Rys.1. Podział pełnego węzła na odłamki.
Sharding na przykładzie ethereum.
W sieci ethereum każdy pełny węzeł przechowuje cały stan łańcucha bloków, w tym salda kont oraz historię transakcji. Jednak podczas wykładniczych wzrostów rozmiaru sieci jej skalowalność zwiększa się liniowo, a ograniczenie to spowodowane jest koniecznością komunikacji między węzłami. Węzły nie mają specjalnych uprawnień, a każdy z nich przetwarza i weryfikuje poprawność każdej transakcji. Skutkuje to zauważalnymi wzrostami kosztów transakcji i wydłużonym czasem oczekiwania, gdy sieć jest mocno obciążona. W tej chwili ethereum pracuje na zasadzie sekwencyjnej realizacji i przetwarza około 10 transakcji na sekundę. Dla porównania visa przetwarza ich 24 tys. na sekundę. Zwiększenie ilości komputerów w sieci niekoniecznie poprawi jej wydajność, ponieważ łańcuchy bloków przechowywane są na każdym z komputerów, a łańcuch weryfikacji się wydłuży. Sharding pomaga załagodzić te problemy, zapewniając kompleksowe rozwiązanie. Polega ono na pogrupowaniu podzbiorów każdego węzła na odłamki, które przetwarzałyby tylko transakcje specyficzne dla tego fragmentu. Pozwala to systemowi na przetwarzanie wielu transakcji równolegle, co zwiększa przepustowość sieci.
Twórca ethereum Vitalik Buterin wyjaśnia to zjawisko w następujący sposób:
Wyobraź sobie, że ethereum zostało podzielone na tysiąc wysp. Każda z nich może robić swoje, a wszyscy należący do tej wyspy mogą wchodzić ze sobą w interakcje i oddawać się jej wszystkim możliwościom. Jeśli chcieliby skontaktować z inną wyspą, musza wykorzystać któryś z protokołów.
Koncepcja fragmentacji sieci na bardziej wydajne elementy pozwala funkcjonować jako suma jej części, a nie być ograniczona prędkością każdego pojedynczego węzła. Sharding w etereum jest wdrażany dwuetapowo. W pierwszej fazie ustalany jest konsensus co do tego, jakie dane będą znajdowały się w poszczególnych odłamkach. W drugim etapie, gdy każdemu fragmentowi przypisana będzie określona grupa transakcji tworzona jest warstwa, która zapewni kompatybilne działanie wszystkich shardów. Trudność w implementacji tego mechanizmu jest to, że dzieląc węzły na mniejsze podzbiory muszą one być w stanie przetwarzać określone zestawy transakcji aktualizując na bieżąco stan sieci oraz zapewniając poprawność jej działania.
Jeśli chciałbyś dowiedzieć się więcej na temat działania technologii blockchain na przykładzie ethereum, koniecznie przeczytaj nasz wcześniejszy artykuł.