So speichern Sie Daten auf einem Computer, dessen Stromzufuhr zufällig unterbrochen wird

13

Ich habe eine virtuelle Maschine (Debian), die auf einem physischen Maschinenhost ausgeführt wird. Die virtuelle Maschine fungiert als Puffer für Daten, die sie häufig über das lokale Netzwerk empfängt (der Zeitraum für diese Daten beträgt 0,5 s, also einen relativ hohen Durchsatz). Alle empfangenen Daten werden auf der virtuellen Maschine gespeichert und wiederholt über UDP an einen externen Server weitergeleitet. Sobald der externe Server (über UDP) bestätigt, dass er ein Datenpaket empfangen hat, werden die ursprünglichen Daten von der virtuellen Maschine gelöscht und nicht erneut an den externen Server gesendet. Die Internetverbindung zwischen der VM und dem externen Server ist unzuverlässig, was bedeutet, dass sie möglicherweise tagelang ausgefallen ist.

Die physische Maschine, auf der sich die VM befindet, wird mehrmals täglich zufällig ausgeschaltet. Es kann nicht festgestellt werden, wann dies geschieht, und es ist nicht möglich, dem System eine USV, eine Batterie oder eine ähnliche Lösung hinzuzufügen.

Ursprünglich wurden die Daten in einer dateibasierten HSQLDB-Datenbank auf der virtuellen Maschine gespeichert. Die häufigen Stromausfälle führen jedoch dazu, dass die Datenbankskriptdatei beschädigt wird (nicht auf Dateisystemebene, dh lesbar, aber HSQLDB kann keinen Sinn daraus machen), was zu meiner Frage führt:

Wie sollten Daten in einer Umgebung gespeichert werden, in der Stromausfälle häufig vorkommen können und müssen?

Eine Option, die mir in den Sinn kommt, ist die Verwendung von Flatfiles, bei denen jedes Datenpaket als Datei im Dateisystem gespeichert wird. Auf diese Weise kann eine aufgrund eines Stromausfalls beschädigte Datei ignoriert werden und der Rest der Daten bleibt erhalten. Dies wirft jedoch einige Probleme auf, die hauptsächlich mit der Datenmenge zusammenhängen, die wahrscheinlich auf der virtuellen Maschine gespeichert ist. Zwischen den einzelnen Daten werden innerhalb von 10 Tagen 1.728.000 Dateien erstellt. Dies bedeutet zumindest, dass ein Dateisystem mit einer erhöhten Anzahl von Inodes zum Speichern dieser Daten verwendet wird. Auch ist es schwierig (nicht unmöglich), damit umzugehen.

Gibt es noch andere Möglichkeiten? Gibt es unter Debian laufende Datenbank-Engines, die nicht durch Stromausfälle beschädigt würden? Welches Dateisystem sollte dafür verwendet werden? Derzeit wird ext3 verwendet.

Die Software, die auf der virtuellen Maschine ausgeführt wird, wurde mit Java 6 geschrieben, sodass die Lösung hoffentlich nicht inkompatibel ist.

Sevas
quelle
14
"Die physische Maschine, auf der sich die VM befindet, wird mehrmals täglich zufällig vom Stromnetz getrennt. Es ist nicht möglich, eine USV, einen Akku oder eine ähnliche Lösung hinzuzufügen System." Ich möchte wirklich wissen, wie das möglich ist. Befindet es sich in der Internationalen Raumstation, so dass 20 Millionen US-Dollar erforderlich sind, um eine UPS zu versenden, oder so?
ceejayoz
3
Verfügt der Computer mindestens über einen RAID-Controller mit batteriegepuffertem Cache?
Zoredache
4
Wir können sehr interessante, kreative und vielleicht theoretisch korrekte Lösungen für dieses Problem empfehlen. Aber wir wissen nicht , was Hypervisor und Hardware auf dem Host ausgeführt wird , so gäbe es keine Garantie, dass die Platte schreibt , wirklich geschrieben werden, oder in der richtigen Reihenfolge geschrieben ...
pino42
5
@Sevas Klingt so, als wäre es nicht Ihr Anruf, aber ich würde vorschlagen, dass es sich lohnt, darauf hinzuweisen, dass 50 einfache, billige USVs 2500 USD kosten und keine Wartung benötigen (Sie ersetzen sie nach ein paar Jahren, wenn die Batterien leer sind ). Die Kosten für den Versuch, dies in Software zu lösen, werden viel höher sein, es sei denn, Sie kennen eine Reihe von Programmierern, die kostenlos arbeiten. Könnte hilfreich sein, das Management dazu zu bringen, dies für 50 USD / Einheit zu lösen, anstatt für Dutzende oder Hunderte von qualifizierten Arbeitsstunden mit 3 Zahlen pro Stunde.
HopelessN00b
9
Das klingt tatsächlich nach einem bösartigen Programm. Der Benutzer weiß nicht, dass die "VM" auf seinem Computer ausgeführt wird. Es stiehlt Daten aus dem gesamten Netzwerk und leitet sie dann über eine Verbindung weiter, um sich zu verstecken. Der Benutzer schaltet den Computer nach dem Zufallsprinzip aus und wieder ein, sodass Sie nicht einfach eine USV hinzufügen können.
Laurence

Antworten:

23

Ehrlich gesagt besteht Ihr bester Ansatz darin, entweder die Stromausfälle zu beheben oder ein anderes System an einem besseren Ort einzusetzen.

Ja, es gibt Systeme wie Redis, die Daten zur Wiedergabe in einem Nur-Anhängen-Protokoll speichern. Sie riskieren jedoch Korruption auf niedrigeren Ebenen. Wenn z. B. Ihr Dateisystem verschlüsselt ist, sind die Daten auf der Festplatte möglicherweise gefährdet.

Ich schätze, dass eine Verbesserung für Sie nützlich wäre, aber das Problem kann in dem von Ihnen skizzierten Szenario nicht gelöst werden.


quelle
8
+1 Die richtige Antwort ist "Tu das nicht"
Chris S
6
+1 Irgendwann werden zufällige Stromausfälle Ihr Dateisystem beschädigen. Elektronik macht seltsame, unvorhersehbare Dinge, wenn ihr Strom ausfällt.
Grant
-1 (virtuell -1). Ich denke, dass ein solches System auf der Annahme aufbauen muss , dass Stromausfälle von Zeit zu Zeit auftreten. Diese Annahme ist eine reale Tatsache, mit der Sie sich auseinandersetzen müssen.
Igal Serban
11

Ihr Ansatz kann funktionieren. Lassen Sie mich einige Verbesserungen vorschlagen. Beim Stapelüberlauf beim atomaren Schreiben in eine Datei ist eine Frage aufgetreten . Im Wesentlichen speichern Sie jedes Datenpaket in einer temporären Datei und benennen es dann in den endgültigen Namen um. Das Umbenennen ist eine atomare Operation, die vor Stromausfällen sicher ist. Auf diese Weise wird garantiert, dass alle Ihre Dateien in Ihrem endgültigen Ziel ohne Beschädigung korrekt gespeichert wurden.

Was können Sie dann tun, um mit dem Problem der Millionen von Dateien umzugehen? Ist cron ein Job, der möglicherweise jede Stunde ausgeführt wird, wobei alle Dateien älter als eine Stunde sind und mit erneuten atomaren Dateivorgängen zu einer großen Datei zusammengefasst werden, sodass dieser Job auch bei einem Stromausfall sicher ausgeführt wird und die alten Dateien anschließend gelöscht werden. Art wie Holzrotation. Ein Stundenwert von Dateien würde ungefähr 7.200 Dateien betragen. Sie sollten also zu keinem Zeitpunkt mehr als 20.000 Dateien auf der Festplatte haben.

Marwan Alsabbagh
quelle
1
Keine schlechte Antwort, aber das Problem dabei ist die Annahme, dass das Schreiben selbst eine atomare Operation ist, was nicht der Fall ist. Ein Stromausfall zum falschen Zeitpunkt kann also immer noch zu Daten- oder FS-Schäden führen. Wahrscheinlich die beste Option, um den Strom zu reparieren oder das Gerät an eine USV anzuschließen, also +1.
HopelessN00b
Ja, das Umbenennen der einmal geschriebenen Datei ist eine atomare Operation. Schreiben Sie die Datei in erster Linie nicht.
HopelessN00b
3
@ HopelessN00b Es spielt keine Rolle, ob die neue Datei halb geschrieben oder beschädigt ist. Sie haben die alte Datei, die sich in einem guten Zustand befindet. Wenn Sie das System wiederherstellen, zerstören Sie die halbgeschriebene Datei.
DJClayworth
2
@ HopelessN00b Genau! Nur temporäre Dateien in einem temporären Verzeichnis können je zur Hälfte geschrieben werden. Alle Dateien in Ihrem endgültigen
Zielverzeichnis
7

Sie installieren eine USV oder eine RAID-Karte mit einem batteriegepufferten Schreibcache im System und für nur 49,95 US-Dollar erreichen Sie das, was mit Software allein einfach nicht möglich ist.

Ihre Behauptung, dass es irgendwie nicht möglich ist, diesen Server an eine USV oder einen Akku anzuschließen, ist einfach nicht glaubwürdig.

HopelessN00b
quelle
9
Bürokratische Dummheit ist immer glaubwürdig.
Dan ist Fiddling von Firelight
3
@DanNeely My PHB won't let me hook this up to a UPS/batteryist etwas ganz anderes als it is not possible to add a UPS, a battery, or a similar solution to the system. Nicht zu umständlich zu werden, aber es ist ein wichtiger Unterschied, weil es den Ansatz und die verfügbaren Lösungen ändert.
HopelessN00b
Oder, wie an anderer Stelle erwähnt, der Benutzer des entführten Computers wäre überrascht, wenn ich eine USV installieren würde. Ansonsten ist die Situation etwas unglaublich. Jeder würde innerhalb eines vernünftigen Rahmens eine UPS akzeptieren, wenn die Daten beschädigt sind.
WernerCD
@WernerCD Ich möchte, dass Sie unseren CIO kennenlernen. Ich bin damit einverstanden, dass die Entführung eines Computers ein möglicher Anwendungsfall dafür ist, aber ich kann auch an legitime denken, also gebe ich dem Typen den Vorteil des Zweifels. Denken Sie an eingebettete Systeme und Controller oder an einen Raspberry Pi - es kann durchaus vorkommen, dass der von Ihnen verwendete "Computer" weniger als die 50 US-Dollar wert ist, die für den Anschluss an eine USV erforderlich sind.
HopelessN00b
Auch wenn der Wert des Computers unter 50 US-Dollar liegt, sind die Daten auf dem Computer tatsächlich etwas wert. Google wurde auf "wertlosen" Computern aufgebaut. Wichtiger als die Kosten der CPU sind die Kosten für verlorene Daten, verlorene Arbeitskräfte (dieses Programmierabenteuer, das Verfolgen von Datenverfälschungen, das Verfolgen von Fehlern im alten System sowie in diesem neuen Teil), verlorener Kundennutzen (Meine Daten verloren? Nächste Firma bitte.)
Usw.
5

Stellen Sie das gesamte System schreibgeschützt bereit, mit Ausnahme eines Blockgeräts, auf dem alle Ihre Daten gespeichert sind. Verwenden Sie dieses Blockgerät direkt und implementieren Sie mithilfe dieses unformatierten Blockgeräts Ihren eigenen Datenspeichermechanismus.

MikeyB
quelle
3
... und investieren Sie in eine batteriegepufferte Festplattencontrollerkarte und vergewissern Sie sich, dass sich kein Schreib-Cache auf der Festplatte befindet oder dass Sie immer noch durchgedreht sind.
voretaq7
Kam hierher, um zu sagen, dass sie von einer Live-CD oder einem äquivalenten ROM-System gebootet werden sollten, wobei einige Solid-State-Speicher mit den Flat-File-Lösungen verwendet wurden.
Mark Allen
Der Schreibcache kann deaktiviert werden. Dieser Ansatz ist machbar. Es wird empfohlen, nur den Speichermechanismus anzufügen. Blöcke werden atomar geschrieben (ich nehme an), so dass Sie zwei "Zeiger" -Blöcke haben können, die auf den Anfang und das Ende des Abschnitts mit neuen / zu erledigenden Daten zeigen. Die Zeiger werden nach dem Schreiben / Beenden der Daten aktualisiert. NCQ sollte ebenfalls deaktiviert sein.
Schlaflos am