Випуск Dragonfly 1.0 системи для кешування даних в оперативній пам'яті

Відбувся реліз системи кешування та зберігання даних в оперативній пам'яті Dragonfly, яка маніпулює даними у форматі ключ/значення та може застосовуватися як легковажне рішення для прискорення роботи високонавантажених сайтів, що кешує повільні запити до СУБД та проміжні дані в оперативній пам'яті. Dragonfly підтримує протоколи Memcached та Redis, що дозволяє використовувати вже існуючі клієнтські бібліотеки та без переробки коду перекладати на Dragonfly проекти, які використовують Memcached та Redis.

Порівняно з Redis у Dragonfly при типових видах навантаження в оточенні Amazon EC2 c6gn.16xlarge вдалося досягти 25-кратного збільшення продуктивності (3.8 млн запитів на секунду). Порівняно з Memcached в AWS-оточенні c6gn.16xlarge Dragonfly зміг виконати в 4.7 разу більше запитів на секунду на запис (3.8 млн. проти 806 тисяч) і в 1.77 разів більше запитів на секунду на читання (3.7 млн. проти 2.1 млн.).

Випуск Dragonfly 1.0 системи для кешування даних в оперативній пам'яті

У тестах зберігання 5 ГБ даних Dragonfly зажадав на 30% менше пам'яті, ніж Redis. Під час створення снапшотів командою bgsave споживання пам'яті зростає, але в пікові моменти воно залишалося майже втричі менше, ніж у Redis, а сама операція запису снапшота виконується значно швидше (у тесті снапшот у Dragonfly був записаний за 30 секунд, а Redis - За 42 секунди).

Випуск Dragonfly 1.0 системи для кешування даних в оперативній пам'яті

Висока продуктивність досягається завдяки багатопотоковій архітектурі без поділу ресурсів (shared-nothing), що передбачає, що до кожного потоку прив'язується окремий відокремлений обробник зі своєю порцією даних, що працює без м'ютексів та spin-блокувань. Для забезпечення атомарності під час роботи з кількома ключами використовуються легковажні блокування VLL. Для ефективного зберігання інформації в пам'яті застосовується структура dashtable, що реалізує різновид секційованих хеш-таблиць.

Деякі можливості Dragonfly:

  • Режим кешування, у якому автоматично забезпечується витіснення старих даних новими після вичерпання вільної пам'яті.
  • Підтримка прив'язки до даних часу життя, протягом якого дані вважаються актуальними.
  • Підтримка скидання стану сховища на диск у фоновому режимі для відновлення після перезапуску.
  • Наявність консолі HTTP (прив'язується до TCP-порту 6379) для керування системою і API для віддачі метрик, сумісний з Prometheus.
  • Підтримка 185 команд Redis, що відповідає функціональності випуску Redis 5.
  • Підтримка всіх команд Memcached, за винятком CAS (check-and-set).
  • Підтримка асинхронних операцій створення снапшотів.
  • Передбачуване споживання пам'яті.
  • Вбудований інтерпретатор Lua 5.4.
  • Підтримка складних типів даних, таких як хеші, множини, списки (ZSET, HSET, LIST, SETS та STRING) та дані у форматі JSON.
  • Підтримка реплікації сховища для забезпечення стійкості до відмов та балансування навантаження.

Код Dragonfly написаний мовами C/С++ та поширюється під ліцензією BSL (Business Source License). Ліцензія BSL була запропонована співзасновниками MySQL як альтернатива моделі Open Core. Суть BSL в тому, що код розширеної функціональності спочатку доступний для внесення змін, але протягом якогось часу може застосовуватися безкоштовно лише за умови дотримання додаткових умов, для обходу яких потрібно придбання комерційної ліцензії. Додаткові ліцензійні умови проекту Dragonfly наказують переклад коду на ліцензію Apache 2.0 15 березня 2028 року. До цього часу ліцензія дозволяє використовувати код тільки для забезпечення роботи своїх сервісів і продуктів, але забороняє застосування для створення платних хмарних сервісів, що виступають надбудовою над Dragonfly.

Версія Dragonfly 1.0 примітна реалізацією підтримки реплікації даних з первинного сервера на вторинний. При цьому Dragonfly можна налаштувати для використання як вторинного сховища, що приймає дані з первинного сервера як на базі Dragonfly, так і на базі Redis. API для керування реплікацією сумісний з Redis і заснований на застосуванні команд ROLE та REPLICAOF (SLAVEOF).

Джерело: opennet.ru

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