Проект Dragonfly розвиває більш швидку заміну Redis та Memcached

Доступний перший випуск системи кешування даних в оперативній пам'яті Dragonfly, що забезпечує підтримку протоколів Memcached і Redis, але дозволяє виконувати запити з більш високою продуктивністю і з меншим споживанням пам'яті. Система маніпулює даними у форматі ключ/значення та може застосовуватися як легковажне рішення для прискорення роботи високонавантажених сайтів, кешують повільні запити до СУБД та проміжні дані в оперативній пам'яті. Код Dragonfly написаний мовами C/С++ та поширюється під ліцензією BSL (Business Source License).

Ліцензія BSL була запропонована співзасновниками MySQL як альтернатива моделі Open Core. Суть BSL в тому, що код розширеної функціональності спочатку доступний для внесення змін, але протягом якогось часу може застосовуватися безкоштовно лише за умови дотримання додаткових умов, для обходу яких потрібно придбання комерційної ліцензії. Додаткові ліцензійні умови проекту Dragonfly наказують переклад коду на ліцензію Apache 2.0 лише 1 червня 2027 року. До цього часу ліцензія дозволяє використовувати код тільки для забезпечення роботи своїх сервісів і продуктів, але забороняє застосування для створення платних хмарних сервісів, що виступають надбудовою над Dragonfly.

За заявою розробників та продемонстрованим тестам Dragonfly претендує на звання найшвидшої системи зберігання у пам'яті. У порівнянні з Redis у Dragonfly при типових видах навантаження вдалося досягти 25-кратного збільшення продуктивності та триразового зниження споживання пам'яті. Один сервер Dragonfly може обробляти мільйони запитів на секунду, наприклад, в оточенні Amazon EC2 c6gn.16xlarge вдалося досягти продуктивності 3.8 млн запитів на секунду.

Проект Dragonfly розвиває більш швидку заміну Redis та Memcached

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

Проект Dragonfly розвиває більш швидку заміну Redis та Memcached

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

З можливостей, доступних у першому випуску, відзначається підтримка протоколу RESP2 і 130 команд Redis, що відповідає функціональності випуску Redis 2.8. Крім того, Dragonfly підтримує всі команди memcached, крім CAS (check-and-set), надає підтримку асинхронних операцій для створення снапшотів, забезпечує передбачуване споживання пам'яті, надає вбудований інтерпретатор Lua 5.4 та підтримує складні типи даних, такі як хеші, множини (ZSET, HSET, LIST, SETS та STRING).

Окремо доступний режим кешування, за якого автоматично забезпечується витіснення старих даних новими після вичерпання вільної пам'яті. Можлива прив'язка до даних часу життя, протягом якого дані вважаються актуальними. Стан сховища може скидатися на диск у фоновому режимі для відновлення після перезапуску. Для керування системою надається HTTP-консоль (прив'язується до TCP-порту 6379) та API для віддачі метрик, сумісний з Prometheus. У наступних версіях планується розширити підтримку команд Redis та реалізувати можливість реплікації сховища для забезпечення стійкості до відмов та балансування навантаження.

Джерело: opennet.ru

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