sql >> Database >  >> NoSQL >> Redis

Redis actief-actieve replicatie

Redis v2.8.3 ondersteunt geen multi-master setups. De echte vraag is echter waarom je er een wilt opzetten? Anders gezegd, welke uitdaging/probleem probeer je op te lossen?

Het lijkt erop dat de uitdaging die u probeert op te lossen, is hoe u de netwerkbelasting kunt verminderen (daarover hieronder meer) door over-the-net reads te elimineren. Aangezien Redis (nog) geen multi-master is, is de enige manier om dit te doen door elke app-server in te stellen met een master en een slave (naar de andere master) - d.w.z. in totaal 4 Redis-instanties (en tweemaal zoveel RAM).

Het eenvoudige scenario is wanneer elke app slechts een wederzijds exclusieve subset van de databasesleutels bijwerkt. In dat scenario kan dit soort opstelling zelfs voordelig zijn (althans op korte termijn). Als beide apps echter alle toetsen kunnen aanraken of als er zelfs maar één toets wordt "gedeeld" voor schrijfbewerkingen tussen de apps, dan moet je vergrendeling/conflictoplossing/etc... logica in je apps inbouwen om de lokale master te consolideren en slavenverschillen (en dat is misschien een beetje overdreven). In beide gevallen krijg je echter te veel (d.w.z. meer dan 1) redises, wat op zijn minst meer administratieve inspanning betekent.

Houd er ook rekening mee dat door de app en database op dezelfde server te coloceren, u uzelf instelt voor een vrijwel zeker falen van de schaalbaarheid. Wat gebeurt er als u meer rekenbronnen nodig heeft voor uw apps of Redis? Hoe voeg je nog een app-server toe aan de mix?

Dat brengt me terug bij het eigenlijke probleem dat u probeert op te lossen:netwerkbelasting. Waarom is dat precies een probleem? Zijn uw apps zo doorvoer-zwaar of is het netwerk zo dun dat u bereid bent tot het uiterste te gaan? Of is latentie misschien het probleem dat u wilt oplossen? Hoe het ook zij, ik raad u aan om in plaats daarvan een beproefd ontwerp te overwegen, namelijk Redis scheiden van de apps en het op zijn eigen bronnen zetten. Toegegeven, het netwerk zal je in het gezicht slaan en je zult er omheen/mee moeten werken (wat iedereen doet). Aan de andere kant heb je meer flexibiliteit en controle over je veel eenvoudigere setup en dat is naar mijn mening een enorme winst.



  1. Een subdocument bijwerken dat is opgenomen in een array in een MongoDB-document

  2. Hoe kan ik testen of mijn redis-cache werkt?

  3. Update meerdere elementen in een array in mongodb

  4. Handige scripts voor Couchbase Dba