Асинхронное копирование
For upgrading a synochain for Asynchronous Backing compatibility, follow the instructions on this Wiki document.
Чтобы полностью следовать материалам, представленным на этой странице, рекомендуется ознакомиться с первичными этапами из Протокол Синочейнов.
В Bitzal синоблоки создаются с помощью ассаторов со стороны синочейна и отправляются валидаторам со стороны релейной цепочки для резервного копирования.
Резервное копирование относится к процессу, в котором синоблоки проверяются подмножеством валидаторов или группы поддержки. Это важный этап в процессе проверки синоблоков, поскольку он является первой линией обороны в обеспечении устойчивости к цензуре. Синоблоки должны быть поддержаны только одним и, как следствие, поддержка не обеспечивает валидность синоблока.
Подкрепленные синоблоки отправляются другим валидаторам для включения в релейную цепочку. Синоблоки включаются, если валидаторы подтвердили, что получили кодированные стиранием фрагменты данных синоблока. Примечание подписи кандидатов а не сами синоблоки включены в релейные блоки (но для простоты мы называем синоблоки включенными). При генерации синоблоки должны быть привязаны к блоку релейной цепочки, называемому эстафетный родитель. Родительское эстафетное реле является входом для генерации кандидатов в синоблоки. Он обеспечивает необходимый контекст для создания следующего синоблока. Обратите внимание что родительский релейный блок синоблока и релейный блок, включающий этот синоблок, всегда разные.
Синхронное резервирование
Прежде чем перейти к рассмотрению асинхронного резервного копирования, важно понять, что такое синхронное резервное копирование и его основные ограничения. При синхронном бэкинге генерация синоблоков тесно связана с прогрессией релейных цепочек:
- Новый синоблок может быть произведен после включения предыдущего (т.е. каждые 12 секунд).
- Контекст для построения следующего синоблока берется из последнего включенного предка синоблока
- Родитель релейной цепочки должен быть последним блоком релейной цепочки.
Благодаря (1) синоблоки могут генерироваться каждый второй блок релейной цепочки (т. е. каждые 12 секунд).
В силу (2) генерация синоблоков P может начаться только тогда, когда P - 1 включена (нет
конвейеризации). Из-за (3) время выполнения может занять максимум 0,5 секунды, так как синоблок
P спешит быть поддержанным в течение следующих 5,5 секунд (2 секунды требуется для поддержания, а остальное - для
передачи информации). Каждый синоблок поддерживается за 6 секунд (один блок релейной цепочки) и включается в следующий
6 секунд (следующий блок релейной цепочки). Время от генерации до включения составляет 12 секунд. Это ограничивает количество данных, которые ассатор может добавить в каждый синоблок.
Генерация синоблоков выбирает в качестве родительского блока ретрансляции самый последний полученный блок ретрансляции, хотя
с несовершенной сетью, которая может отличаться от истинного последнего блока ретрансляции. Таким образом, в общем случае, если
релейный блок R является релейным родителем синоблока P, тогда P может быть использован в R + 1 и
включён в R + 2.

Слева направо, синоблок P1 крепится к родительскому реле R0 (показано с помощью x), резервируется
в блок релейной цепочки R1 и включается в R2. После включения P1 ассаторы могут начать
генерировать P2, которые должны быть привязаны к родителю реле R2. Обратите внимание, что R2 будет родителем ретрансляции
P2, если R2 включен в релейную цепочку и сплетен с ассатором, производящим P2.
Присоединенный ретрансляционный узел получает ретрансляционные блоки через передачу сплетен. Затем ретрансляционный узел общается с
синочейным узлом через CollationGeneration субсистему. R2 передается сплетням на ретрансляционный узел
прикрепленному к ассатору, производящему P2. Тогда, CollationGeneration передает информацию о R2 в
узлу ассатора. Наконец, информация о родителях-ретрансляторах из R2 сообщает о генерации кандидата P2.
Поскольку P2 спешит в R3 через 6 секунд, у валидаторов есть всего 0,5 секунды на выполнение. Группам резервирования потребуется примерно 2 секунды на резервирование и еще некоторое время на сплетни (весь процесс от свертки до резервирования длится 6 секунд). P2 включен в R4, который может быть использован в качестве родительской группы для P3 (не показано). Через 24 секунды P1 и P2 включаются в релейную цепочку. Обратите внимание, что ассемблеры могут запускать новые синоблоки каждые 12 секунд, но имеют всего 0,5 секунд на выполнение.
Асинхронное копирование
Из-за того, что асинхронное резервное копирование не полностью реализовано в работающей производственной сети, каждый показатель производительности не может быть тщательно протестирован и не гарантируется до тех пор, пока не будет проведен соответствующий бенчмаркинг.

При асинхронном резервировании синоблоки (P) включаются каждые 6 секунд, а резервирование (B) и включение (I) могут происходить в пределах одного и того же блока релейной цепочки (R).
Синхронное и асинхронное резервное копирование
Ниже приведена таблица, показывающая основные различия между синхронным и асинхронным бэкингом.
| Синхроное резервное копирование | Асинхронное резервное копирование | Преимущество асинхронного резервирования | |
|---|---|---|---|
| Синоблоки включали в себя каждые | 12 секунд | 6 секунд | 2x большая пропускная способность или в 2 раза меньшая задержка |
| Максимальное время выполнения синоблоков | 0.5 секунды | 2 секунды | В 4 раза больше данных в синоблоке |
| Родитель-реле | Новейший блок релейной цепочки | Это не обязательно последний блок релейной цепочки | Ассаторы могут заранее подавать синоблоки в группы резервного копирования |
| Ассаторы могут опираться на | Самый последний предшественник, включенный в последний блок релейной цепочки | Предшественник, включенный в блок релейной цепочки (не обязательно самый последний), с дополненной информацией от самого последнего прародителя в неисключенном сегменте | Ассаторы могут начать строить синоблоки заранее |
| Количество не включенных синоблоков | Только один | Один или более одного (зависит от параметров конфигурации) | Повышенная эффективность и масштабируемость |
| Невключенныех синоблоков | Не может быть повторно предложена | Может быть предложено повторно, если не удалось включить с первой попытки | Снижение потерь неиспользуемого блокпакета |
| Синоблоки Время на обратном пути до включения | 12 секунды | 12 секунды | Без изменений |
| Синоблоки Время включения до конечной точки | 30 seconds | 30 секунд | Без изменений |
При синхронном бэкинге ассаторы генерируют синоблоки, используя контекст, полностью взятый из ретрансляционной
цепочки. В то время как при асинхронном бэкинге ассаторы используют дополнительный контекст из
неисключенного сегмента. Синоблоки включаются каждые 6 секунд, благодаря резервному копированию
синоблока N + 1 и включением синоблока N может происходить на одной и той же релейной цепочке
(конвейеризации). Однако, что касается синхронного резервного копирования, синоблоку требуется 12 секунд,
на резервное копирование и включение, а от включения до завершения - еще 30 секунд.
Поскольку пропускная способность увеличилась в 2 раза, а синочейны имеют в 4 раза больше времени на выполнение, ожидается, что асинхронное резервное копирование предоставит синочейнам в 8 раз больше пространства для блоков.
Синхронное резервное копирование как частный случай асинхронного резервного копирования
Двумя параметрами асинхронного бэкинга можно управлять с помощью
max_candidate_depth:
количества блоков синочейна, которые может произвести ассатор и которые еще не включены в релейную
цепочку.
allowed_ancestry_len:
старейшая родительская релейная цепочка, поверх которой может быть построен блок синочейна.
Значения, равные нулю для обоих, соответствуют синхронному бэкингу: max_candidate_depth = 0 означает, что
в любой момент времени может быть только один невключенный синоблок, и allowed_ancestry_len = 0 означает, что синоблок может
может быть построен только на последнем родительском реле для данного синочейна. Начальные значения будут равны 3 (4
не включенных синоблоков в любое время) и 2 (родитель реле может быть третьим последним).
Диаграмма асинхронного резервирования

Диаграмма предполагает, что:
max_candidate_depth = 2, Это означает, что в системе может быть максимум три невключенных синоблокаallowed_ancestry_len = 1, Это означает, что синоблоки могут быть привязаны к последнему или предпоследнему ретранслятору родителя (т.е. ассаторы могут начать подготовку синоблоков за 6 секунд до начала)
Слева направо, синоблок P1 включен в блок релейной цепочки R1 и включен в R2. Пока
P1 проходит процедуру бэкинга, ассаторы уже могут генерировать P2, который будет иметь R0 в качестве родителя ретранслятора
(показано значком x). Обратите внимание на то, что R0 также может быть ретрансляционным родителем для P1 до тех пор, пока в невключенном сегменте
есть максимум три невключенных синоблока. Синоблок P2 может быть резервным в R2 (тот же релейный блок, в который включен P1) и включенным в R3.
Теперь ассаторы могут использовать до двух секунд
для выполнения. И так далее, P3 может быть сгенерирован во время проверки групп P2, а P4 может быть построен
пока P3 проходит проверку. За 24 секунды P1 - P3 включаются в релейную цепочку.
Обратите внимание, что всегда есть три невключенных синоблока, т.е. по сравнению с синхронным бэкингом может быть несколько невключенных синоблоков (т.е. конвейеризация). Например, когда P1 находится в процессе включения, P2 и P3 находятся в процессе обратного включения. Ассаторы смогли сгенерировать множество невключенных синоблоков, потому что на их стороне есть не включенный сегмент, локальное хранилище не включенных предшественников синоблоков, которые они могут использовать для получения информации для построения новых синоблоков. Со стороны релейной цепочки, перспективные синочейны повторяет работу, которую выполняет каждый невключенный сегмент при отслеживание кандидатов (поскольку валидаторы не могут доверять записям, хранящимся на синочейнах).
6-секундная задержка блока релейной цепочки включает в себя таймаут выполнения бэкапа (2 секунды) и некоторое время на сетевую задержку (время, необходимое для передачи сообщений по всей сети). Ограничение ассаторов на генерацию синоблоков - это время, необходимое для их резервное копирование (т. е. 2 секунды). Коллизия генерация консервативно всегда устанавливает себе такие же временные ограничения. Если есть дополнительное время на генерации и резервного копирования (т. е. больше, чем 2 с + 6 с), то все это дополнительное время отводится на резервное копирование (см. рисунок). Это может привести к тому, что блоки с возможностью подложки будут ждать своей очереди в конце несколько дополнительных секунд, пока не освободится ядро для поддержки этого блока в следующем блоке эстафеты блока или какого-то более позднего блока. Обратите внимание, что ядро занято после резервного копирования и перед включением.
Таким образом, 2-секундное время выполнения является ограничителем, а не системным ограничением. Если генерация синоблоков занимает >2 секунды, невключенный сегмент уменьшится (меньше невключенных синоблоков), в то время как если это займет < 2 секунд, сегмент будет расти (увеличится количество не включенных синоблоков, которые нужно будет резервировать и включить). Такая гибкость со стороны синочейна будет возможна, если на стороне релейной цепочки будет обеспечено эластичное масштабирование (т. е, использование ядра agile и распределение основного времени).
Терминология
Свидетельство кандидата
Говоря, что синоблок включен в родительскую релейную цепочку, вы не имеете в виду, что весь синоблок находится в блоке релейной цепочки. Вместо этого, свидетельство кандидата состоящий из хэша синоблока, корней состояний и идентификационной информации, помещается на родительский блок в релейной цепочке. Релейная цепочка не получает доступ ко всему состоянию синочейна, а только к значениям, которые изменились в течение этого блока, и к меркелизированным хэшам неизменных значений.
Конвейеризация
Асинхронный бэкинг - это функция, которая вводит конвейеризацию в блок синочейна поколение, поддержка и включение. Это аналогично логическому конвейерному выполнению инструкций процессора в "традиционных" где некоторые инструкции могут быть выполнены до завершения других. Инструкции также могут выполняться параллельно, что позволяет нескольким частям процессора работать над потенциально разными инструкциями одновременно.
Аналогичным образом можно обрабатывать и пакеты переходов состояний, представленные в виде блоков. В контексте Bitzal, конвейеризация направлена на увеличение пропускной способности всей сети за счет выполнения этапов подкрепления и включения для разных блоков одновременно. Асинхронный бэкинг позволяет не только конвейеризацию в пределах одного канала (или ядра). Оно закладывает основу для работы большого количества каналов (или ядер) для выполнения одного и того же синочейна в одно и то же время. Таким образом, мы получаем две различные новые новые формы параллельных вычислений.
Невключенные сегменты
Невключенные сегменты - это цепочки синоблоков-кандидатов, которые еще не были включены в релейную цепочку. Т.е. они могут содержать синоблоки на любом этапе до включения. Таким образом, невключенный сегмент может включать в себя кандидатов, которые являются прикомандированными, поддерживаемыми или поддерживающими. Каждый синоблок-кандидат, записанный в не включенный сегмент, немедленно объявляется валидаторам, чтобы начать процесс поддержки.
Процесс резервного копирования происходит на релейной цепочке, в то время как невключенные сегменты живут во времени выполнения ассаторов синочейна. Основная функциональность, которую приносит асинхронный бэкинг, - это возможность строить на этих невключенных сегментах предшественников блоков, а не строить только на предках, включенных в состояние релейной цепочки.
Цель каждого не включенного сегмента двоякая:
- Пусть каждый синочейн знает, когда и на какой глубине он может создавать блоки, которые не будут отвергнуты релейной цепочкой
- Обеспечить критический контекст, необходимый для создания синоблоков с родительскими блоками, которые еще предстоит включить. Невключенный сегмент - это все, что нужно для построения синоблоков.
Перспективные синочейны
Цель перспективных синочейнов двоякая:
-
Следите за синоблоками, которые были представлены бекерам, но еще не включены в игру. Это включает в себя отслеживание полной родословной каждого синоблока, без которой будет невозможно проверить их легитимность.
-
Найдите и предоставьте кандидатов, которые являются дочерними элементами последнего включенного синоблока для каждого синочейна. Они используются в качестве исходных данных для процесса доступности. Перспективные синочейны - все это отслеживание, хранение и предоставление кандидатов на этапе доступности/включения.
Перспективные синочейны, по сути, повторяют работу каждого неисключаемого сегмента при отслеживании кандидатов. Проверяющие не могут просто доверять доступности или достоверности записей хранящихся в синочейнах. Перспективные синочейны - это записи релейных цепочек всех кандидатов в синоблоки проходящих процесс поддержки и включения. Он является авторитетным привратником для проверки валидности. В то время как невключенный сегмент - это локальная запись, которая позволяет синочейнам создавать блоки которые соответствуют правилам, которые синочейны впоследствии будут применять.
Невключенный сегмент живет во времени выполнения синочейна, поэтому он не знает и не заботится о форках/других синочейнах. Перспективные синочейны живут в клиенте релейной цепочки. Поэтому он должен одновременно отслеживать кандидатов из всех форков всех синочейнов. Это как если бы вы складывали невключенные сегменты из каждой развилки каждого синочейна в одну гигантскую структуру данных. Когда вы складываете невключенные сегменты представляющие разные развилки цепей, они образуют древовидную структуру. Отсюда и термин дерево фрагментов.
Один невключенный сегмент говорит ассатору, может ли он строить поверх одной вилки одного синочейна. Перспективные синочейны сообщают валидатору, должен ли он принимать блоки, построенные поверх любой вилки любого синочейна.
Синоблок перестает быть перспективным синоблоком, когда он включается в цепочку. В этот момент перспективным синочейнам больше не нужно заботиться о нем. В качестве альтернативы, ретранслятор синоблока родитель может стать слишком старым до того, как синоблок будет включен в цепочку, в этом случае потенциальные синочейны могут выбросить кандидата.
Узнайте больше
Информация, представленная здесь, может быть изменена; следите за ее обновлением с помощью следующих ресурсов:
- Проблема отслеживания асинхронного резервного копирования - Проблема отслеживания реализации для асинхронного бэкинга