Microsoft відкрив код сховища Garnet, сумісного з 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), що дозволяє їх ефективно оновлювати, і серіалізованому вигляді на диску.

Microsoft відкрив код сховища Garnet, сумісного з 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 обганяє конкуруючі системи удесятеро.
    Microsoft відкрив код сховища Garnet, сумісного з Redis
    Microsoft відкрив код сховища Garnet, сумісного з Redis
    Microsoft відкрив код сховища Garnet, сумісного з Redis
    Microsoft відкрив код сховища Garnet, сумісного з Redis

Джерело: opennet.ru

Додати коментар або відгук