Как проверить, обновляется ли большой файл CDN без сохранения одного и того же файла в репозитории и без базы данных? - PullRequest
0 голосов
/ 23 апреля 2020

У меня большой файл для анализа, хранящийся в CDN. Каждый раз, когда я запускаю свою программу, необходимо проверить, был ли файл CDN обновлен или нет. Если это так, мне нужно получить обновленную информацию, содержащуюся в этом файле CDN.

Текущее решение состоит в том, чтобы получить копию файла CDN также в хранилище и проверить, есть ли изменения с несколькими операциями:

  • загрузить файл CDN локально
  • проверить, отличаются ли локальные файлы и файлы CDN с ShellScript
are_different_current_and_remote()
{
    diff <(curl -s "$2") "$1" > /dev/null
    if [ $? != 0 ]; then
        return 0
    else
        return 1
    fi
}
  • , если это так, файл CDN заменяет файл локальный

Я считаю этот процесс не очень эффективным, но мне интересно, какой из них может быть лучшим.

Я подумал о втором подходе.

  • извлекает контрольную сумму удаленного файла в CDN с помощью этой команды curl -s http://remotefile|sha1sum и сохраняет ее в файле в хранилище, чтобы проверять ее каждый раз, чтобы увидеть, есть ли различия в обновлениях AKA.

Я тоже не большой поклонник этого решения, но считаю его улучшением из-за меньшего пространства в хранилище.

Видите ли вы еще лучшие способы сделать это? Большое спасибо.

1 Ответ

1 голос
/ 24 апреля 2020

Получение контрольной суммы и сравнение с локально рассчитанной версией будет лучшим решением. В вашем примере с curl -s вам все равно нужно скачать весь файл и затем вычислить контрольную сумму локально.

Я рекомендую вычислять контрольную сумму каждый раз, когда вы обновляете файл в CDN и сохраняете его вместе с файлом как-то в CDN. Некоторые провайдеры CDN уже делают это для вас. В зависимости от того, насколько умен ваш провайдер CDN, это может быть (некоторые примеры):

  • хранение контрольной суммы SHA в дополнительном отдельном файле, который постепенно уменьшается и быстрее загружается, чем сам актив (так что вы будет делать curl -s https://cdn/remotefile.sha1)

  • некоторые провайдеры CDN вычисляют контрольную сумму при каждой загрузке файла, а затем представляют его в виде пользовательского заголовка X-Checksum-Sha1 в ответ на запрос HTTP HEAD (что снова быстро поскольку он не извлекает содержимое файла).

  • некоторые поставщики CDN имеют отдельный REST API, который позволяет хранить и извлекать метаданные о файлах, вы можете использовать его для хранения контрольной суммы, даты последнего обновления версия тега или что-то еще.

Если проверка целостности является обязательной и необходимой перед использованием программного обеспечения, я рекомендую выполнять аналогичное кэширование и на стороне клиента, и каждый раз, когда вы выбираете новый файл, рассчитываете контрольную сумму и сохраняете ее (например, в файле, реестре). ...) поэтому запуск происходит быстро, когда обновление файла не требуется.

...