云存储网关与OSS文件视图同步机制说明

云存储网关上的文件与OSS对象一一对应,提供与OSS对象1:1映射的文件共享服务,您可以通过网关以标准的POSIX接口访问OSS上的资源。云存储网关与OSS是相互独立的云产品,为保证您通过网关看到的文件视图与OSS一致,需要有特殊的元数据同步机制进行维护。本文介绍几种同步网关与OSS文件视图的方法与原理。如果您需要通过云存储网关看到OSS上的变化,可以参考本文中反方向同步的相关内容。

正方向同步

将云存储网关上发生的变化同步至OSS。通过云存储网关以文件的方式进行增删改等操作,网关会自动将您的操作结果同步至OSS。例如您通过网关在文件夹dir2下创建了一个文件file5.mp4,等待文件同步完成后,您在OSS Bucket中也可以看到以该路径名为键的对象dir1/dir2/file5.mp4。无需任何其他配置就可以使用网关提供的正方向文件同步功能。

反方向同步

将您通过控制台、ossutil、OSS API等方式造成的对应OSS Bucket上发生的变化同步至云存储网关。例如您在OSS中上传了一个对象file1.txt,则经过反方向同步后您就可以通过网关在对应目录下看到该文件,然后您就能以文件的形式对其执行读写等操作。如果您需要访问使用云存储网关之前OSS Bucket里面的存量文件以及后续通过其他方式上传的文件,有以下三种将OSS Bucket上的变化反方向同步至网关的方法。

重要
  • 如果您只需要通过云存储网关管理通过网关上传的文件,而不需要通过网关访问和管理使用云存储网关之前OSS Bucket上的存量文件以及后续通过 OSS 控制台、OSS API 等其他方式上传的文件,建议您关闭反向同步功能,避免无意义的扫描产生的费用以及可能的性能损耗。

  • 如果您的Bucket开启了版本控制,由于OSS列举接口性能下降可能会影响反向同步性能。

  • 对开启了版本控制的Bucket执行Object删除操作时,如果您未指定版本ID,不会触发DeleteObject或者DeleteObjects事件通知。原因是未指定版本IDObject删除行为默认不会删除任意版本Object,而是将当前版本Object转为历史版本Object,并添加删除标记,因此云存储网关侧也无法感知到该对象文件被删除。

反方向同步

反向同步(按需扫描)

极速同步(消息通知)

单次反向同步(API触发)

简要说明

常规反向同步方式,通过按需扫描的机制更新OSS上的对象变化,默认打开,可关闭。

基于轻量消息队列(原 MNS)推送秒级同步Bucket中的变化,无需定期扫描,但会产生一定的相应费用。

通过调用TriggerGatewayRemoteSyncRequest接口手动反向同步指定的文件夹,只进行一次性的元数据的同步更新,之后不会追踪OSS发生的变化。

适用场景

对于将OSS变化同步至网关侧的实时性要求不高,能容忍文件数目多时通过lsstat等命令访问文件夹存在一定的卡顿。

需要秒级同步OSS变化,或对元数据性能要求较高,操作延迟敏感度高,适用于大量文件的场景,性能好。

一次性地OSS为基准同步某个文件夹或者整个存储桶,无需将OSS产生的变化更新至网关侧。

触发方式

用户访问文件或文件夹时触发。反向同步时间间隔内多次访问只触发一次。

基于消息通知的被动更新。

关闭反向同步以及极速同步,调用API接口手动触发。

配置方式

网关控制台高级设置中打开文件网关反向同步的使用场景及配置选项,并设置反向同步时间间隔。

开通轻量消息队列(原MNS),通过网关控制台配置极速同步

详情请参见如何主动触发特定文件夹的反向同步

成本费用

OSS API请求费用,详情请参见请求费用

OSS API请求费用以及轻量消息队列(原 MNS)费用,具体参见极速同步

OSS API请求费用。

工作原理

详情请参见基于按需扫描机制的常规反向同步

详情请参见基于消息通知的极速同步

详情请参见基于API触发的单次反向同步

基于按需扫描机制的常规反向同步

云存储网关默认采用基于按需扫描机制的反向同步功能,将OSS上的变化按需同步至网关本地,这一过程是由用户访问操作触发、按需执行的。具体而言,云存储网关在文件夹层级上设置了同步时间,当检测到当前时间与上次同步时间之差超出反向同步时间间隔时,便会触发该文件夹的同步更新操作。您可以在网关控制台的高级设置中进行配置,具体操作,请参见文件网关反向同步的使用场景及配置管理共享

基于按需扫描的反向同步机制适合对OSS变化不甚敏感的业务场景,在文件数量不大且反向同步时间间隔配置合理的情况下,功能表现稳定。但是,由于OSS Bucket内部是扁平的,在通过OSS API操作模拟文件夹功能列举下级文件的时延可能会较长,因此如果设定的反向同步的时间间隔较小,则会触发大量的扫描操作,当执行例如ls等元数据操作时会出现卡顿从而影响体验,这种场景下可以考虑采用基于消息通知的极速同步方案替代基于扫描机制的常规反向同步以优化性能。

fig2.png

基于消息通知的极速同步

针对常规反向同步的痛点问题,基于消息通知的极速同步采用全量同步+增量更新的结合的方案进行OSS与云存储网关元数据的同步,以秒级快速同步OSS的变化。当配置好极速同步组后,您在详情页中可以看到当前全量同步的进度,随后OSS上的发生的变化就可以通过轻量消息队列(原 MNS)消息通知的方式快速同步至网关。同时,您如果有多个网关共享挂载同一个OSS Bucket,可以将它们加入同一个极速同步组,从而获得组内所有网关共享同时快速同步OSS Bucket增量变化的效果,详细配置方式与轻量消息队列(原 MNS)的费用说明请参见极速同步

  • 全量同步

    开启基于消息的增量更新前,云存储网关与OSS文件视图并不一定完全一致。因此需要进行一次全量同步的过程使得二者保持一致。在全量过程中,云存储网关会以OSS为基准同步本地所有文件。在全量同步的过程结束之前,有可能无法见到所有的存储桶里的存量文件,建议等待全量同步完成后,再开始使用存储网关进行读写。

    yuque_diagram.jpg

  • 增量更新

    增量更新利用创建的OSS事件通知规则,以轻量消息队列(原 MNS)消息的方式快速实时地传递给云存储网关进行处理,确保OSS Bucket中的对象与云存储网关文件视图本地维持一致。这种方案的优点在于避免了大量的扫描操作,因此对于大量文件的使用场景不会卡顿,同步更加及时,用户体验更好。

    fig4.png

  • 极速同步组

    当开启极速同步功能后,每一个极速同步组会自动创建一个轻量消息队列(原 MNS)主题与之对应,对应到一个具体的OSS Bucket。用户在这个Bucket进行的改动都会被推送到这个主题中。一个主题可以对应到一个或多个队列,每一个队列对应一个网关的共享,轻量消息队列(原 MNS)会将主题中的这些增量变化分别推送到这些队列中。通过这样的机制,可以把多个网关共享组成一个组,这样OSS Bucket上的增量变化就可以被该组内的所有网关共享感知到,实现组内所有网关共享的快速秒级同步

    fig5.png

基于API触发的单次反向同步

除了使用过程中自动触发的元数据同步,针对同步指定目录下文件的需求,您还可以通过调用API的方式主动地触发指定文件夹的同步。云存储网关会以OSS上该文件夹的元数据为基准与本地同步,同步任务完成后该目录下的文件结构与OSS保持一致。详情请参见如何主动触发特定文件夹的反向同步