Microsoft открыл код хранилища Garnet, совместимого с Redis

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 3250
Зарегистрирован: 20.08.2022

#

Microsoft открыл код хранилища Garnet, совместимого с Redis
Дата публикации:Tue, 19 Mar 2024 13:25:26 +0300




Компания Microsoft открыла исходные тексты NoSQL-системы Garnet, рассчитанной на создание кэширующих хранилищ и совместимой с существующими клиентскими библиотеками для хранилища Redis. Garnet поддерживает создание масштабируемых кластеров для кэширования данных, в которых может использоваться репликация, миграция ключей и сегментирование данных между узлами кластера. Проект написан на языке C# с ядром хранения на C++, открыт под лицензией MIT и может работать на всех платформах, поддерживаемых в .NET (первичными платформами заявлены Linux и Windows).



Для хранения данных используется движок Tsavorite (форк хранилища Microsoft FASTER), который поддерживает многопоточную обработку запросов, транзакции, фиксацию изменений в неблокирующем режиме (checkpointing), восстановление после сбоев, сохранение избыточных копий и ведение лога операций. Сетевой обработчик в Garnet построен с использованием архитектуры разделяемой памяти, предложенной исследовательским проектом
ShadowFax. Обработка TLS и взаимодействие с хранилищем выполняется в одном потоке, что даёт возможность избежать накладных расходов на переключение потоков и более эффективно использовать кэш CPU при передаче данных по сети.




Архитектура Garnet отделяет логику разбора и обработки запросов от операций с хранилищем. Данные хранятся с использованием двух хранилищ в формате ключ-значение, реализованных на базе библиотеки Tsavorite. Первое "основное" хранилище оптимизировано для быстрого выполнения операций со строками, а второе "объектное" хранилище оптимизировано для размещения сложных объектов и расширенных типов данных, таких как хэши и списки. Типы данных во втором хранилище реализованы с привлечением библиотек .NET. Данные хранятся в куче (C# heap), что позволяет их эффективно обновлять, и в сериализированном виде на диске.

Изображение







Особенности Garnet:
  • Возможно развёртывание многоуровневых хранилищ, охватывающих оперативную память, SSD-накопители и облачные хранилища, в которых менее востребованные данные вытесняются в медленные хранилища для создания кэшей, размером больше оперативной памяти.



    Расширяемая поддержка устройств, допускающая создание слоёв, оптимизированных для работы с различными устройствами, например, имеются слои для SDD, жёстких дисков и облачного хранилища Azure Storage.

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

    Настраиваемые лимиты на размер памяти, используемой для индексов, лога и хранения объектов.

    Для обращения к хранилищу применяется протокол RESP, что позволяет использовать Garnet с немодифицированными клиентами Redis.

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

    Наличие API для выполнения аналитических запросов (HLL/Hyperloglog, Bitmap), транзакций (MULTI/EXEC) и использования парадигмы публикация/подписка.

    Наличие средств для гибкого управления доступом через ACL.

    Возможность определения конфигурации в формате JSON или redis.conf.

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

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

    Возможность восстановления состояния с ранее сохранённой позиции (checkpoint-recovery). Наличие режима только добавления (AOF, append-only file), при котором все старые данные остаются доступны и не замещаются.

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



    Высокая производительность и низкие задержки при выполнении запросов. Эффективная обработка мелких пакетных запросов при большом числе клиентских сеансов, позволяющая добиться пропускной способности (число обработанных запросов в секунду) на порядок выше, чем у конкурирующих решений. При запуске в виртуальных машинах в облаке Azure в большинстве случаев задержки обращения клиента не превышают 300 микросекунд. В проведённых тестах Garnet значительно опережает Redis, Dragonfly и KeyDB по производительности и отзывчивости. В некоторых тестах Garnet обгоняет конкурирующие системы в десять раз.

    Изображение
    Изображение

    Изображение
    Изображение


Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=60808

Жизнь за Нер'зула!

Ответить