Redis gegen Zookeeper

25

Es erscheint albern, diese beiden Server zu vergleichen, wenn man bedenkt, dass sie für sehr unterschiedliche Zwecke gedacht sind. Aber wenn Sie darüber nachdenken, können sie viele ähnliche Dinge tun: Konfigurationsdaten speichern, verteilte Sperren, Warteschlangen usw.

Ich habe eine Instanz von Redis , die ich für einige produktionsbezogene Aufgaben verwende, möchte aber eine einfache Synchronisierung zwischen Servern durchführen (hauptsächlich Konfigurationsänderungen, für die kein Push-up-Code und einfaches Sperren zwischen Servern erforderlich ist). Was gibt mir Zookeeper , dass Redis nicht würde?

Jason Baker
quelle
Redis ist nicht (speziell) für die Konfiguration. Das sind ganz andere Produkte.
Rein Henrichs
4
Warum? Wir verwenden PostgreSQL zur Konfiguration. Was unterscheidet die Konfiguration von der Geschäftslogik?
Dmitry Negoda

Antworten:

26

Wir arbeiten sowohl mit Redis als auch mit Zookeeper

Redis ist schnell; wirklich sehr schnell. Es ist auch sofort konsistent und eignet sich daher für sich schnell bewegende Datensätze. Der Nachteil ist, dass auf einem Server ausgeführt, wenn es fehlschlägt, Sie den Schreibzugriff verlieren, bis ein anderer Server seinen Platz einnimmt. Das Ersetzen des Servers ist ein manueller Vorgang, sofern Sie ihn nicht selbst automatisieren. (Sie können weiterhin Lesezugriff auf Ihre Daten erhalten, wenn Sie eine Slave-Instanz konfigurieren.)

Zookeeper bietet auch sofort Konsistenz. Es ist nicht halb so schnell, aber es wird automatisch wiederhergestellt (wo immer möglich), selbst wenn Ihre Server ausfallen, sollten Sie Zookeeper verwenden, wenn Sie kontinuierlichen Schreibzugriff benötigen.

Mein Rat ist, verwenden Sie zookeeper für die Koordination: Verfolgen Sie, welche Knoten aktiv sind, wählen Sie einen Anführer in einer Gruppe usw. Verwenden Sie redis für Datensätze, die schnelle Schreibvorgänge benötigen, bei denen ein gelegentlicher Ausfall jedoch keine Katastrophe ist. Trefferzähler für Webseiten zum Beispiel.

dan_waterworth
quelle
Ich arbeite derzeit an einem Projekt und dachte, dass der Tierpfleger der richtige Weg sein würde. Wenn Sie weitere Informationen haben, die Sie irgendwo teilen können, wäre dies wunderbar. Wir haben es mit mehreren Anzeigenbörsen zu tun und verfolgen täglich mehr als 4 Milliarden Ereignisse. Wir wollten unsere Front-End-Server überarbeiten und haben uns mit zookeeper befasst, um Informationen über Nachverfolgungszählungen, minimale Gewichtung usw. zu speichern. Ich kann die Geschwindigkeit von Redis bestätigen, aber meiner Erfahrung nach fehlt es an einer hierarchischen Struktur, die wir mit zookeeper verwenden wollten. Hat sich Ihre Haltung gegenüber den drei Jahren seit 2012 geändert?
Chris Hinshaw
@ ChrisHinshaw Ich stehe vor dem gleichen Problem. Wir ziehen sowohl Redis als auch Zookeeper für einen verteilten Ressourcenmanager in Betracht, der sowohl verteilte Sperren als auch Leistung erfordert. Haben Sie Feedback?
Rafael Saraiva
Ich bin gerade dabei, dies umzuschreiben. Ich bin wegen der Geschwindigkeit mit Redis gefahren. Es gab einige Leistungsprobleme mit Zookeeper, aber ich erinnere mich nicht an die Probleme. Wir speichern Zeitreihendaten basierend auf Metriken und Zählungen. Ich verwende Lua-Skripte, um die Anzahl für jeden der Zeiträume zu aktualisieren, um die Anzahl der Anrufe zu begrenzen. Ein Beispiel ist, dass wir einen Hash-Schlüssel für Gebotsanfragen in Form von br: 1: 2: 3: 4 haben, wobei die Zahlen eine Hierarchie von Metrik: Agentur: Werbetreibender: Kampagne: Anzeige darstellen. Im Hash sind die Werte Jahr: Monat: Tag: Stunde: Minute. In meinem Lua-Skript würde ich die Zählungen für jeden aktualisieren
Chris Hinshaw,
der Zeitscheiben. Daher teilt mein Skript das y: m: d: h nach Doppelpunkten und aktualisiert die Gesamtsummen für jedes Segment. Auf diese Weise kann ich einen hscan verwenden oder eine Liste von Schlüsseln für jede Zeitscheibe abrufen. Das Wichtigste bei redis ist, ein Hierarchiemodell für die Schlüssel zu entwickeln. Irgendwann in der Zukunft möchte ich das alles verschieben, um Rdd's mit einem Kassandra-Laden auszulösen. Wenn ich die Zeit hätte, würde ich Spark-Streaming implementieren, um dies zu bewerten. Ich denke, dass es Redis ebenbürtig ist und die Flexibilität bietet, Analysen durchzuführen.
Chris Hinshaw