Представлен релиз проекта Valkey 8.0, развивающего форк СУБД Redis, созданный после перевода кодовой базы Redis на проприетарную лицензию. Проект развивается на нейтральной площадке под покровительством организации Linux Foundation при участии разработчиков из таких компаний, как Amazon, Google, Oracle, Ericsson и Snap. В числе разработчиков Valkey – Маделин Олсон (Madelyn Olson), бывший мэйнтейнер Redis. Код проекта написан на языке Си и распространяется под лицензией BSD. Поддерживается работа в Linux, macOS, OpenBSD, NetBSD и FreeBSD.
Начиная с выпуска 7.4 СУБД Redis переведена на использование лицензий RSALv2 (Redis Source Available License v2) и SSPLv1 (Server Side Public License v1), которые приводят к дискриминации отдельных категорий пользователей, что не позволяет считать их открытыми или свободными. По своим целям обе лицензии походят друг на друга, а отличия сводится к тому, что лицензия SSPL основана на копилефт лицензии AGPLv3, а лицензия RSAL основана на пермиссивной лицензии BSD. Лицензия RSAL позволяет использовать, изменять, распространять и интегрировать код в приложения, за исключением случаев, когда эти приложения является коммерческими или используются для предоставления управляемых платных сервисов). Лицензия SSPL дополнительно содержит требование поставки под той же лицензией не только кода самого приложения, но и исходных текстов всех компонентов, вовлечённых в предоставление облачного сервиса.
СУБД Valkey и Redis предоставляют функции для хранения данных в формате ключ/значение, расширенные поддержкой структурированных форматов данных, таких как списки, хэши и множества, а также возможностью выполнения на стороне сервера скриптов-обработчиков на языке Lua. БД хранится в памяти и синхронизируется с версией на диске или отражается в логе изменений на диске, что гарантирует сохранность данных в случае аварийного завершения работы. Поддерживаются транзакции, режим “публикация/подписка”, команды для инкремента/декремента, операции над списками и множествами (объединение, пересечение), переименование ключей, master-slave репликация, множественные выборки и функции сортировки.
Выпуск Valkey 8.0 позиционируется как первый значительный релиз проекта. Среди изменений:
- Внесены оптимизации, обеспечивающие распределение нагрузки между доступными ядрами CPU и позволяющие потокам обработки ввода/вывода функционировать одновременно с основным потоком, что даёт возможность параллельно выполнять команды и обрабатывать операции ввода/вывода. Повышена эффективность обработки команд в пакетном режиме, например, добавлена поддержка упреждающего извлечения часто используемых данным для их оседания в процессорном кэше. При тестировании в окружении AWS r7g новая версия продемонстрировала способность обрабатывать до 1.2 млн. запросов в секунду, что в три раза больше, чем прошлый выпуск.
- Повышена масштабируемость и живучесть кластерных конфигураций. Добавлена поддержка автоматического переключения на запасные серверы в случае сбоя (Failover) для узлов с ещё незаполненными пустыми слотами шардинга. Обеспечена репликация данных о состоянии слотов – все команды “CLUSTER SETSLOT” теперь синхронно реплицируются перед выполнением на основном узле, что повышает живучесть кластера в случае выхода из строя основного узла. Добавлена возможность автоматического восстановления состояния слота миграции.
- Ускорена работа репликации, благодаря одновременной передаче дампов RDB (Redis Database Backup) и лога накопившихся изменений (backlog) в разных потоках. Проведённое тестирование показало сокращение задержек операций записи и снижение времени синхронизации до 50% при нагрузках с очень интенсивным потоком команд чтения. Значительно снижено потребление памяти на первичном узле.
- Добавлены новые метрики со статистикой в привязке к отдельным слотам и клиентам. Например, доступны метрики о клиентах, использующих механизм “публикация/подписка”, задержках при обработке событий, трафике канала передачи команд, статистике о реорганизации хеш-таблиц памяти, а также числе ключей, трафике и нагрузке на CPU в привязке к слотам.
- Проведена оптимизация хранилища ключей, позволившая примерно на 10% сократить потребление памяти.
- Добавлена возможность работы в системах, в которых одновременно используется IPv4 и IPv6.
- Повышена эффективность работы механизма “публикация/подписка”, при котором создаётся канал, сообщения из которого распространяются клиентам по подписке.
- Добавлена экспериментальная поддержка работы поверх RDMA.