Daniel Botha affirme qu'en construisant une infrastructure, l'objectif doit être une solution simple et fiable, comme un paquet de spaghettis à 1 $, plutôt qu'une solution astucieuse. Lorsque le travail sur Sprites a commencé, l'équipe n'a pas trouvé de système de fichiers adapté sur le marché et l'a donc construit lui-même. Cette conception était astucieuse, et c'est précisément pour cette raison qu'elle a fini par leur déplaire. Ce billet présente son remplaçant, le Sprites Block Device (SBD).
La racine du disque d'un Sprite reste un stockage d'objets plutôt que le disque NVMe du serveur qui l'exécute. C'est ce qui permet à un Sprite de se mettre en veille, de se réveiller sur un autre serveur et de retrouver tout de même ses fichiers. Comme les magasins d'objets ne peuvent pas modifier une partie d'un objet, il faut une couche qui traduise les modifications de fichiers en écritures d'objets complets. Au lancement, ce rôle était assumé par une version fortement modifiée de JuiceFS, adossée à un magasin de métadonnées SQLite réécrit et rendu durable grâce à Litestream. Il stockait une seule image disque de 100 Go contenant de l'ext4, et les points de contrôle étaient rapides car ils se contentaient surtout de déplacer des métadonnées.
Avec la croissance de l'utilisation, des fissures sont apparues. Le système reposait sur deux bases de données distinctes et durables, l'une pour les métadonnées des blocs et l'autre pour les points de contrôle, et chacune pouvait être correcte pendant que les autres étaient fausses. Faire fonctionner JuiceFS en mode writeback signifiait qu'un plantage pouvait laisser des métadonnées pointant vers des blocs jamais envoyés. La couche ext4 supérieure échouait alors aux vérifications de somme et passait en lecture seule, et les points de contrôle, qui partageaient les mêmes blocs, ne pouvaient pas réparer les dégâts.
SBD remplace cette conception par une approche plus classique, visant le même comportement simple avec une meilleure fiabilité.
Source: Hacker News · Résumé par HeadlinesBriefing