ከRedis ጋር ተኳሃኝ የማይክሮሶፍት ክፍት ምንጭ ጋርኔት ማከማቻ

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

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

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

ከRedis ጋር ተኳሃኝ የማይክሮሶፍት ክፍት ምንጭ ጋርኔት ማከማቻ

Особенности 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 обгоняет конкурирующие системы в десять раз.
    ከRedis ጋር ተኳሃኝ የማይክሮሶፍት ክፍት ምንጭ ጋርኔት ማከማቻ
    ከRedis ጋር ተኳሃኝ የማይክሮሶፍት ክፍት ምንጭ ጋርኔት ማከማቻ
    ከRedis ጋር ተኳሃኝ የማይክሮሶፍት ክፍት ምንጭ ጋርኔት ማከማቻ
    ከRedis ጋር ተኳሃኝ የማይክሮሶፍት ክፍት ምንጭ ጋርኔት ማከማቻ

ምንጭ: opennet.ru

አስተያየት ያክሉ