如何检查大的CDN文件是否在不将相同文件存储在存储库中且没有数据库的情况下进行更新?

问题描述 投票:0回答:1

我有一个要解析的大文件存储在CDN上。每次启动程序时,都会检查CDN文件是否已更新。如果是这样,我需要检索此CDN文件中包含的更新信息。

当前解决方案是在存储库中也具有CDN文件的副本,并检查是否有少量操作就进行了更改:

  • 本地下载CDN文件
  • 使用ShellScript测试本地文件和CDN文件是否不同
are_different_current_and_remote()
{
    diff <(curl -s "$2") "$1" > /dev/null
    if [ $? != 0 ]; then
        return 0
    else
        return 1
    fi
}
  • 如果是这样,CDN文件将替换本地文件

我发现此过程效率不高,但是我想知道哪种方法最好。

我考虑了第二种方法。

  • 使用此命令curl -s http://remotefile|sha1sum在CDN中检索远程文件的校验和,并将其存储在存储库中的文件中,以便下次检查它,以查看是否存在AKA更新差异。

我也不是这个解决方案的忠实拥护者,但是由于存储库中的空间较少,我认为这是一种改进。

您看到更好的方法了吗?非常感谢。

shell repository comparison updates cdn
1个回答
0
投票

获取校验和并与本地计算的版本进行比较将是最佳解决方案。在带有curl -s的示例中,您仍然需要下载整个文件,然后在本地计算校验和。

我建议您在CDN中更新文件并将其与文件一起存储在CDN中时计算校验和。取决于您的CDN提供商的聪明程度(一些示例):

  • 将SHA校验和存储在其他单独的文件中,该文件比资产本身逐渐变小并且下载速度更快(因此您将执行curl -s https://cdn/remotefile.sha1,然后只是比较co)
  • 某些CDN提供程序每次上传文件时都会计算校验和,然后将其公开为自定义X-Checksum-Sha1标头,以响应HTTP HEAD请求(由于它不检索文件内容,因此速度很快)。
  • 某些CDN提供程序具有单独的REST API,该API允许存储和检索有关文件的元数据,您可以利用它来存储校验和,上次更新日期,版本标签或其他内容。

如果在使用软件之前进行完整性检查是强制性和必要的,我建议也在客户端进行类似的缓存,并且每次获取新文件时都要计算校验和并将其存储(例如,存储在文件,注册表中...),因此在某些情况下可以快速启动当不需要文件更新时。

© www.soinside.com 2019 - 2024. All rights reserved.