CloudFS 数据湖模式的工作原理是利用高速存储介质对TOS提供读写加速能力,在元数据服务中会挂载 TOS Bucket ,将 CloudFS 与 TOS 的元数据映射起来,提供统一的元数据视图和命名空间。
CloudFS提供统一元数据视图,从CloudFS 可以读取到最新的TOS 数据,而非老版本的数据,那么认为数据是一致的。什么情况下需要关注元数据一致性呢?这主要和用户数据的写入姿势相关。写加速是CloudFS的一个核心特性,目前主要使用场景是利用写加速,数据直接写入CloudFS,然后异步刷写到TOS中,这时不需要关注元数据一致性,因为总是能读到最新数据,这也是最推荐的使用方法。某些情况下,需要绕过CloudFS 直接写入TOS且需要使用读加速能力,对于这些文件或目录,无法读到最新数据,这时需要关注元数据一致性。
CloudFS 经过大量的实践,根据使用场景针对元数据一致性提供了不同的解决方案。
当存在绕过CloudFS 写入TOS的情况,CloudFS 可以消费TOS 元数据变更事件保持元数据一致。需要考虑的是如果同步一个TOS Bucket 所有数据事件,会把不需要加速或不需要(直写CloudFS)同步的目录或文件同步到CloudFS,这样会产生大量对TOS 的无效检查请求,耗用其元数据QPS 配额,所以如果绕过CloudFS写入TOS数据集中在若干目录,推荐使用该方案配置对应目录前缀的事件同步, 如需开启请联系火山引擎同学了解。
当存在绕过CloudFS 写入TOS的情况,可以通过CLI 将TOS 元数据主动加载到CloudFS中以获取最新的数据。需注意CloudFS 消费 TOS 事件,只能消费到开启同步功能时间点后的增量事件,所以如果TOS Bucket 在挂载进CloudFS前已经存在数据,需要主动将存量元数据加载到CloudFS中。详细参见文档 https://www.volcengine.com/docs/6720/1158286。
CloudFS 也支持基于时间戳的自动刷新元数据能力,默认是关闭的,通过一个客户端配置( cfs.filesystem.sync-interval 元数据同步间隔) 打开元数据自动刷新功能。有几种不同的配置方式:
注意
元数据同步间隔配置越小,就会越频繁触发路径元数据同步,而该操作有时会是一个较重的操作,例如对于宽目录的List 或 Rename 请求,若触发同步会增加元数据请求耗时(耗时目录大小相关),同时可能会影响其他对该目录下的元数据访问请求,导致耗时增加。元数据同步会增加很多元数据比对及同步开销,如需使用,则需要忍受元数据同步带来的请求时延增加的开销,详细请联系火山引擎同学了解。