:RU: Сравнение индоссантов входа и шардинга

Перевод статьи https://cexplorer.io/article/comparing-input-endorsers-with-sharding

image

Индоссанты входа повысят масштабируемость сети Cardano. Шардинг - это популярное решение, цель которого такая же. Цель статьи состоит в том, чтобы указать на различные концепции обоих решений, особенно в отношении поддержания единого глобального состояния систем. У Cardano могут быть индоссанты входа и шардинг. Мы покажем, как могла бы выглядеть такая система.

Безопасность превыше всего

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

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

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

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

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

На рисунке ниже вы можете видеть, что верхняя нода создала новый блок в момент времени T. Блок достигает нод, расположенных в середине, в момент времени T+1. Нижней ноды он достигает в момент времени T+2. Направление перемещения блока обозначено красными стрелками. Глобальное состояние согласовано в момент времени T+2. В моменты времени T и T+1 каждый нода имела разное глобальное состояние.

image

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

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

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

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

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

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

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

Шардинг

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

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

На изображении ниже вы видите шардированный блокчейн. 15 нод разделены на 3 шарда. В каждом шарде в момент времени T+1 создается один новый блок. Вы видите больше блоков, потому что блок распространяется по всем каналам связи одновременно в сети P2P.

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

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

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

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

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

Если Алиса находится в шарде 1, Боб - в шарде 2, а Кэрол - в шарде 3, каждая транзакция будет находиться в другом блоке, который будет проверяться только нодами в этом шарде. Но как шарды 2 и 3 узнают о транзакции Алисы? Существует два возможных способа сообщить шардам 2 и 3 о транзакции Алисы.

Один из способов - использовать глобальный координатор, который можно назвать цепочкой ретрансляторов или цепочкой маяков. Координатор соединяет все шарды. Он может периодически получать заголовки блоков от каждого шарда и транслировать их другим шардам. Шарды 2 и 3 могут узнать о транзакции Алисы, получив заголовок блока от шарда 1 через глобальный координатор.

Другой способ - использовать нотариальную схему или подтверждение получения, которое предполагает прямую связь между шардами. Таким образом, никакой глобальный координатор не нужен. Шард может отправить сообщение другому шарду (или шардам), указывающее на то, что определенная транзакция была выполнена или зафиксирована. Шарды 2 и 3 могут узнать о транзакции Алисы, получив сообщение или подтверждение непосредственно от шарда 1.

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

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

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

Использование 8 межшардовых сообщений в настоящее время является лучшим решением с учетом безопасности и атомарности.

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

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

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

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

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

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

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

Количество шардов не может увеличиваться до бесконечности. Идеальное количество шардов зависит от использования текущего количества шардов, а также от других факторов, таких как безопасность, эффективность, сложность протокола шардинга и то, как пользователи хотят использовать систему. Однако это невозможно предсказать заранее.

Индоссанты входа

Индоссанты входа поддерживают пользователей, активы и dApps на одном слое. Консенсус использует элементы конкурентности и параллелизма, но поддерживает единое глобальное состояние (единую версию леджера). Поэтому нет необходимости разделять пользователей, ресурсы и dApps на несколько отдельных групп.

Основная цель индоссантов входа - отделить обработку транзакции от создания блока. Для этого используется три блока. Блоки входа, иначе входные блоки (IB), блоки подтверждения (EB) и блоки ранжирования (RB).

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

Все типы блоков создаются параллельно в сети Cardano, но с разной частотой. Блоки ранжирования можно рассматривать как консенсусные блоки, поскольку они обеспечивают линейность блокчейна. Блоки ранжирования формируют консенсус в отношении данных в блоках подтверждения, которые ссылаются на входные блоки (которые содержат полезную нагрузку). Между созданием двух блоков ранжирования создается множество блоков подтверждения и входа. Консенсус формируется на большем объеме данных, чем в случае монолитного блокчейна.

На картинке вы можете видеть создание блоков в сети Cardano, которая использует индоссанты входа. Каждую секунду создается новый блок (несколько блоков могут быть созданы параллельно в одну и ту же секунду).

image

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

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

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

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

image

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

Входные блоки могут создаваться (передаваться потоком) практически постоянно каждые 0,2-2 секунды (частота будет задана параметром протокола). Это означает, что вместо создания одного блока каждые 20 секунд за одно и то же время можно создать от 10 до 100 входных блоков. Входные блоки, а также блоки подтверждения могут быть одновременно проверены, прежде чем они станут частью истории блокчейна через блок ранжирования.

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

Вывод

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

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

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

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

// От переводчика: для получения дополнительных переведенных на русский язык статей о Cardano посетите русскоязычный раздел на форуме Cardano. Видеоролики о Cardano на русском языке можно найти на YouTube канале нашего замечательного амбасадора Тимура Сахабутдинова, а также на канале Чарльз Хоскинсон на русском. Хотите поговорить или задать вопрос о Cardano? Тогда приглашаем в наше уютное русскоязычное сообщество Cardano в Telegram. Оставайтесь на связи, все только начинается!

1 Like