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.
quelle
Antworten:
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
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.
quelle
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.
quelle
My PHB won't let me hook this up to a UPS/battery
ist etwas ganz anderes alsit 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.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.
quelle