Daniel Botha 认为,在构建基础设施时,目标应该是一个简单、可靠的方案,就像一袋 1 美元的意大利面,而不是一个巧妙的方案。Sprites 项目启动时,团队找不到合适的现成文件系统,于是自行开发了一个。那个设计很巧妙,而这恰恰是团队后来不喜欢它的原因。本文介绍了它的替代者:Sprites 块设备 (SBD)。
Sprite 的磁盘根部仍然是对象存储,而不是它所在服务器上的 NVMe 驱动器。这使得 Sprite 能够休眠、在另一台服务器上唤醒,并且仍能找到自己的文件。由于对象存储无法修改对象的一部分,因此需要有某种机制将就地文件编辑转换为整个对象的写入。在上线时,这一角色由经过大幅修改的 JuiceFS 承担,其后端是由 Litestream 保持持久化的重写版 SQLite 元数据存储。它在内部存储一个 100 GB 的磁盘映像(其中包含 ext4),检查点速度很快,因为它们主要只是移动元数据。
随着使用量增长,问题开始出现。该系统依赖两个各自持久化的数据库,一个用于块元数据,一个用于检查点,其中一个可能正确而另一个错误。在 JuiceFS 的回写模式下运行时,崩溃可能导致元数据指向从未上传的块。上层的 ext4 层随后会校验失败并转为只读,而共享相同块的检查点也无法修复损坏。
SBD 用更传统的方法取代了这一设计,目标是在更高可靠性的基础上实现同样简单的行为。
来源: Hacker News · 由HeadlinesBriefing整理摘要