Daniel Bothaは、インフラを構築する際の目標は、賢い解決策ではなく、1ドルのスパゲッティの袋のようなシンプルで信頼できる解決策であるべきだと主張しています。Spritesの開発が始まったとき、チームは適切な既製のファイルシステムを見つけられなかったため、独自に作りました。その設計は賢いものでしたが、まさにそれが理由で、チームはやがてそれを好まなくなりました。本記事では、その後継となるSprites Block Device(SBD)を紹介します。
Spriteのディスクの根幹は、実行されているサーバーのNVMeドライブではなく、依然としてオブジェクトストレージにあります。これにより、Spriteはスリープし、別のサーバーで起動しても、ファイルを見つけることができます。オブジェクトストアはオブジェクトの一部だけを変更できないため、その場でのファイル編集を、オブジェクト全体の書き込みに変換する仕組みが必要です。リリース時にはその役割を、大幅に改変されたJuiceFKに似たJuiceFSが担っていました。そのバックエンドは、Litestreamによって永続化された書き直し版のSQLiteメタデータストアでした。これは内部にext4を含む100 GBのディスクイメージ1つを保存しており、チェックポイントは主にメタデータを移動するだけなので高速でした。
利用が増えるにつれ、問題が現れ始めました。このシステムは、チャンクのメタデータ用とチェックポイント用という、別々に永続化される2つのデータベースに依存していました。そのため、一方が正しくても、もう一方が誤っている可能性がありました。JuiceFSをwritebackモードで動かすと、クラッシュによってメタデータが、一度もアップロードされていないチャンクを指したままになる場合がありました。その上のext4層はチェックサムに失敗して読み取り専用になり、同じチャンクを共有するチェックポイントでは、その損傷を修復できませんでした。
SBDは、この設計を、より従来型のアプローチに置き換えるものです。同じシンプルな動作を目指しつつ、信頼性を高めることを狙っています。
出典: Hacker News · 要約:HeadlinesBriefing