共享块设备
由于 JuiceFS 的分离架构,读写一般包含着元数据访问和对象存储访问,而后者的延迟往往更大。这也是为什么在 JuiceFS 中,小文件或者大量随机读写的性能会明显低于顺序读写。如果对读写性能有极致要求,并且你所使用的基础设施支持共享块存储(比如 AWS Multi-Attach 或者阿里云),可以考虑使用 JuiceFS 5.0 起提供的共享块设备支持。
共享块设备就是可以在多个云主机上挂载的块设备,常见单机文件系统是无法用于共享块设备上的,需要配合相应的文件系统。JuiceFS 就是其中一种支持共享块设备的方案,支持使用共享块设备(没有经过格式化的裸盘)来作为文件系统存储,并且可以设置不同的存储策略,比如:
- 设定 Slice 大小阈值(所谓 Slice 就是「一次连续写入」,其长度在 0~64MB),详见存储架构),低于该大小时写入块设备,否则直接上传对象存储;
- 设定在块设备上的保存时长,所有数据保存超过设定时间后自动转存到对象存储 ;
- 设定转存到对象存储的 Slice 大小阈值,小于阈值的分片将会一直存储在块设备上。
备注
虽然功能命名为「共享块设备」,但是事实上 JuiceFS 支持使用任意未经格式化的块设备,并不强求是多点挂载的共享块设备。因此,你同样可以用普通的、单挂载的云盘来配合该功能使用。由于是单点挂载,其他客户端看不到块设备上的文件,这样的块设备仅适用于只有一个挂载点访问 JuiceFS 的场景。
在 JuiceFS 中使用共享块设备的典型场景:
- 有高负载小文件写入,或者大量随机写入,如 EDA,CV 训练前的数据处理,Elasticsearch,ClickHouse 等;
- 读写都要求低时延,使用块设备做数据存储,甚至可以将块设备配置成永久存储(继续阅读下方小节了解);
- 共享块设备写入性能好,并且多节点挂载,可以用该功能解决写缓存(
--writeback
)待上传数据对其他客户端不可见的痛点。具体用法就是给多个客户端节点挂载同一共享块设备,然后不开启写缓存、正常写入即可。这是因为块设备本身的写入性能就足够好,在共享块设备场景下,不再需要写缓存功能,直接同步写盘,数据就对其他客户端可见。
一些其他注意事项:
- 无需格式化文件系统,由 JuiceFS 的元数据引擎直接管理裸盘;
- 可以在线扩容(加盘或者已有盘加容量);
- 所有客户端都需要在相同路径挂载盘;
- 目前不支持多分区,单分区存储上限 5 亿文件。
目前共享块设备的支持处于公测阶段,如有使用需要,请联系 Juicedata 工程师。
使用块设备作为对象存储(Beta)
在了解上方介绍的使用场景的前提下,如果你的文件系统规模可控,可以仅使用块设备作为存储后端、不再需要对象存储。如有需要请在 Juicedata 工程师的指导下进行配置和使用。