July 29

Что такое ваш Шардинг? 

Чтобы понять что такое шардинг нужно сначала понять зачем он вообще появился и какую проблему призван решить.

Зачем и почему

Как мы уже выяснили блокчен это большая база данных призванная хранить / обрабатывать / и добавлять новые элементы в свое хранилище. Но для всего этого нужны вычислительные мощности, определенный объёмы памяти и т.д. Так вот с ростом спроса на эти операции у конкретной сети возникает очевидная проблема масштабируемости, этой самой базы данных и для того чтобы обеспечить пользователям комфортные условия для их операций нужно эту самую сеть расширять ( масштабировать ) так вот шардинг как раз и решает треклятую проблему масштабируемости. Но стоит помнить о трилеме блокчейна которая накладывает свои ограничения и нюансы на вопросы расширения так как нам нужно сохранить на достаточном уровне еще 2 аспекта ( безопасность и децентрализацию ) потому что иначе основная суть блокчейна будет утеряна. Из-за этой трилемы нам и приходится хранит полную копию всех блоков, включая все транзакции и смарт контрактов так вот шардинг призван решить проблемы масштабируемости не отставив в стороне два других элемента. Так же на своей первой лекции о Rollups я говорил что можно решить эту проблему двумя методами: изменив базовый уровень ( L-1 ) или сделав надстройку ( L-2 ) так вот модель шардинга как раз и является тем самым изменения базового уровня.

Общая концепция шардинга

Изучая тему шардинга, я пришел к выводу что лучшей точкой опоры в объяснении будет философско-математическое фрактала и его подобия. Возможно на первый взгляд это звучит немного страшно, но разобравшись это покажется очень простым и понятным. Так вот фрактал ( сам по себе происходит оот латинского слова fractus — дроблёный, сломанный, разбитый) — множество, обладающее свойством самоподобия. Это можно довольно долго объяснить словами, но лучше всего будет обратиться к наглядному изображению. Если кратко то фрактал это некий обьект, в точности или приближённо совпадающий с частью себя самого, то есть целое имеет ту же форму, что и одна или более частей.

Так вот шардинг это по сути применение фрактального подобья на блокчейн, а именно разделение хранилища данных на меньшие части (сегменты, шарды), которые можно хранить на отдельных серверах. Каждая из них содержит фрагменты данных, что обеспечивает равномерное их распределение и возможность эффективной обработки запроса. Если очень грубо то шардинг занимается дроблением основной сети на маленькие само подобные части.

Теперь немного духаты накинем

Различают два типа шардинга:

  • горизонтальный шардинг — заключается в разделении базы данных по строкам. Каждая часть содержит строки из оригинальной таблицы, но сохраняет одинаковые столбцы. Горизонтальный шардинг позволяет распределять данные между несколькими серверами на основе определенного критерия, например, диапазона значений или хеш-функции;
  • вертикальный шардинг — предполагает разделение большого набора данных на более мелкие подмножества или сегменты. Каждый шард имеет собственную часть столбцов оригинальной таблицы и может хранить только определенные строки.

Шардинг в блокчейне

В большинстве традиционных решений блокчейна каждая нода отвечает за обработку всего объема транзакций в сети и это называется последовательной обработкой данных. Каждая нода должна хранить всю информацию, включая балансы на аккаунтах и историю транзакций, а также обрабатывать все операции, данные и транзакции в сети. В качестве альтернативы выступает параллельная обработка данных, позволяющая одновременно выполнять несколько операций. Так вот шардинг как раз и представляет из себя параллельную систему.

Во время шардинга в блокчейне создаются группы валидаторов, каждая из которых отвечает за свой шард. Тут нужно пояснить что по своей сути мы дробим наш основной блокчейн с его общим набором нод на мелкие фрактиальный части которые делят между собой общий пул нод и уже эти ноды параллельно обрабатывают больший массив данных вместо того чтобы делать это вместе и корпеть над одним небольшим пулом.

Шард , в свою очередь, хранит фрагмент информации об общем количестве операций в сети. Благодаря этому, валидаторы отдельного шарда могут хранить на своих узлах только часть от общей базы данных, а не всю, как этого требуют традиционные блокчейны вроде Ethereum. В самой простой реализации каждый шард отвечает за какое-то подмножество контрактов и аккаунтов. Но тогда возникает вопрос кто будет делигировать пул транзакций между шардами и как добиться баланса в системе чтобы каждый шард был одинаково полезен и вытребован.

Почти все существующие предложенные дизайны шардинга используют некоторый источник случайных чисел чтобы назначать валидаторов на шарды. Получение случайных чисел в распределенной системе в которой участники друг другу не доверяют — это само по себе не до конца решенная проблема сегодня, которую мы в этой статье не затронем, и просто допустим, что такой источник случайных чисел у нас есть.

И получение случайных чисел, и назначение валидаторов — это вычисления в масштабах всей системы, не специфичные ни какому конкретному шарду. Для таких вычислений в современных дизайнах шардированных блокчейнов существует дополнительный выделенный блокчейн, который существует исключительно чтобы выполнять вычисления в масштабах системы.

Такой блокчейн называется Beacon chain в Ethereum 2.0 и Near Protocol, Relay chain в PolkaDot, и Cosmos Hub в Cosmos.

Примеры шардинга

Самым популярными решениями шардинга на данный момент являются NEAR Protocol и Ethereum 2.0. Например у того же NEAR Protocol Tps = 100к транзакциям в секунду так же по заявлениям разработчиков Ethereum 2.0 будет иметь +- такой же показатель Tps как и NEAR. Так что в целом можно сказать что шардинг решает поставленную перед ним задачу по масштабируемости, но как и все другое имеет свои плюсы и минусы.