Синхронизация состояний

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

Режимы синхронизации состояний

Синхронизация состояния работает в двух режимах. При запуске все ноды сначала загружаются (в режиме bootstrapping), а затем непрерывно синхронизируются (в режиме continuous sync).

Режим загрузки

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

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

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

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

Режим непрерывной синхронизации

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

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

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

Настройка режимов синхронизации состояния

В следующих разделах приведены инструкции по настройке ноды для различных случаев использования.

Выполнение всех операций

Чтобы выполнить все транзакции с момента genesis и продолжать выполнять новые транзакции по мере их фиксации, добавьте следующее в файл конфигурации ноды (например, fullnode.yaml или validator.yaml):

 state_sync:
     state_sync_driver:
         bootstrapping_mode: ExecuteTransactionsFromGenesis
         continuous_syncing_mode: ExecuteTransactions

ПРОВЕРКА СИНХРОНИЗАЦИИ НОДЫ Пока ваша нода синхронизируется, вы сможете увидеть, как метрика aptos_state_sync_version{type="synced"} постепенно увеличивается.

Применение всех результатов транзакции

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

 state_sync:
     state_sync_driver:
         bootstrapping_mode: ApplyTransactionOutputsFromGenesis
         continuous_syncing_mode: ApplyTransactionOutputs

ПРОВЕРКА СИНХРОНИЗАЦИИ НОДЫ Пока ваша нода синхронизируется, вы сможете увидеть, как метрика aptos_state_sync_version{type="synced"} постепенно увеличивается.

Быстрая синхронизация

ПОДСКАЗКА Это самый быстрый и дешевый метод синхронизации вашей ноды.

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

 state_sync:
     state_sync_driver:
         bootstrapping_mode: DownloadLatestStates
         continuous_syncing_mode: ApplyTransactionOutputs

Пока ваша нода синхронизируется, вы сможете увидеть, как метрика aptos_state_sync_version{type="synced_states"} постепенно увеличивается. Однако aptos_state_sync_version{type="synced"} будет увеличиваться только после того, как нода выполнит синхронизацию. Это может занять несколько часов в зависимости от объема данных, пропускной способности сети и доступных ресурсов ноды.

Архитектура синхронизации состояния

Компонент синхронизации состояния состоит из четырех подкомпонентов, каждый из которых имеет определенное назначение:

  1. Драйвер: Драйвер "управляет" ходом синхронизации ноды. Он отвечает за проверку всех данных, которые нода получает от сверстников. Данные передаются от пиров через службу потоковой передачи данных. После проверки данных драйвер сохраняет их в хранилище.

  2. Сервис потоковой передачи данных: Сервис потоковой передачи данных создает потоки данных для клиентов (одним из которых является драйвер синхронизации состояния). Он позволяет клиенту получать новые порции данных от сверстников, не заботясь о том, у каких сверстников есть данные и как управлять запросами данных. Например, клиент может запросить все транзакции, начиная с версии 5, и служба потоковой передачи данных предоставит его.

  3. Клиент данных Aptos: Клиент данных отвечает за обработку запросов данных от службы потоковой передачи данных. Чтобы служба потоковой передачи данных передала все транзакции, она должна сделать несколько запросов (каждый запрос на пакет транзакций) и отправить эти запросы коллегам (например, транзакции 1→5, 6→10, 11→15 и так далее). Клиент данных принимает запрос, определяет, какой из аналогов может обработать запрос, и отправляет запрос ему.

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

Структура кода синхронизации состояния

Ниже приведены ссылки на синк-код состояния, показывающий структуру, соответствующую описанной выше архитектуре:

Кроме того, смотрите также каталог, содержащий код для межкомпонентного взаимодействия: https://github.com/aptos-labs/aptos-core/tree/main/state-sync/inter-component. Это необходимо для того, чтобы:

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

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

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

Last updated