Cześć! Co to takiego ten sharding?
Poczytałem ostatnio trochę artykułów o tym, ile transakcji na sekundę da się zrobić w Bitcoinie i w „starych” sposobach płacenia: Visa / MasterCard.
Wyszło mi coś takiego:
Bitcoin około 3 tx/s vs Visa około 1667 tx/s what???
[Wersja audio – link]
Zamiast wydajności Bitcoin poszedł w decentralizację i niezawodność sieci, ale porównanie wygląda słabo. W Bitcoinie czas potwierdzania transakcji po wykopaniu to ponad 60min (wykopanie bloku 10min * confirmation depth 6 bloków). Dodatkowo średnio co 10 minut powstaje nowy blok, nad którym pracują wszyscy górnicy. Pomysłem, żeby poprawić sytuacje, jest sharding Pogrupowanie node’ów w mniejsze sieci (shardy) komunikujące się ze sobą, z których każda mała sieć może niezależnie przygotowywać nowe bloki.
Jak działa sharding?
W skrócie: transakcje przypisuje się do konkretnego sharda a przelew zatwierdza się w momencie, gdy taka mniejszą sieć (shard) go zatwierdzi. Pomysł brzmi dobrze. Zamiast jednej dużej sieci, która produkuje nowe bloki sekwencyjnie (nie zaczyna pracy nad kolejnym, dopóki nie skończy aktualnego), każdy z shardów produkuje bloki sekwencyjnie. Im więcej shardów, tym więcej bloków może być kopanych jednocześnie. Teoretycznie dla 10 shardów czas zatwierdzania transakcji w Bitcoinie spadłby z 60 do 6 minut.
Jest jednak kilka problemów z implementacją.
W zatwierdzaniu konkretnej transakcji bierze udział tylko ograniczona grupa node’ów w sieci, dlatego do przeprowadzenia ataku 51% (umożliwiającego double spending) nie potrzeba już 51% zasobów całej sieci. Wystarczy 51% zasobów jednego sharda. Przy podzieleniu sieci na 10 shardów, wystarczy 6% zasobów całej sieci. Bardziej realistyczny przykład to coś około kilkudziesięciu shardów, a wtedy wystarczy nawet 1% zasobów obliczeniowych sieci do przeprowadzenia skutecznego ataku.
Kolejny problem to bezpieczna komunikacja i synchronizacja pomiędzy poszczególnymi fragmentami sieci.
Co, jeżeli środki, które chce przesłać, zaksięgowane we fragmencie sieci nr 2, muszą trafić na konto we fragmencie sieci nr 7?
Co, jeżeli wszystkie node’y należące do sharda padną?
Postępy
Nie ma konkretnej odpowiedzi jak sobie z tym poradzić, ale prace trwają. Znalazłem publikację naukową, która opisuje wyniki takich badań. PDF jest ciężki, ale dokładnie opisuje problem i proponowane rozwiązanie: OmniLedger: A Secure, Scale-Out, Decentralized Ledger via Sharding. Używając opisanej implementacji, udało się uzyskać nawet 6000 transakcji na sekundę. Super wynik w porównaniu z 1667 nie mówiąc już o 3 ;). Trzeba wziąć poprawkę na to, że testy przeprowadzono w warunkach laboratoryjnych. Jak taka implementacja zadziała z prawdziwymi użytkownikami? Nie znalazłem opisu takich testów.
Jak żyć 🙂
Możliwości blockchaina nie kończą się na płatnościach, technologię można stosować też tam, gdzie ilość transakcji na sekundę jest mniej istotna niż decentralizacja i połączona z niezawodnością. Na przykład DNS, dane archiwalne, albo notatki ile znajomi wiszą ci kasy. Szczególnie w tym ostatnim przypadku niezawodność jest kluczowa 😉
W niektórych przypadkach czas kopania nowego bloku jest „sztucznie” wydłużany, żeby zapewnić spójność blockchaina w dużych sieciach (takich jak Bitcoin). Takie ograniczenia nie są konieczne, jeżeli masz małą sieć.
Jeżeli chcesz poczytać więcej pobierz e-booka tutaj.