Cloudbreak — горизонтально масштабируемая архитектура Solana

Solana — самый производительный блокчейн в мире. На текущих итерациях сеть Solana Testnet из 200 отдельных физических узлов поддерживает устойчивую пропускную способность более 50 000 транзакций в секунду при работе с графическими картами. Это достижение требует внедрения нескольких оптимизаций и новых технологий, в результате осуществляя прорыв в пропускной способности сети, который свидетельствует о новом этапе в разработке блокчейна.

7 ключевых технических инноваций, которые делают сеть Solana возможной:

  • Proof of History(POH) часы перед консенсусом;
  • Tower BFT — PoH-оптимизированная версия PBFT;
  • Turbine — протокол распространения блоков;
  • Gulf Stream — протокол пересылки транзакций без Mempool;
  • Sealevel — Параллельно исполняемые смарт-контракты;
  • Cloudbreak — База данных горизонтально масштабируемых учетных записей;
  • Репликаторы — Распределенное хранение реестра

В этом сообщении мы рассмотрим Cloudbreak, горизонтально масштабируемую архитектуру Solana.

Обзор: Оперативная память, SSD и потоки

При масштабировании блокчейна без шардинга недостаточно только масштабировать вычисления. Память, которая используется для быстрого отслеживания учетных записей, становится узким местом как по размеру, так и по скорости доступа. Например: Обычно считается, что LevelDB, механизм локальной базы данных, который используют многие современные цепочки, не может поддерживать более 5000 TPS на одной машине. Это связано с тем, что виртуальная машина не может использовать одновременный доступ на чтение и запись состояния учетной записи через абстракции базы данных.

Простым решением является сохранение глобального состояния в оперативной памяти. Однако не стоит ожидать, что на компьютерах потребительского уровня будет достаточно оперативной памяти для хранения глобального состояния. Следующий вариант — использование SSD дисков. Хотя твердотельные накопители снижают стоимость за байт в 30 и более раз, они в 1000 раз медленнее, чем ОЗУ. Ниже приведена таблица с новейшими твердотельными накопителями Samsung, которые являются одними из самых быстрых твердотельных накопителей на рынке.

Samsung SSD Datasheet

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

При максимальном количестве уникальных операций чтения в секунду, равном 15 000, простая однопоточная реализация базы данных учетных записей, использующей один SSD диск, будет поддерживать до 7500 транзакций в секунду. Современные твердотельные накопители поддерживают 32 одновременных потока, следовательно, они могут поддерживать 370 000 операций чтения в секунду или примерно 185 000 транзакций в секунду.

Cloudbreak

Основным принципом проектирования в Solana является разработка программного обеспечения, которое выходит за рамки аппаратного обеспечения и позволяет использовать его на 100%.

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

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

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

  1. Индекс счетов и вилок хранится в оперативной памяти.
  2. Учетные записи хранятся в отображении файла в память размером до 4 Мб.
  3. Каждая карта памяти хранит учетные записи только от одной предложенной вилки.
  4. Карты случайным образом распределяются по максимально возможному количеству SSD.
  5. Используется механизм копирования при записи.
  6. Записи добавляются в случайную карту памяти для той же вилки.
  7. Индекс обновляется после каждой записи.

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

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

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

Проверка производительности Cloudbreak

Пока база данных счетов находится в оперативной памяти, мы видим пропускную способность, которая соответствует времени доступа к оперативной памяти, при масштабировании с учетом количества доступных ядер. На 10 миллионах счетов база больше не помещается в оперативной памяти. Тем не менее, мы по-прежнему видим производительность около 1 миллиона при чтении или записи за секунду на одном SSD диске.

Узнайте больше о Туре де СОЛ – стимулируемом тестеном событии Соланы.

Solana использует механизм Cloudbreak, наряду с такими прорывами, как Proof of History, Sealevel и Tower BFT, в совокупности они создают самый производительный блокчейн в мире. Тестет Solana работает уже сегодня. Вы можете увидеть его по адресу https://testnet.solana.com. В целях экономии мы используем только несколько узлов. Однако во многих случаях мы распространили его более чем на 200 отдельных физических узлов (не на совместно используемом оборудовании) в 23 центрах обработки данных в AWS, GCE и Azure для сравнительного анализа.

Среда выполнения также работает уже сегодня, разработчики могут развернуть код в тестовом режиме уже сейчас. Сегодня разработчики могут создавать смарт-контракты на C, и мы активно работаем над набором инструментов Rust. Rust будет основным языком для разработки смарт-контрактов Solana. Набор инструментов Rust общедоступен как часть Solana Javascript SDK, и мы продолжаем работу над пакетом разработки ПО.

Вскоре Solana запустит общедоступную бета-версию, стимулирующую валидаторов для запуска узлов через Tour de SOL — аналог «Game of Stakes» у Cosmos, которая ставит перед общественностью задачу протестировать пределы сети Solana, зарабатывая при этом токены.