Valkey 1. yılında: Topluluk çatalı Redis’i nasıl geride bıraktı
(gomomento.com)- Redis Inc kaynak kapatma kararıyla (SSPL’ye geçiş) topluluğun güvenini sarsmış olsa da, geliştirici topluluğu Valkey çatalı etrafında birleşerek canlı bir yenilik ve katkı süreci oluşturdu
- Redis 8.0 yeniden açık kaynağa döndü ve kurucusu Antirez yeni özellikler ve optimizasyonlara katkı sağlamak üzere geri geldi; böylece her iki tarafta da hızlı bir gelişim yaşanıyor
- Son benchmark sonuçlarına göre Valkey 8.1.1, 8vCPU ortamında SET performansında Redis 8.0’a göre %37 daha yüksek sonuç verirken p99 gecikmesi de daha kısa ölçüldü (GET performansında da %16 üstün)
- IO thread’leri / çekirdek pinning gibi pratik tuning yöntemleriyle Valkey, çok iş parçacıklı ortamlarda 3 katın üzerinde throughput artışı ve minimum gecikme elde etti
- Gerçek kullanım ortamına daha yakın benchmark ve tuning bilgileri de paylaşılıyor; benchmark sonuçlarını yorumlarken dikkat edilmesi gereken noktalar ve bunların gerçek operasyon ortamında nasıl uygulanacağı da anlatılıyor
Redis’in kaynak kapatması ve Valkey’in ortaya çıkışı
- 1 yıl önce Redis Inc (eski adıyla Garantia Data), açık kaynak lisans değişikliği (SSPL’nin benimsenmesi) nedeniyle toplulukla güven ilişkisini zedeledi
- Buna çözüm olarak doğan açık çatal Valkey, dağıtık sistemler, önbellekleme ve gerçek zamanlı veri işleme gibi alanlarda yaygın kullanılan bir teknoloji varlığı hâline geldi
- Redis tarafı da sonrasında Antirez’in (kurucu) geri dönüşü, performans / özellik iyileştirmeleri ve Redis 8.0’ın yeniden açık kaynağa dönmesiyle güveni yeniden kazanmaya çalıştı
Valkey 8.1 vs Redis 8.0: Performans karşılaştırması
- Aynı 8vCPU AWS c8g.2xl instance’ı, 1KB öğe / 3M keyspace / 500 connection koşullarında SET benchmark’ı
- Valkey 8.1.1: 999.8K RPS (p99 0.8ms)
- Redis 8.0: 729.4K RPS (p99 0.99ms)
- Valkey, SET’te %37, GET’te %16 daha yüksek; SET p99’da %30, GET p99’da %60 daha hızlı
- 6 IO thread kullanıldığında Valkey, 239K → 678K RPS (2.8 kat↑), p99 1.68ms → 0.93ms (%44↓)
- Redis de IO thread’leriyle 235K → 563K RPS, p99 1.35ms → 0.84ms (%40↓)
Çok iş parçacıklılık / çekirdek tuning etkisi
- IO thread’leri 3 veya daha fazla olduğunda etki belirginleşiyor ve Valkey, 4 thread sonrasında Redis ile farkı daha da açıyor
- IRQ (interrupt) çekirdekleri 2 ile sınırlandırıldıktan sonra Redis / Valkey’nin kalan 6 çekirdeğe sabitlenmesi (pinning) ek performans artışı sağlıyor
- Valkey: 832K → 999.8K RPS (çekirdek / IRQ pinning, CPU’nun %80 kullanımı)
- IRQ ile uygulama çekirdeklerini ayırmak, cache verimliliğini ve tail latency’yi iyileştiriyor
- Docker’da
cpuset-cpus,--io-threadsgibi ayarların kullanımına dair örnekler veriliyor
Benchmark’ı yeniden üretme ve pratik ipuçları
- En güncel AWS Graviton4 (c8g.2xlarge) instance’ları ve cluster placement group kullanımı
- Çekirdek pinning / IRQ ayrımı / connection sayısı ayarı (400–500 aralığı) ile en yüksek performansın elde edilmesi
- Keyspace / öğe boyutu için de tuning gerekli; küçük değerler / küçük keyspace, L3 cache isabet oranını artırıyor
- valkey-benchmark veya rpc-perf (gerçek kullanıma daha yakın Rust tabanlı araç) gibi çok iş parçacıklı benchmark araçlarının aktif kullanımı öneriliyor
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
Performans ölçümünün sınırları ve dikkat edilmesi gerekenler
-
Benchmark sonuçları gerçek operasyon ortamından farklı olabilir
- Gerçek workload; SET:GET karışımı, yük dalgalanması, TPS hedefi, ağ gecikmesi gibi birleşik etkenler içerir
- Connection sayısı aniden arttığında kuyruk gecikmesi ve throughput düşüşü ile tail latency artışı da gözlemlenebilir
- Kullanılan benchmark aracı / seçenekler ve ağ topolojisine göre sonuçlar büyük ölçüde değişebilir
Başlıca büyüme süreci ve topluluk gelişimi
Valkey projesi son 1 yılda birçok açıdan hızlı bir gelişim gösterdi
- GitHub gibi platformlarda çok sayıda geliştirici ve şirketin iş birliğiyle özellik eklemeleri, hata düzeltmeleri ve güvenlik iyileştirmeleri yapıldı
- Dokümantasyon ve kullanıcı desteğine de önem verilerek yeni kullanıcılar için giriş bariyeri düşürüldü
- Proje yönetiminde şeffaf karar alma ve topluluk oylamaları öne çıkarıldı
Sektörel ve teknik değer
Valkey şu güçlü yönlere sahip
- Lisans kısıtları olmadan herkes tarafından kullanılabildiği için bulut hizmet sağlayıcıları ve büyük ölçekli web hizmeti şirketleri için çekici bir seçenek
- Redis ile yüksek uyumluluk sunduğundan migration da kolay
- Topluluk odaklı geliştirildiği için farklı ihtiyaçlar daha iyi yansıtılabiliyor ve hızlı, sürekli güncellemeler mümkün oluyor
Sonuç ve çıkarımlar
- Valkey, Redis çatalı olduktan yalnızca 1 yıl sonra teknoloji / performans / topluluk açısından Redis’i aşan sonuçlar gösterdi
- IO thread’leri, çekirdek / IRQ ayrımı ve connection ayarı gibi pratik tuning yöntemleri ile araçlar kritik önemde
- Performans kendiliğinden gelmez; sistem / workload / altyapıya uygun sürekli optimizasyon şarttır
- Gerçek servis ortamında yalnızca benchmark sayılarına güvenmek yerine, farklı senaryoların doğrudan test edildiği pratik bir yaklaşım gerekir
4 yorum
Redis birçok yanlış karar vermiş olsa da, işi yapanın başkası, parayı alanınsa eğitmen olduğu bu tablo gerçekten üzücü.
Facebook'taki "Redis User Group"ta paylaşılan,
Valkey 8'de hangi iyileştirmelerin yapıldığını özetleyen bir materyal.
https://www.facebook.com/groups/rediskorea/posts/3927030954110001/
Yukarıdaki içerikle birlikte bakarsanız anlamanıza yardımcı olabilir.
Aslında Valkey'nin yaptığı bir şeyden çok... karşı tarafın kendi kendine çökmesiyle ilgili...
Hacker News yorumu
write(2)/read(2)syscall'larının oldukça yavaş olabildiğini dikkate alıp, tam o anda zero contention durumunda yalnızca I/O'yu N adet thread'e paralel işlettikten sonra hemen yeniden single-thread yapısına dönen bir tasarım getirdim. ValKey ekibinin bu sistemi daha da geliştirmiş olmasına minnettarım. Bu sistem zaten uzun süredir çalışıyordu ve gerçekte değişmemiş şeyleri medyanın abartma eğilimi beni rahatsız ediyor. Bu özellikler pratikte çoğu sıradan Redis kullanıcısından çok kurumsal kullanıcıların ya da bulut sağlayıcılarının (Amazon, Google vb.) ilgisini çekiyor. Aşırı yük veya aynı anda çok sayıda kullanıcıyı yönetmek zorunda kalınan durumlar yoksa, çoğu zaman Redis'in CPU kullanımı düşük olduğu için bunu etkinleştirmeye gerek olmuyor. Son dönemde Redis'te vector set data type geliştirirken threading'i varsayılan hale getiriyoruz veVADDile vector set yazımları da threaded şekilde yapılabiliyor.HNSWgibi veri yapıları, Redis tarihinde ilk kez çok büyük sabit zaman maliyetleri getirdiği için tasarım alanı da değişiyor. Geçmişte modüller için thread desteğini de zaten uygulamıştım. Thread kullanıp kullanmamak bağlama göre verilen bir karardır.libvalkeyadlı resmî bir fork var; mevcut hiredis/hiredis-cluster bakımcıları tarafından yönetiliyor libvalkey'e bakın