tgoop.com/rybakalexey/185
Last Update:
Вывод #3: Valkey “сгладил” родовую травму Redis, но Memcached их по-прежнему рвёт в cache-only сценарии
Disclaimer: всё, что дальше понаписано, касается исключительно специфичных кейсов, когда ваша инфра обрабатывает как минимум многие десятки/сотни тысяч запросов к кеш-слою в секунду. Если нет - вам отлично зайдёт Redis.
Третий вывод, который я сделал: Valkey действительно удалось сделать продукт, который в состоянии отдать миллион RPS с одного инстанса, а в целом Valkey отдает примерно в 2.5 раза больше RPS, чем Redis (график в презентации и в первом комментарии). У Евгения Дюкова из Яндекса был на эту тему достаточно подробный доклад на последнем хайлоаде – думаю, что скоро он окажется в свободном доступе.
Проблема (и сила) Redis заключается в простой до невозможности архитектуре. У Redis есть один единственный main thread, который отвечает “за всё”, и есть некоторое количество io-threads, которые отвечают за ввод-вывод. С ростом нагрузки, если вашему Redis можно отдать хотя бы несколько ядер, можно чуть поднять io-threads и таким образом слегка повысить пропускную способность. Это, кстати, не все знают: да, Redis можно немножечко “поскейлить” по ядрам, раза в 2 можно поднять RPS, но этот скейлинг крайне неэффективный, будет заметен рост в дипазоне 1-4 io-тредов, но дальше они начнут затыкаться в борьбе за локи (lock contention).
Что сделали в Valkey: они внесли много исправлений, позволивших “развязать” main-тред и io-треды и заметно повысили параллелизм в Redis. Плюс внесли ряд исправлений, позволивших лучше утилизировать префетч-возможности современных процессоров, что также заметно снижает latency. Короче, Valkey молодец - но родовая травма всё-таки никуда не делась. На наших тестах хорошо видно, что поднимать число io-threads выше 8-10 уже не имеет особенного смысла, сколько бы ядер у нас ни было.
В свою очередь Memcached, который конечно по сравнению c Redis/Valkey не умеет почти ничего кроме базовых get/set/del/incr операций, может выдать значительно бОльшую пропускную способность, нежели Valkey. У Memcached есть похожие проблемы с lock contention, но насколько я понимаю, используется другой подход к партиционированию данных, что снижает contention. Если вам нужен только кеш без персистенстности - Memcached по-прежнему отличный вариант.
Для справки
- Собственно презентация по результатам исследования PostgreSQL/MySQL/Redis/Valkey/Memcached
- Вывод #1 (Робкое напоминание о железе и гибридном подходе)
- Вывод #2 (PostgreSQL “сгладил” родовую травму)
BY System Design & Highload (Alexey Rybak)
Share with your friend now:
tgoop.com/rybakalexey/185