2017-04-21 2 views
0

Wir versuchen, eine verteilte Transaktion über mehrere Redis-Datenbanken zu entwerfen. Ist es möglich, Lua Script zu verwenden, um dies zu erreichen? Wir wollen nicht via 2-Phasen-Commit implementieren, da dies zu Datenverlust führen kann. Wir können uns keinen Datenverlust leisten.Redis Verteilte Transaktion mit Lua-Skript

Beispielszenario: Ich habe 3 Redis DBs. Wir müssen alle aktualisieren 3. Updates können sequenziell sein, aber wir möchten die Transaktion nur erfolgreich beenden, wenn alle drei erfolgreich sind. Wenn einer von ihnen versagt, sollten wir alle zurücksetzen können.

Antwort

0

Nein, es ist nicht möglich, verteilte Transaktionen zwischen Redis-Instanzen zu implementieren, die nur auf Lua-Skripten basieren, da Redis keine Bibliotheken für Netzwerkaufrufe bereitstellt. Sie können jedoch Lua-Skripts als Teil einer Lösung verwenden, um verteilte Transaktionen zu erstellen (ich habe Lua-Skripts verwendet, um Paxos auf Redis-Servern zu implementieren).

BTW, in Ihrer Frage gibt es ein Missverständnis über 2-Phasen-Commit verursacht Datenverlust. Es kann nicht passieren. Die Lehrbuchimplementierung von 2PC kann zu einer Situation führen, in der ein System blockiert ist, aber nicht zu einem Datenverlust führt. Aber auch das Blockieren ist kein Problem, da es nicht blockierende Versionen von 2PC gibt, wie die aus dem Percolator-Papier von Google.

Ich habe a visualization of non-blocking 2PC erstellt. Es kann Ihnen helfen, seine beweglichen Teile zu verstehen.

Verwandte Themen