You need to enable JavaScript to run this app.
导航
Proton元数据同步
最近更新时间:2024.02.01 19:26:39首次发布时间:2024.02.01 19:26:39

当启用Proton缓存模式后,Proton在读取数据之前,需要将对应数据的元数据同步到Proton MetaServer中,否则会出现文件找不到导致数据读取失败的场景。

所以当我们需要对历史数据,或者通过无缓存模式直接写入到底层存储的数据,进行缓存加速操作时,需要额外的操作或者配置,将这些数据的元数据同步到Proton
MetaServer后才可以正常访问。

Proton 1.7.0版本之前,只支持批量加载元数据功能,可以通过以下命令将对应路径下所有数据的元数据同步到Proton MetaServer中

proton load -m tos://bucket/a/b/c

Proton 从1.7.0版本开始,提供元数据自动同步功能(Lazy Sync),会周期性的按需从底层存储同步元数据。

  • 周期性同步指可以配置一个时间周期,在该周期内同一个文件只会发生一次元数据同步操作

  • 按需同步指只有需要访问某个文件的元数据时,才会触发同步操作,如果文件不会被访问,那么就不会同步该文件的元数据。

Lazy Sync可以保证访问数据在底层存储和MetaServer中元数据的实时性,同时避免一次性同步大量元数据,从而占用MetaServer的资源。

1 Lazy Sync 功能使用

默认情况下,Proton不会自动从底层存储同步元数据到Proton Metaserver中,
需要根据业务具体情况在proton.ini配置文件中添加或者修改proton.metaserver.syncer.interval的值(默认值-1,单位为毫秒),开启元数据自动同步功能,其中:

  • proton.metaserver.syncer.interval < 0 时,表示访问某个文件/目录时,不会同步该文件/目录的元数据

  • proton.metaserver.syncer.interval = 0 时,表示访问某个文件/目录时,立即同步该文件/目录的元数据

  • proton.metaserver.syncer.interval > 0 时,表示访问某个文件/目录时,如果距离上次同步该文件/目录的时间,超过了配置的阈值,则立即同步该文件/目录的元数据,否则不进行同步。

2 最佳实践

开启元数据自动同步之后,相比于不开启的场景,会有一些性能损耗,因为可能多了一次元数据对齐的操作,所以需要根据业务实际情况来合理设置该值来保证数据的时效性和一致性,同时避免额外的性能开销。
以下介绍几个不同的场景下,如何合理的设置该参数值。

场景场景特点场景描述建议实践

场景一

  • 无缓存模式写入数据

  • 缓存模式读取数据

  • 上游任务通过无缓存模式持续不断的往底层存储写数据,

  • 下游消费者在缓存模式下,每隔一小时或者一天周期性的启动任务多次地消费增量数据

proton.metaserver.syncer.interval
的值设置为任务固定周期,比如周期是3分钟,那么设置proton.metaserver.syncer.interval=180000

场景二

  • 无缓存模式写入数据

  • 缓存模式读取数据

  • 上游任务通过无缓存模式持续不断的往底层存储写数据,

  • 下游随时都有可能读取新写入的数据

为了保证数据一致性,那么需要设置proton.metaserver.syncer.interval=0
, Proton MetaServer每次收到数据访问请求时,都会先从底层存储同步元数据,然后再返回给客户端。

场景三

  • 缓存模式写入数据

  • 缓存模式读取数据

  • 业务中所有数据的读写操作,都是在Proton 缓存模式下进行的

因为Proton MetaServer已经缓存了所有数据的元数据,那么就没有必要开启元数据自动同步功能,
可以设置proton.metaserver.syncer.interval=-1

场景四

  • 无缓存模式写入历史数据

  • 缓存模式写入新增数据

  • 缓存模式数据读取所有数据

  • 数据搬站、数据迁移的场景下,将历史数据同步到底层存储后,后续业务对数据的读写操作都是通过缓存模式进行的

可以先通过Proton Load CLI将历史数据的元数据同步到Proton
MetaServer中,然后设置proton.metaserver.syncer.interval=-1不启用元数据自动同步功能

3 注意事项

proton.metaserver.syncer.interval参数的配置需要结合业务的实际情况进行调整,如果配置的不合理会带来一些数据一致性和性能损耗问题。

  • sync周期配置太长可能会导致访问到的数据和实际数据不一致的问题,比如找不到相关文件,读取到过期的数据等问题。

  • sync周期配置太短可能会导致很多没有必要的sync操作,占用账户资源,特别是对象存储有限额的场景下。