:RU: Оптимизация Cardano

Перевод статьи Optimizing Cardano - IOHK Blog

Путь к оптимизации сети лежит в постепенных пошаговых корректировках

image

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

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

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

Определение перегруженности

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

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

  • Пропускная способность — объем передаваемых данных. Текущий размер блока установлен на 64 КБ. Одна транзакция скрипта Plutus в настоящее время ограничена 16 КБ, а простые транзакции обычно могут занимать до 300 байт. Эти объемы были сбалансированы, чтобы обеспечить должное использование сети при минимизации задержек транзакций. Если их увеличить значительно и сразу, пользователи столкнутся с увеличенной задержкой во времени принятия блока. Это связано с тем, что пропускная способность и таймлайн находятся в противоречии друг с другом – максимизация пропускной способности подразумевает лучшую производительность сети, но это может произойти за счет увеличения задержки, когда система сильно перегружена.
  • Таймлайн — то есть время принятия блока. Общий “бюджет” для принятия блока установлен равным 5 секундам для распространения блока по сети (95% стейка) с бюджетом примерно в 50 миллисекунд, доступным для скриптов Plutus. Это предназначено для того, чтобы позволить блоку включать как скрипты, так и простые транзакции без монополизации.

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

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

Эта ситуация создала дефицит сети для продажи NFT и, следовательно, огромный спрос на услугу – 43 000 % от имеющегося предложения. Также стоит отметить, что период “перегруженности” длился менее одного часа.

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

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

Децентрализованные биржи (Дексы)

Многие ранние приложения, создаваемые на Cardano, это Дексы или децентрализованные биржи. И в некоторых приложениях пользователи, как правило, сталкиваются с разногласиями при размещении своих заказов. Поскольку дизайн децентрализованных приложений (Дапс) требует, чтобы все состояние сохранялось в пределах одного UTXO (а не распределялось по нескольким UTXO), возникает зависимость будущей транзакции от выходных данных предыдущей транзакции. Это часто упоминается как “проблема параллелизма”. Однако, проводя снова автомобильную аналогию, это не большая “проблема”, чем та, что левостороннее вождение является “проблемой” для Великобритании или Японии. Это действительно требует кривой обучения, но в конечном счете это просто другой способ ведения дел. И если разработчик этого не сделает, то да, они столкнутся с проблемами! И это не является более сложным по своей сути – просто требует другого подхода.

Модель EUTXO Cardano отличается от модели, основанной на учетной записи. Дапсы, построенные на Cardano, должны отойти от стиля однопоточной машины состояний и перейти на уровень абстракции непосредственно к EUTXO, построив решение, которое включает параллельные ребра в графике EUTXO. Важно использовать разные наборы UTXO, тем самым обеспечивая параллелизм, который повысит пропускную способность системы, сохраняя при этом производительность отдельных операций такой же. Конечно, это требует изменения мышления для любого разработчика, привыкшего к подходу Ethereum. Тем не менее, модель на основе UTXO более безопасна, чем модель на основе учетной записи, потому что сохранение всего состояния в одной учетной записи более уязвимо для атак. При правильном использовании методов параллелизма пользователи получат лучшие результаты с точки зрения пропускной способности и масштабируемости, поскольку оффчейн решения лучше применимы к регистрами UTXO. Для получения более подробной информации прочитайте в нашем блоге пост о параллелизме и о том, как создать масштабируемое приложение Plutus DApp. Периодически мы будем публиковать дополнительную информацию по этому вопросу, чтобы предоставить дополнительные рекомендации по максимальному использованию модели.

Дорожная карта оптимизации

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

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

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

  • Увеличение размера блока — увеличение размера блока означает увеличение количества транзакций в блоке. Преимущество заключается в том, что в периоды большой нагрузки на сеть время ожидания транзакций, которые будут приняты блоком, будет меньше. Однако есть и компромисс. Более крупным блокам требуется больше времени для распространения по сети. Это также означает, что нодам потребуется больше времени для проверки транзакций. Хотя увеличение размера блока является одним из способов повышения производительности сети, такие изменения следует выполнять с осторожностью. Для гарантии того, что увеличение блока не повлияет на время принятия блока, мы будем постепенно изменять параметры и оценивать результаты в периоды высокой нагрузки на сеть. Это не одномоментное обновление, а скорее итеративный подход, который даст нам четкие результаты и поможет обеспечить наиболее эффективные настройки.
  • Размер Мемпула — в настоящее время размер мемпула установлен на уровне 128 КБ, что в два раза больше размера текущего блока. Мемпул работает как сетевой буфер и может вызвать небольшую задержку при включении транзакций в блок. Однако увеличение размера mempool не улучшит пропускную способность сети – очереди из транзакций останутся прежними. Мемпул обеспечивает справедливое принятие новых транзакций, которые вводятся в него случайным образом на основе ноды-производителя, выбранной рандомным алгоритмом.
  • Сжатие скрипта — учитывая, что текущий размер транзакции установлен на уровне 16 КБ, мы продолжаем работать над сжатием, которое позволяет протоколу прозрачно "архивировать” код. Это означает большее количество транзакций скриптов в одном блоке из–за их уменьшенного размера - разработчики смогут отправлять более сложный код, сжимая его до 16 КБ или меньше, и для других транзакций останется больше места.

Проектирование архитектуры для EUTXO

Как описано в нашем предыдущем посте в блоге о параллелизме, модель EUTXO Cardano устраняет целые классы проблем при разработке приложений DeFi. В дополнение к собственной способности EUTXO обрабатывать транзакции параллельно, детерминированный характер модели гарантирует, что разработчики и пользователи смогут избежать напрасной траты “газа”.

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

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

Итерация и улучшение

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

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

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

Спустя два месяца

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

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

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

Я благодарю Джона Вудса (John Woods), Витора Сильву (Vitor Silva), Кевина Хаммонда (Kevin Hammond), Дункана Куттса (Duncan Coutts), Ромена Пеллерина (Romain Pellerin), Майкла Пейтона Джонса (Michael Peyton Jones), Жан-Фредерика Этьена (Jean-Frederic Etienne) и Ольгу Гринюк (Olga Hryniuk) за их поддержку и обратную связь при подготовке этого поста в блоге.

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