共享块设备
由于 JuiceFS 的分离架构,读写一般包含着元数据访问和对象存储访问,而后者的延迟往往更大。这也是为什么在 JuiceFS 中,小文件或者大量随机读写的性能会明显低于顺序读写。如果对读写性能有极致要求(达到接近本地盘水平),可以升级至 5.2 或更新版本的 JuiceFS 客户端,在节点挂载块设备并将他用于 JuiceFS 客户端的存储。
配合下方架构图来了解共享块设备的架构特点:
- 可以设定“Slice”大小阈值(一个 Slice 可以理解为「一次连续写入」,其长度在 0~64MB,详见存储架构),低于该大小时,直接写入块设备,享受本地盘级别的写入延迟。而如果大于设定的阈值,则直接上传对象存储;
- 对于存在块设备上的数据,支持设定不同的留存策略,可以设置保存时长,超过该时长后自动上传对象存储,也可以进一步设置留存 Slice 大小阈值,让小于临界值的写入片段长期存储在快设备上,更大的 Slice 则直接上传对象存储。这些存储策略允许用户更灵活地分配高性能的本地存储,以及成本更低的对象存储空间;
- 虽然功能命名为「共享块设备」,但是事实上 JuiceFS 支持使用任意未经格式化的块设备,并不强求是多点挂载的共享块设备。因此,你同样可以用普通的、单挂载的云盘来配合该功能使用,详见「单挂载块设备」。
在 JuiceFS 中使用共享块设备的典型场景:
- 读写都要求低时延,使用块设备做数据存储,甚至可以将块设备配置成永久存储(继续阅读下方小节了解);
- 共享块设备写入性能好,并且多节点挂载,可以用该功能解决写缓存(
--writeback)待上传数据对其他客户端不可见的痛点。具体用法就是给多个客户端节点挂载同一共享块设备,然后不开启写缓存、正常写入即可。这是因为块设备本身的写入性能就足够好,在共享块设备场景下,不再需要写缓存功能,直接同步写盘,数据就对其他客户端可见。
一些其他注意事项:
- 块设备必须挂载到相同路径,否则将会造成无法识别。不过对于未挂载块设备的客户端,从 5.2 以后支持通过其他客户端代理访问,详见「单挂载块设备」;
- 无需格式化文件系统,由 JuiceFS 的元数据引擎直接管理裸盘;
- 可以在线扩容(加盘或者已有盘加容量);