Redis Sharding

Redis Sharding



När du först börjar använda Redis är det lätt att tro att du aldrig kommer att behöva skala det utöver standardinställningarna. Problemet är att när din applikation växer kommer du så småningom att behöva mer minne, CPU och genomströmningskapacitet för att stödja dina affärsbehov. I den här artikeln kommer vi att visa dig hur Redis-klustret skalas med skärning för att ge dig den extra kapacitet du behöver för att driva ditt företag smidigt och växa in i framtiden. Vi kommer specifikt att lära oss hur Redis-klustret ger hög genomströmning med skärning.

Skalbarhet

Det finns två vanliga metoder för att skala en server: vertikal skalning och horisontell skalning. Vertikal skalning eller uppskalning är där du lägger till mer kraft och resurser till din server, såsom fler processorer, minne och lagring, vilket är dyrt. Å andra sidan är horisontell skalning att lägga till flera noder till din befintliga resurspool. Detta kallas utskalning. Så baserat på dina begränsningar och krav är det upp till dig att ha en enda större serverinstans eller distribuera flera servernoder.

Anta att du har 100 GB RAM och behöver hålla 200 GB data. I det här fallet har du två val:







  • Skala upp genom att lägga till mer RAM till systemet
  • Skala ut genom att lägga till ytterligare en serverinstans med 100 GB RAM

Om du har nått den maximala RAM-gränsen inom din infrastruktur, är utskalning det idealiska tillvägagångssättet. Dessutom kommer utskalning att öka databasgenomströmningen med en enorm marginal.





Redis Sharding

Det är ett känt faktum att Redis verkar på en enda tråd. Så Redis kan inte använda flera kärnor av din servers CPU för att bearbeta kommandon. Att lägga till fler CPU-kärnor ger dig därför inte mycket genomströmning eller prestanda med Redis. Det är inte fallet med att dela upp din data mellan flera serverinstanser. Genom att lägga till flera servrar och fördela datamängden mellan dessa möjliggör bearbetning av klientförfrågningar parallellt, vilket ökar genomströmningen. Dessutom kan den totala prestandan öka nästan linjärt.





Detta tillvägagångssätt att dela eller distribuera data mellan flera servrar med skalning i åtanke kallas skärning . Alla servrar som lagrar delar av data anropas skärvor .



Hur skärning görs - Algoritmisk skärning

En av de största problemen med sharding var hur man lokaliserar en given nyckel bland flera Redis-noder. Eftersom en given nyckel kan lagras i alla tillgängliga shards, är det inte det bästa alternativet att fråga alla shards för att hitta en specifik nyckel. Så det borde finnas ett sätt att mappa varje nyckel till en specifik skärva, och Redis använder en algoritmisk skärningsstrategi.

Det vanligaste tillvägagångssättet är att beräkna ett hashvärde med hjälp av Redis-nyckelnamnet och modulo. Dela den sedan med de tillgängliga Redis-skärvorna i systemet.

HASH_SLOT = CRC16(nyckel) mod 16384

Det är en ganska bra lösning så länge det totala antalet skärvor är konstant. När du lägger till en ny Reids-serverinstans kan det resulterande värdet för en given nyckel ändras eftersom det totala antalet shards har ökat. Det kommer att sluta fråga fel Redis-skärva. Därför bör du följa omdelningsprocessen genom att beräkna den nya skärvan för varje nyckel och överföra data till rätt server, vilket är besvärligt och inte en trivial uppgift om ditt totala antal skärvor ökar från tid till annan.

Redis använder en ny logisk enhet som kallas a hashplats för att förhindra detta problem. Flera hash-slots är tillgängliga för en given shard, och en enda hash-slot kan hålla flera Redis-nycklar. Det finns 16384 hashplatser i ett Redis-databaskluster som förblir oförändrat. Modulo-delningen görs med antalet hash-slots istället för shard-antalet. Det ger rätt position för hash-öppningen för den angivna nyckeln även när antalet skärvor har ökat. Det förenklar omdelningsprocessen genom att flytta hash-slots från en shard till den nya som delar upp data över de olika Redis-instanserna enligt krav.

Fördelar med Redis Sharding

Redis sharding möjliggör flera fördelar för ditt databassystem med minimala ändringar.

Hög genomströmning

Eftersom Redis är entrådad kan behandling av flera klientförfrågningar inte behandlas parallellt med flera CPU-kärnor. Så att lägga till nya shards eller serverinstanser garanterar att du kan utföra Redis-operationer parallellt. Det ökar operationerna per sekund i din Redis-databas, vilket så småningom ger dig hög genomströmning.

Hög tillgänglighet

Med skärningsmetoden kan Redis-klustret skapa en master-replika-arkitektur som säkerställer hög tillgänglighet och hållbarhet.

Läs Replicas

Sharing gör att du kan behålla en exakt kopia av dina data och tillhandahålla läsoperationer genom separata Redis-instanser, vilket ökar prestandan för körningen av din läsfråga.

Bortsett från dessa fördelar kan skärning orsaka situationer med splittrade hjärnor när du har ett jämnt antal skärvor i Redis-klustret. Så det rekommenderas att behålla ett udda antal skärvor i ditt Redis-kluster.

Slutsats

För att sammanfatta, Redis sharding delar upp data mellan flera servrar, vilket möjliggör skalning och hög genomströmning för din databas. Som diskuterats använder Redis en algoritmisk skärningsstrategi för att peka klientförfrågningar till rätt skärva. Detta har vissa nackdelar när det totala antalet skärvor ökar. Så istället för det totala antalet shards använder Redis antalet hashplatser för att beräkna lämplig shard. Med sharding introducerad ger Redis-databaser hög tillgänglighet, hög genomströmning och hög prestanda.