Daniel Botha argumentiert, dass beim Aufbau von Infrastruktur das Ziel eine einfache, zuverlässige Lösung sein sollte, etwa eine Packung Spaghetti für 1 $, und keine clevere. Als die Arbeit an Sprites begann, fand das Team kein geeignetes Dateisystem von der Stange und baute deshalb ein eigenes. Dieses Design war clever, und genau deshalb mochte das Team es später nicht mehr. Dieser Beitrag stellt seinen Nachfolger vor, den Sprites Block Device (SBD).
Die Wurzel der Festplatte eines Sprites bleibt Objektspeicher und nicht die NVMe-Platte des Servers, auf dem es läuft. Dadurch kann ein Sprite schlafen gehen, auf einem anderen Server aufwachen und trotzdem seine Dateien finden. Da Objektspeicher keinen Teil eines Objekts ändern können, muss etwas In-Place-Dateiänderungen in das Schreiben ganzer Objekte übersetzen. Zum Start übernahm diese Rolle eine stark modifizierte Version von JuiceFS, gestützt auf einen neu geschriebenen SQLite-Metadatenspeicher, der mit Litestream dauerhaft gesichert wurde. Es speicherte ein einziges 100-GB-Festplattenabbild mit ext4 darin, und Checkpoints waren schnell, weil sie meist nur Metadaten verschoben.
Mit wachsender Nutzung zeigten sich Risse. Das System stützte sich auf zwei getrennt dauerhafte Datenbanken, eine für Chunk-Metadaten und eine für Checkpoints, und jede konnte korrekt sein, während die andere falsch war. Der Betrieb von JuiceFS im Writeback-Modus bedeutete, dass ein Absturz Metadaten hinterlassen konnte, die auf nie hochgeladene Chunks zeigten. Die darüberliegende ext4-Schicht scheiterte dann an Prüfsummen und wurde schreibgeschützt, und die Checkpoints, die dieselben Chunks nutzten, konnten den Schaden nicht beheben.
SBD ersetzt dieses Design durch einen konventionelleren Ansatz, der dasselbe einfache Verhalten mit besserer Zuverlässigkeit erreichen soll.
Quelle: Hacker News · Zusammengefasst von HeadlinesBriefing