|
|
2024-3-28 18:00:42 tarihinde yayınlandı
|
|
|
|

Garnet, Microsoft Research tarafından geliştirilen ve birkaç benzersiz fayda sunan yeni bir uzak önbellek depolama türüdür:
- Garnet, popüler RESP hat protokolünü başlangıç noktası olarak alır; bu da günümüzde çoğu programlama dilinde mevcut olan değiştirilmemiş Redis istemcilerinden Garnet'i kullanmayı mümkün kılar; örneğin C# dilindeki StackExchange.Redis gibi.
- Garnet, benzer açık kaynak önbellek depolama ile karşılaştırıldığında birçok istemci bağlantısı ve küçük partilerle daha iyi aktarım ve ölçeklenebilirlik sunar; böylece büyük uygulamalar ve hizmetler için maliyetleri azaltır.
- Garnet, hızlandırılmış TCP etkinleştirilmiş Commodity Cloud (Azure) VM'lerini kullanarak (genellikle %99,9'da 300 mikrosaniyeden az) son derece düşük istemci gecikmesi gösterdi ki, bu da gerçek dünya senaryoları için kritiktir.
- Garnet, en son .NET teknolojisine dayanır ve platformlar çapraz, genişletilebilir ve moderndir. Yaygın durumlarda performanstan ödün vermeden kolayca geliştirilebilecek ve gelişecek şekilde tasarlanmıştır. .NET'in zengin kütüphane ekosisteminden API'yi genişletmek ve açık optimizasyon fırsatları sağlamak için kullanıyoruz. .NET kullanımımız sayesinde Garnet, hem Linux hem de Windows'ta son teknoloji performansa ulaşıyor.
Açık Kaynak Adresi:Bağlantı girişi görünür. Belge:Bağlantı girişi görünür.
Garnet'in aşağıdaki temel faydaları vardır:
- Sunucu veri taşımacılığı (saniye başına operasyonlar), küçük partiler ve birçok istemci oturumu için karşılaştırılabilir açık kaynak önbellek depolama ile karşılaştırıldığında birkaç kat artmıştır.
- Windows ve Linux'ta hızlandırılmış TCP etkinleştirilmiş olan commodity cloud (Azure) makinelerinde, işlem başına gecikme son derece düşüktür (genellikle %99,9'da 300 mikrosaniyeden az).
- Müşteri sayısı arttıkça, istemci toplu olarak veya toplu olarak daha iyi ölçeklenebilirlik sağlanır.
- Bir sunucu bilgisayarının tüm CPU/bellek kaynaklarını tek bir paylaşılan bellek sunucusu örneği üzerinden kullanabilme yeteneği (düğüm içi kümeleme gerektirmez).
- Bellekten büyük veri setleri için destek, bu veri setleri yerel ve bulut depolama cihazlarına taşır.
- Hızlı kontrol noktası, kurtarma ve yayınlama/abone olma gibi veritabanı özellikleri var.
- Çok düğümlü parçalanmış hash bölümleme (Redis "küme" modu), durum göçü ve çoğaltma desteği.
- Kapsamlı bir test paketiyle iyi test edildi (Garnet ve depolama seviyesi Tsavorite ile binlerce birim testi).
- Kolayca geliştirilip genişletilebilen C# kod tabanı.
Garnet, özellikle aşağıdaki görüntü komutlarını desteklediği tüm Redis komutlarını desteklemez:Bağlantı girişi görünür. Garnet projesi, farklı istemciler, farklı iş yükleri ve farklı politikalar kullanarak RESP benchmarkları çalıştırmak için bir Benchmark aracı içerir; bu da veri verimliliği, performansı ve gecikmeyi ölçmektir. Adres:Bağlantı girişi görünür. RESP Protokolü:Bağlantı girişi görünür.
Bu makale, basit testler için Redis'in yerleşik kıyaslama araçlarını kullanır ve test ortamı aşağıdaki gibidir:
| önbellek | Sürüm | | Redis | Redis 3.0.504 (00000000/0) 64 bit | | Grena | Garnet 1.0.2 64 bit; bağımsız mod |
Redis kıyaslamaları
İlk olarak, Redis önbelleğini komut satırıyla aşağıdaki komutla başlatın:
Test komutu şöyledir:
Sonuçlar şu şekildedir:
====== SET ====== 24,38 saniyede tamamlanan 500000 istek 100 paralel istemci 3 bayt yük Hayatta Kalın: 1
%0,03 <= 1 milisaniye %0,25 <= 2 milisaniye %2,65 <= 3 milisaniye %16,49 <= 4 milisaniye %59,95 <= 5 milisaniye %99,09 <= 6 milisaniye %99,76 <= 7 milisaniye %99,86 <= 8 milisaniye %99,93 <= 9 milisaniye %99,98 <= 10 milisaniye %99,99 <= 11 milisaniye %100.00 <= 12 milisaniye 20512.82 istek saniyede
====== BUL ====== 500000 istek 27,41 saniyede tamamlandı 100 paralel istemci 3 bayt yük Hayatta Kalın: 1
%0,03 <= 1 milisaniye %0,19 <= 2 milisaniye %6,44 <= 3 milisaniye %25,82 <= 4 milisaniye %45,65 <= 5 milisaniye %98,79 <= 6 milisaniye %99,98 <= 7 milisaniye %99,98 <= 8 milisaniye %99,98 <= 9 milisaniye %100,00 <= 9 milisaniye 18238.86 istek saniyede
Garnet kıyaslamaları
Yeni bir .NET 8 konsol projesi oluşturun ve önce Microsoft.Garnet paketine aşağıdaki komutla başvurun:
Kod şöyledir:
Başlatma komutu şöyledir:
Aynı kıyaslama komutu kullanılarak sonuç şu şekildedir:
====== SET ====== 11,51 saniyede tamamlanan 500000 istek 100 paralel istemci 3 bayt yük Hayatta Kalın: 1
%75,51 <= 1 milisaniye %88,24 <= 2 milisaniye %92,04 <= 3 milisaniye %99,46 <= 4 milisaniye %99,98 <= 5 milisaniye %99,99 <= 6 milisaniye %100.00 <= 12 milisaniye %100.00 <= 12 milisaniye 43448.04 istek saniyede
====== BUL ====== 31,50 saniyede tamamlanan 500000 istek 100 paralel istemci 3 bayt yük Hayatta Kalın: 1
%0,01 <= 1 milisaniye %0,90 <= 2 milisaniye %27,25 <= 3 milisaniye %97,65 <= 4 milisaniye %99,82 <= 5 milisaniye %99,94 <= 6 milisaniye %99,98 <= 7 milisaniye %99,98 <= 9 milisaniye %99,98 <= 10 milisaniye %99,99 <= 11 milisaniye %100.00 <= 12 milisaniye %100.00 <= 12 milisaniye 15872.01 istek saniyede Test araçları, yazılım sürümleri, test parametreleri vb. farklı sonuçlara yol açtığı için testler sadece referans içindir; bu makaledeki basit testler sayesinde Garnet'in Redis'e göre çok daha düşük gecikmeye sahip olduğu görülebilir.
(Son) |
Önceki:.NET/C# yansıma özniteliği, null tiplerle değerlendirilebilirÖnümüzdeki:SSE (1), SSE sunucusu olarak ASP.NET Core'u kullanır
|