Аналогия параллельного выполнения транзакций: одна касса против трех. Источник: medium.com
Параллельное выполнение используется для одновременной обработки несвязных транзакций, то есть событий, которые не влияют друг на друга. Например, если два разных пользователя торгуют токенами на разных торговых платформах, их транзакции могут обрабатываться одновременно. Но если они торгуют на одной и той же площадке, то их транзакции необходимо выполнить последовательно.
Сложность реализации параллельного выполнения состоит в определении независимых транзакций. Это предполагает понимание того, как каждая операция влияет на состояние блокчейна. При наличии большого количества взаимосвязанных приложений определить такие транзакции становится труднее.
Модели параллельного выполнения
- Модель доступа к состоянию — подход, при котором транзакции, имеющие доступ к той или иной части состояния блокчейна, определяются заранее. Это позволяет различать независимые и зависимые операции.
- Оптимистическая модель — подход, при котором предполагается, что все транзакции в блокчейне являются независимыми. Корректировка зависимостей вносится уже после их выявления.
Примерами блокчейнов, которые используют модель доступа к состоянию, являются: Solana, Sei v1 и Sui, а примерами оптимистической модели — Aptos, Monad и Sei v2.
Solana
Представьте систему хранения данных, в которой каждая транзакция запрашивает доступ к определенному файлу:
- если запросы не переплетаются, транзакции обрабатываются независимо друг от друга;
- если транзакции запрашивают доступ к одному и тому же файлу, транзакции требуют координации.
Каждая транзакция объявляет ту часть блокчейна, к которой планирует получить доступ. Это требование включено в модель исполнения транзакций Sealevel, которая наряду с алгоритмом консенсуса Proof of History (PoH) обеспечивает параллельное выполнение в блокчейне Solana.
Sei
- уровень приложений — исполнение логики приложений и обработка транзакций;
- уровень консенсуса — позволяет всем участникам сети достичь согласия относительно состояния блокчейна;
- сетевой уровень — отвечает за распространение транзакций внутри блокчейна.
Для обеспечения параллельного выполнения транзакций Sei использует настраиваемость Cosmos, улучшая возможности стандартного Cosmos SDK. Особенности Sei: консенсус Twin-Turbo и механизм распараллеливания.
Консенсус Twin-Turbo
Валидаторы аналогично отправляют блоки, содержащие информацию о транзакциях. Поскольку участники консенсуса постоянно обмениваются операционными данными, большинство из них уже обладает необходимой информацией о транзакциях. Это означает, что валидаторы теряют время, ожидая получение транзакций, которые уже есть в их мемпуле.
Предложение блоков без интеллектуального распространения. Источник: twitter.com
Аналогично валидаторы отправляют предложение, которое содержит лишь хеш транзакций. Когда другие участники сети получают подобное предложение, они используют транзакции из мемпула, чтобы восстановить блок в своем состоянии блокчейна (библиотека по аналогии с книгами).
Интеллектуальное распространение блоков. Источник: twitter.com
Оптимистичная обработка блоков. После того как блок был предложен и распространен среди валидаторов, они отправляют друг другу сообщения prevote и precommit. Такой подход помогает согласованию именно того блока, который они хотят добавить в блокчейн.
После precommit валидаторы проверяют каждую из транзакций внутри блока. Однако при большом количестве данных этот этап занимает много времени и ресурсов.
Обычная обработка блоков против оптимистичной. Источник: github.com
Механизм распараллеливания v1
DeliverTx. Традиционно во время DeliverTx транзакции обрабатываются последовательно. Sei меняет этот подход, обеспечивая параллельное исполнение.
Чтобы избежать неопределенности (сценариев, при которых результат некоторых процессов нежелателен для одновременного выполнения), Sei фильтрует транзакции на те, которые могут исполняться параллельно, и те, что последовательно. Для этого он сегментирует операции по типу и данным, которые они выполняют.
EndBlock. Sei предоставляет услуги в финансовом секторе. Поэтому транзакции внутри блокчейна можно поделить на покупку и продажу, а платформы для их исполнения — на рынки.
На этапе EndBlock Sei объединяет ордера на покупку и продажу актива. Вместо последовательной обработки этих заказов Sei фильтрует независимые транзакции и проверяет их параллельно в конце блока.
Ордера считаются независимыми, если они не влияют на один и тот же рынок внутри одного блока.
Обработка блоков в Sei с и без распараллеливания. Источник: github.com
Механизм распараллеливания v2
- EVM-совместимость.
- Оптимистическая параллелизация.
- SeiDB.
Только второе обновление повлияло на параллельное выполнение транзакций в Sei. Поэтому вместо изучения каждого из трех улучшений сконцентрируемся лишь на оптимистической параллелизации.
В первой версии Sei разработчикам приходилось самостоятельно находить зависимость транзакций, что уменьшало производительность сети. В Sei v2 используется оптимистический подход, который предполагает, что все транзакции — независимы и обрабатываются параллельно.
Принцип работы оптимистической параллелизации в Sei v2. Источник: twitter.com
- выявляет конфликт. Система определяет, к каким частям хранилища та или иная транзакция пытается получить доступ;
- обрабатывает транзакции. После выявления конфликтующих операций начинается их последовательное выполнение.
Этот процесс повторяется до тех пор, пока не будут разрешены все конфликты. Только в таком случае Sei сможет продолжить обрабатывать следующие транзакции без каких-либо столкновений.
Другие блокчейны с параллельным выполнением
Aptos. Aptos использует принцип оптимистического исполнения. Однако, в отличие от Sei v2, этот блокчейн автоматически определяет зависимость транзакций в случае конфликтов. При этом транзакциям не нужно сообщать о том, какую часть состояния блокчейна они затрагивают.
Monad. Ориентированный на производительность блокчейн первого уровня, который совместим с Ethereum. Аналогично Aptos, Monad использует принцип оптимистического выполнения, предполагая, что транзакции не связаны между собой и обращаясь к зависимостям по мере их возникновения.
Параллельное выполнение в вычислениях относится к одновременному выполнению нескольких процессов или потоков для улучшения производительности и эффективности системы. Эта техника важна в современных вычислениях для использования мощности многоядерных процессоров, позволяя разделять задачи и обрабатывать их одновременно. Используя параллельное выполнение, системы могут обрабатывать больше задач одновременно, уменьшать задержки и увеличивать пропускную способность. Параллельное выполнение широко применяется в высокопроизводительных вычислениях, обработке больших данных и системах реального времени. Ключевые концепции, связанные с параллельным выполнением, включают многозадачность, балансировку нагрузки, синхронизацию и параллельные алгоритмы.