当启用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的资源。
默认情况下,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
时,表示访问某个文件/目录时,如果距离上次同步该文件/目录的时间,超过了配置的阈值,则立即同步该文件/目录的元数据,否则不进行同步。
开启元数据自动同步之后,相比于不开启的场景,会有一些性能损耗,因为可能多了一次元数据对齐的操作,所以需要根据业务实际情况来合理设置该值来保证数据的时效性和一致性,同时避免额外的性能开销。
以下介绍几个不同的场景下,如何合理的设置该参数值。
场景 | 场景特点 | 场景描述 | 建议实践 |
---|---|---|---|
场景一 |
|
| 将 |
场景二 |
|
| 为了保证数据一致性,那么需要设置 |
场景三 |
|
| 因为Proton MetaServer已经缓存了所有数据的元数据,那么就没有必要开启元数据自动同步功能, |
场景四 |
|
| 可以先通过Proton Load CLI将历史数据的元数据同步到Proton |
proton.metaserver.syncer.interval
参数的配置需要结合业务的实际情况进行调整,如果配置的不合理会带来一些数据一致性和性能损耗问题。
sync周期配置太长可能会导致访问到的数据和实际数据不一致的问题,比如找不到相关文件,读取到过期的数据等问题。
sync周期配置太短可能会导致很多没有必要的sync操作,占用账户资源,特别是对象存储有限额的场景下。