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

Многочисленные грани шардинга для масштабирования блокчейна.

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

Одним из решений проблемы масштабируемости блокчейна является шардинг (sharding). Шардинг обещает увеличить пропускную способность, изменив способ проверки блоков сетью. Ключевой особенностью шардинга, делающей его уникальным среди всех решений вопроса масштабируемости, является горизонтальное масштабирование, то есть пропускная способность увеличивается по мере увеличения майнинга. Эта особенность шардинга может стать идеальным импульсом для быстрого внедрения блокчейн технологии.

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

Проблемы масштабируемости с существующим блокчейном.

Одной из самых больших проблем, с которой сегодня сталкиваются блокчейн платформы, является масштабируемость. Все популярные платформы изо всех сил пытаются обрабатывать как можно больше транзакций в секунду. Фактически, сегодня общественные сети Ethereum и Bitcoin могут обрабатывать в среднем по 7-10 транзакций в секунду. Эти показатели намного хуже, чем у централизованных платежных систем, таких как Visa, которая в среднем обрабатывает примерно 8000 транзакций в секунду.

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

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

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

Шардинг: разделяй и властвуй.

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

Можно представить, что существующий блокчейн работает как оживленная магистраль с одним пунктом оплаты. Результатом будет затор, так как люди будут стоять в длинных очередях, чтобы пройти пункт оплаты. Реализация блокчейна на основе шардинга похожа на добавление 15 или 20 пунктов оплаты. Это значительно увеличит скорость прохождения пункта оплаты. Шардинг окажет огромное влияние на блокчейн, и значительно повысит скорость транзакций.

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

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

Стратегия шардинга.

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

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

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

Сложности, лежащие в основе шардинга.

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

Сетевой шардинг.

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

Лучший способ победить противника (по крайней мере, в большинстве случаев), — это случайность. Используя случайность, сеть становится случайной выборкой узлов для формирования сегментов. Случайная выборка предотвращает переполнение одного сегмента вредоносными узлами.

Но как получить случайность? Самый доступный источник публичной случайности — это блоки, например, корень дерева Merkle транзакций. Случайность, доступная в блоках, является общедоступной, и (близкие к) равномерные случайные биты могут быть получены из нее через экстракторы случайности.

Однако просто иметь рандомизированный механизм для назначения узлов сегменту недостаточно. Нужно убедиться, что сеть согласна с членами в сегменте. Это может быть достигнуто, например, с помощью консенсусного протокола, подобного доказательству работы.

Шардинг транзакций.

Сегментирование транзакций не такой простой процесс, как может показаться. Подумайте о том, как организовать транзакцию в подобной биткоину системе (без смарт-контрактов), где состояние системы определяется с использованием UTXO (неизрасходованных выходов). Предположим, что сеть уже состоит из сегментов, и пользователь отправляет транзакцию. Транзакция имеет два входа и один выход. Итак, как эта транзакция должна быть присвоена сегменту?

Наиболее интуитивным подходом было бы принятие решения о сегменте на основе последних нескольких бит хэша транзакции. Например, если последний бит хэша равен 0, то транзакция назначается первому сегменту, в другом случае она присваивается второму сегменту (при условии, что у нас есть только два сегмента). Это позволяет проверить транзакцию в одном сегменте. Однако, если пользователь имеет дурные намерения, он может создать другую транзакцию с теми же двумя входами, но с другим выходом – это будет двойная трата. Вторая транзакция будет иметь другой хеш, и, следовательно, две транзакции могут оказаться в разных сегментах. Затем каждый сегмент будет самостоятельно проверять полученную транзакцию, не обращая внимания на транзакцию двойного расходования, проверяемую в другом сегменте.

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

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

Структурный шардинг.

Структурный шардинг дает новый набор проблем. На самом деле, структурный шардинг, является наиболее сложным из всех возможных предложений.

Продолжая работу с нашей моделью на основе учетной записи (давайте пока не будем вводить смарт-контракты), в блокчейне конкретный сегмент будет поддерживать только часть структуры. Например, если у нас есть два сегмента и только две учетные записи пользователей, скажем, для Алисы и Боба, соответственно, каждый сегмент будет отображать баланс одного пользователя.

Представьте, что Алиса создает транзакцию, чтобы заплатить Бобу. Сделка будет обрабатываться первым сегментом. Как только транзакция будет подтверждена, информация о новом балансе Боба должна быть передана его сегменту. Если две популярные учетные записи обрабатываются разными сегментами, это может повлечь за собой частые перекрестные связи и обмен данными. Обеспечение того, чтобы связь между сегментами не перевешивала прирост производительности от сегментирования состояния, по-прежнему является открытой проблемой исследования.

Один из возможных способов снижения накладных расходов на связь между сегментами — запрет пользователям выполнять транзакции между сегментами. В нашем примере это означало бы, что Алисе не будет разрешено напрямую совершать сделки с Бобом. Если когда-нибудь Алисе придется вести переговоры с Бобом, ей придется иметь счет в его сегменте. Хотя это устраняет любую перекрестную связь, это может несколько ограничить удобство использования платформы.

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

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

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

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

Вывод.

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

Шардинг нужно внедрять с осторожностью. Кроме того, необходимо провести дополнительные исследования, чтобы установить жизнеспособность структурного шардинга, поскольку он может оказаться «серебряной пулей» для вопроса хранения. В настоящее время исследователи и разработчики активно ищут альтернативные решения. И, возможно, ответ где-то рядом.

Mpdblog.ru