Yeniden Parçalama

Yeniden Parcalama



Redis'i ilk kullanmaya başladığınızda, onu asla varsayılan ayarların ötesine ölçeklendirmenize gerek kalmayacağına inanmak kolaydır. Sorun şu ki, uygulamanız büyüdükçe iş ihtiyaçlarınızı desteklemek için daha fazla belleğe, CPU'ya ve aktarım hızı kapasitesine ihtiyaç duyacaksınız. Bu makalede, işinizi sorunsuz bir şekilde yürütmek ve gelecekte büyümek için ihtiyaç duyduğunuz ekstra kapasiteyi sağlamak için Redis kümesinin parçalama ile nasıl ölçeklendiğini göstereceğiz. Redis kümesinin parçalama ile nasıl yüksek verim sağladığını özellikle öğreneceğiz.

ölçeklenebilirlik

Bir sunucuyu ölçeklendirmek için iki yaygın yaklaşım vardır: dikey ölçeklendirme ve yatay ölçeklendirme. Dikey ölçeklendirme veya ölçek büyütme, sunucunuza daha fazla CPU, bellek ve depolama gibi maliyetli olan daha fazla güç ve kaynak eklediğiniz yerdir. Öte yandan, yatay ölçeklendirme, mevcut kaynak havuzunuza birden çok düğüm eklemektir. Buna ölçeklendirme denir. Bu nedenle, sınırlamalarınıza ve gereksinimlerinize bağlı olarak, daha büyük tek bir sunucu örneğine sahip olmak veya birden çok sunucu düğümü dağıtmak size kalmış.

100 GB RAM'iniz olduğunu ve 200 GB veri tutmanız gerektiğini varsayalım. Bu durumda iki seçeneğiniz var:







  • Sisteme daha fazla RAM ekleyerek ölçeklendirin
  • 100 GB RAM'e sahip başka bir sunucu örneği ekleyerek ölçeği genişletin

Altyapınızdaki maksimum RAM sınırına ulaştıysanız, ideal yaklaşım ölçeklendirmedir. Ek olarak, ölçeklendirme, veritabanı verimini büyük bir farkla artıracaktır.





Yeniden Parçalama

Redis'in tek bir iş parçacığı üzerinde çalıştığı bilinen bir gerçektir. Dolayısıyla Redis, komutları işlemek için sunucunuzun CPU'sunun birden çok çekirdeğini kullanamaz. Bu nedenle, daha fazla CPU çekirdeği eklemek size Redis ile çok fazla verim veya performans sağlamaz. Verilerinizi birden çok sunucu örneği arasında bölmek söz konusu değildir. Birkaç sunucu eklemek ve veri setini bunlar arasında dağıtmak, istemci isteklerinin paralel olarak işlenmesini sağlar ve bu da verimi artırır. Ek olarak, genel performans lineere yakın artabilir.





Ölçeklendirme göz önünde bulundurularak verileri birden çok sunucu arasında bölme veya dağıtma yaklaşımına denir. parçalama . Veri bölümlerini depolayan tüm sunuculara denir. kırıklar .



Parçalama Nasıl Yapılır — Algoritmik Parçalama

Parçalama ile ilgili en büyük endişelerden biri, belirli bir anahtarın birden çok Redis düğümü arasında nasıl bulunacağıydı. Belirli bir anahtar herhangi bir kullanılabilir parçada depolanabileceğinden, belirli bir anahtarı bulmak için tüm parçaları sorgulamak en iyi seçenek değildir. Bu nedenle, her anahtarı belirli bir parçayla eşlemenin bir yolu olmalı ve Redis bir Algoritmik parçalama stratejisi kullanıyor.

En yaygın yaklaşım, Redis anahtar adını ve modulo'yu kullanarak bir karma değer hesaplamaktır. Ardından, sistemdeki mevcut Redis parçalarına bölün.

HASH_SLOT = CRC16(anahtar) modu 16384

Toplam kırık sayısı sabit olduğu sürece oldukça iyi bir çözümdür. Yeni bir Reids sunucu örneği eklediğinizde, toplam parça sayısı arttığı için belirli bir anahtarın sonuç değeri değişebilir. Yanlış Redis parçasını sorgulamakla sonuçlanacak. Bu nedenle, yeniden parçalama işlemini, her anahtar için yeni parçayı hesaplayarak ve verileri doğru sunucuya aktararak takip etmelisiniz ki bu, toplam parça sayınız zaman zaman artıyorsa zahmetli ve önemsiz bir iş değildir.

Redis, adı verilen yeni bir mantıksal varlık kullanır. hash yuvası bu sorunu önlemek için. Belirli bir parça için birkaç sağlama yuvası mevcuttur ve tek bir sağlama yuvası birden fazla Redis anahtarı tutabilir. Bir Redis veritabanı kümesinde değişmeden kalan 16384 hash yuvası vardır. Modulo bölümü, shard sayısı yerine hash slotlarının sayısı ile yapılır. Parça sayısı arttığında bile, belirtilen anahtar için hash yuvasının doğru konumunu sağlar. Karma yuvalarını bir parçadan, verileri gereksinime göre farklı Redis örnekleri arasında bölen yeni parçaya taşıyarak yeniden parçalama sürecini basitleştirir.

Redis Sharding'in Faydaları

Redis parçalama, minimum değişiklikle veritabanı sisteminize çeşitli avantajlar sağlar.

Yüksek Verim

Redis tek iş parçacıklı olduğundan, birden çok istemci isteğini işlemek, birden çok CPU çekirdeği kullanarak paralel olarak işleyemez. Bu nedenle, yeni parçalar veya sunucu örnekleri eklemek, Redis işlemlerini paralel olarak gerçekleştirebilmenizi garanti eder. Redis veritabanınızdaki saniye başına işlem sayısını artırır ve bu da sonunda size yüksek verim sağlar.

Yüksek kullanılabilirlik

Parçalama yaklaşımıyla Redis kümesi, yüksek düzeyde kullanılabilirlik ve dayanıklılık sağlayan bir ana çoğaltma mimarisi kurabilir.

Kopyaları Oku

Parçalama, verilerinizin tam bir kopyasını tutmanıza ve okuma sorgusu yürütme performansınızı artıran ayrı Redis örnekleri aracılığıyla okuma işlemleri sağlamanıza olanak tanır.

Bu avantajların dışında, parçalama, Redis kümesinde çift sayıda parçanız olduğunda bölünmüş beyin durumlarına neden olabilir. Bu nedenle, Redis kümenizde tek sayıda parça bulundurmanız önerilir.

Çözüm

Özetlemek gerekirse, Redis parçalama, verileri birden çok sunucu arasında bölerek, veritabanınız için ölçekleme ve yüksek verim sağlar. Açıklandığı gibi Redis, istemci isteklerini doğru parçaya yönlendirmek için algoritmik bir parçalama stratejisi kullanır. Toplam parça sayısı arttığında bunun bazı dezavantajları vardır. Dolayısıyla Redis, uygun parçayı hesaplamak için toplam parça sayısı yerine karma yuva sayısını kullanır. Sharding'in kullanıma sunulmasıyla, Redis veritabanları yüksek kullanılabilirlik, yüksek verim ve yüksek performans sağlar.