Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Redis Aktiv-Aktiv-Replikation

Redis v2.8.3 unterstützt keine Multi-Master-Setups. Die eigentliche Frage ist jedoch, warum Sie eine einrichten möchten? Anders ausgedrückt, welche Herausforderung/welches Problem versuchen Sie zu lösen?

Es sieht so aus, als ob die Herausforderung, die Sie zu lösen versuchen, darin besteht, die Netzwerklast zu reduzieren (mehr dazu weiter unten), indem Sie Over-the-Net-Lesevorgänge eliminieren. Da Redis (noch) kein Multi-Master ist, besteht die einzige Möglichkeit darin, jeden App-Server mit einem Master und einzurichten ein Slave (zum anderen Master) - d.h. insgesamt 4 Redis-Instanzen (und doppelt so viel RAM).

Das einfache Szenario besteht darin, dass jede App nur eine sich gegenseitig ausschließende Teilmenge der Schlüssel der Datenbank aktualisiert. In diesem Szenario kann diese Art der Einrichtung (zumindest kurzfristig) tatsächlich von Vorteil sein. Wenn jedoch beide Apps alle Tasten berühren können oder wenn sogar nur eine Taste für Schreibvorgänge zwischen den Apps „geteilt“ wird, müssen Sie Sperr-/Konfliktlösungslogik/usw.-Logik in Ihre Apps einbacken, um den lokalen Master zu konsolidieren und Slave-Unterschiede (und das ist vielleicht etwas übertrieben). In beiden Fällen erhalten Sie jedoch zu viele (d. h. mehr als 1) Redises, was mindestens mehr Verwaltungsaufwand bedeutet.

Beachten Sie auch, dass Sie sich durch das Zusammenlegen von App und Datenbank auf demselben Server auf einen nahezu sicheren Skalierbarkeitsfehler einstellen. Was passiert, wenn Sie mehr Rechenressourcen für Ihre Apps oder Redis benötigen? Wie werden Sie der Mischung einen weiteren App-Server hinzufügen?

Das bringt mich zurück zu dem eigentlichen Problem, das Sie zu lösen versuchen - Netzwerklast. Warum genau ist das ein Problem? Sind Ihre Apps so durchsatzlastig oder ist das Netzwerk so dünn, dass Sie bereit sind, solche Anstrengungen zu unternehmen? Oder vielleicht ist Latenz das Problem, das Sie lösen möchten? Wie dem auch sei, ich habe Ihnen empfohlen, stattdessen ein bewährtes Design in Betracht zu ziehen, nämlich Redis von den Apps zu trennen und es auf eigene Ressourcen zu stellen. Es stimmt, das Netzwerk wird Ihnen ins Gesicht schlagen und Sie müssen darum herum/mit ihm arbeiten (was alle anderen tun). Andererseits haben Sie mehr Flexibilität und Kontrolle über Ihr viel einfacheres Setup, und das ist meiner Meinung nach ein großer Gewinn.