Porównanie wydajności baz danych Valkey i Redis

Zaprezentowane wyniki testowania świeżych wydań baz danych Redis 8.0 i Valkey 8.1, w których ogłoszono istotne optymalizacje wydajności. We wszystkich przeprowadzonych testach fork rozwijany przez społeczność przewyższył oryginalny projekt, głównie dzięki wprowadzeniu w Valkey nowego mechanizmu do wielowątkowego zarządzania wejściem/wyjściem w trybie asynchronicznym, przekazanego projektowi przez firmę Amazon.

W testowym środowisku AWS Graviton4 c8g.2xlarge z 8 VCPU w Valkey 8.1.1 udało się osiągnąć wydajność 999.8 tysięcy zapytań SET na sekundę, podczas gdy w Redis 8.0 osiągnięto poziom 729.4 tysięcy zapytań na sekundę. W ogólnym rozrachunku przezroczystość Valkey okazała się wyższa od Redis o 37% dla operacji SET i o 16% dla GET. W porównaniu z Redis projekt Valkey wykazał również 30% spadek opóźnień w obsłudze zapytań dla operacji SET oraz 60% dla operacji GET.

Porównanie wydajności baz danych Valkey i Redis

Oddzielnie przeprowadzono analizę zmiany przepustowości i opóźnień w zależności od liczby równolegle wykonujących się przetworników w trybie przetwarzania wielowątkowego. Do 3 wątków Valkey i Redis pokazują mniej więcej równe rezultaty, ale potem na prowadzenie wychodzi Valkey. Przy 6 wątkach na systemie z 8 VCPU wydajność Valkey wynosiła 678 tysięcy zapytań SET na sekundę, a Redis — 563 tysiące zapytań na sekundę przy limicie 256 jednoczesnych połączeń. Przy zwiększeniu liczby połączeń do 400 wydajność Valkey wzrosła do 832 tysięcy zapytań SET na sekundę.

Porównanie wydajności baz danych Valkey i Redis

Po optymalizacji obsługi przerwań w systemie w celu zmniejszenia liczby przełączeń kontekstu w Valkey udało się zwiększyć wydajność do 999,8 tysiąca zapytań SET na sekundę. Esencja optymalizacji sprowadza się do przydzielenia 2 VCPU do obsługi przerwań i przypisania pozostałych 6 VCPU do wątków przetwarzania wejścia/wyjścia Valkey i Redis, aby wykluczyć migrację przetworników między CPU. sudo ethtool -L ens34 combined 2 # ograniczamy do 2 liczbę przetworników IRQ grep ens34 /proc/interrupts # sprawdzamy, które przetworniki są zaangażowane (99 i 100) echo 1 | sudo tee /proc/irq/99/smp_affinity # przypisujemy przetwornik 99 do rdzenia 1 echo 2 | sudo tee /proc/irq/100/smp_affinity # przypisujemy przetwornik 100 do rdzenia 2 # Uruchamiamy SGBD (dla Redis zmienić valkey/valkey:8.1.1 na redis:8.0) z przypisaniem kontenera do rdzeni CPU 2-7 docker run --network="host" --rm \ --cpuset-cpus="2-7" valkey/valkey:8.1.1 \ --save "" --appendonly no --io-threads 6 \ --protected-mode no --maxmemory 10gb

Do testowania wydajności użyto polecenia: docker run --network="host" --rm --cpuset-cpus="2-7" \ valkey/valkey:8.0.1 valkey-benchmark \ -h 172.31.4.92 -p 6379 -t SET,GET -n 100000000 -c 256 \ -r 3000000 --threads 6 -d 1024

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster