RocksDB на стероидах


Исследователи Yahoo внесли изменения в RocksDB, который, как они утверждают, положил его на стероиды.

RocksDB — это встраиваемое постоянное хранилище ключей и значений для быстрого хранения на основе LevelDB от Google и открытый исходный код от Facebook в 2013 году.

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

«Оптимизируйте свой опыт, ранжируя доступный контент по релевантности для вас».

Когда вы смотрите на домашнюю страницу Yahoo или один из цифровых журналов Yahoo, то, что вы видите, зависит от того, что вы читали в прошлом. Система основана на огромной постоянной карте, хранилище ключей-значений (KV) Sherpa, которое связывает идентификаторы (ключи) пользователей с их свойствами (значениями).

Sherpa поддерживает более миллиарда пользователей и работает на тысячах узлов, расположенных в нескольких географически распределенных центрах обработки данных. Локальные хранилища KV используются для питания одного узла, а Sherpa использует для этого библиотеку RocksDB с открытым исходным кодом.

Очевидно, что чем быстрее KV справляется с чтением и записью, тем счастливее становятся пользователи, поэтому, пытаясь улучшить производительность местных магазинов KV, исследователи решили масштабировать их на современном многоядерном оборудовании. KV-хранилища, такие как RocksDB, имеют структуру слияния со структурой журналов (LSM), которая оптимизирована для рабочих нагрузок с большим объемом записи. Буфер LSM записывает в быстрый сегмент в памяти и выполняет пакетный ввод-вывод для набора сегментов на диске. Когда сегмент в памяти заполняется, он сбрасывается на диск либо путем слияния с существующим сегментом диска, либо путем создания нового.

При чтении выполняется поиск последней версии ключа в сегменте в памяти, а если она не найдена, также выполняется поиск в сегментах на диске. По словам исследователей, RocksDB стал настолько эффективным в оптимизации скорости ввода-вывода, что во многих приложениях его операции в памяти стали узким местом производительности. Исследователи Yahoo Labs говорят, что в настоящее время:

«Скорость доступа к данным обычно ограничивается скоростью чтения и записи в ОЗУ. Самые популярные сегодня хранилища KV были разработаны для оборудования с относительно небольшим количеством ядер, которое до недавнего времени было обычным явлением в фермах, обслуживающих данные. Мы предположили, что увеличение скорости обслуживания хранилища KV потребует задействования большего количества ядер и одновременного выполнения операций чтения и записи в структуре данных в памяти. Вот тут и началось настоящее веселье! «

Проблема с попыткой масштабирования KV-хранилищ на многоядерном оборудовании заключается в узких местах синхронизации, когда данные в памяти синхронизируются с данными на диске, а избыточные элементы диска объединяются. Используя новое исследование многопроцессорных структур данных без блокировок, команда Yahoo решила, что они могут улучшить использование оборудования и увеличить пропускную способность и задержку. Исследования в этой области до сих пор были сосредоточены на применении структур данных без блокировок в приложениях, интенсивно использующих память. Вместо этого исследователи Yahoo сконцентрировались на попытке оптимизировать платформы больших данных, сочетая доступ к оперативной памяти с дисковым вводом-выводом. Они говорят, что внедрили структуры данных без блокировок во внутреннее устройство RocksDB, добавив, что это было нетривиально из-за богатого API библиотеки (получение / размещение / сканирование моментальных снимков / атомарного чтения-изменения-записи) и необходимости координировать память и диск. доступы.

Работа была проведена совместно Гаем Гетой, Эдди Бортниковым, Эшкаром Хиллелем и Идитом Кейдаром из Yahoo Labs, и многие детали разработанного ими алгоритма, называемого cLSM (concurrent LSM), включены в недавно представленный исследовательский документ. на конференции EuroSys и теперь доступен для скачивания в формате pdf.

Результаты исследования показывают, что cLSM превосходит самые современные реализации LSM (включая RocksDB и LevelDB), повышая пропускную способность в 1,5–2,5 раза. Он демонстрирует превосходную масштабируемость с количеством ядер, успешно используя в два раза больше, чем RocksDB мог масштабироваться ранее.


Добавить комментарий