gsutil rsync со сжатием gzip

Я размещаю общедоступные статические ресурсы в корзине хранилища Google, и я хочу использовать команду gsutil rsync для синхронизации нашей локальной версии с корзиной, экономя пропускную способность и время. Частью нашего процесса сборки является предварительное сжатие этих ресурсов, но gsutil rsync не имеет возможности установить заголовок Content-Encoding. Это означает, что мы должны запустить gsutil rsync, а затем немедленно запустить gsutil setmeta, чтобы установить заголовки для всех типов файлов, сжатых с помощью gzip. Это оставляет корзину в состоянии ПЛОХОЙ, пока этот заголовок не будет установлен. Другой вариант - использовать gsutil cp, передав параметр -z, но это требует от нас каждый раз повторно загружать всю структуру каталогов, включая МНОГО файлов изображений и других ресурсов, не сжатых с помощью gzip, что тратит время и полосу пропускания.

Есть ли атомарный способ выполнить rsync и установить правильные заголовки Content-Encoding?


person regretoverflow    schedule 01.07.2015    source источник
comment
Потрясающе - не знал о -z опции для cp.   -  person Nick ODell    schedule 29.05.2019


Ответы (2)


Предполагая, что вы начинаете с исходных файлов gzip в исходном каталоге, вы можете:

gsutil -h content-encoding:gzip rsync -r source-dir gs://your-bucket

Примечание: если вы сделаете это, а затем запустите rsync в обратном направлении, он распакует и скопирует все объекты обратно:

gsutil rsync -r gs://your-bucket source-dir 

что может быть не тем, что вы хотите. По сути, самый безопасный способ использования rsync - просто синхронизировать объекты как есть между источником и местом назначения, а не пытаться устанавливать кодировки содержимого для объектов.

person Mike Schwartz    schedule 01.07.2015
comment
Проблема заключается в том, что сжимаются только текстовые файлы, такие как CSS, js, html и т. Д. - person regretoverflow; 02.07.2015
comment
Есть ли атомарный способ сделать это на основе расширения файла? Я действительно не вижу способа. Хорошим дополнением к gsutil rsync было бы передача списка расширений файлов, к которым можно применить заголовок во время rsync. Например, единственными файлами, которые обычно кодируются с помощью gzip, являются html, css, js, json, xml, svg, txt. Это из конфигурации apache для deflate: https://httpd.apache.org/docs/current/mod/mod_deflate.html - person regretoverflow; 03.07.2015
comment
Мы решили не поддерживать сжатие на лету с помощью команды rsync, потому что для его правильного выполнения потребуется отслеживать предварительно сжатый размер и контрольную сумму (и) в метаданных объекта, и это может привести к запутанным ситуациям, если клиенты попытаются выполнить несколько операций. исходная синхронизация. В принципе, если вы хотите сжать на лету, вам нужно использовать команду gsutil cp. - person Mike Schwartz; 05.07.2015

Я не полностью отвечаю на вопрос, но я пришел сюда, потому что мне было интересно то же самое, пытаясь достичь следующего:

как эффективно развернуть статический веб-сайт в облачном хранилище Google

Мне удалось найти оптимизированный способ развертывания моего статического веб-сайта из локальной папки в ведро gs.

  • Разделить мою локальную папку на 2 папки с одинаковой иерархией, одна из которых содержит содержимое для gzip (html, css, js ...), а другая - другие файлы.
  • Gzip каждый файл в моей папке gzip (на месте)
  • Вызовите gsutil rsync для каждой папки в одно и то же место назначения gs.

Конечно, это только односторонняя синхронизация, и удаленные локальные файлы не удаляются удаленно.

Для папки gzip команда:

gsutil -m -h Content-Encoding:gzip rsync -c -r src/gzip gs://dst

принудительное сжатие кодировки содержимого

Для другой папки команда

gsutil -m rsync -c -r src/none gs://dst

опция -m используется для параллельной оптимизации. Параметр -c необходим для принудительного использования проверки контрольной суммы (Почему gsutil rsync повторно загружает все наши файлы?), поскольку я касался каждого локального файла в процессе сборки. параметр -r используется для рекурсивности.

Я даже написал для него сценарий (на дротике): http://tekhoow.blogspot.fr/2016/10/deploying-static-website-efficiently-on.html

person alextk    schedule 12.10.2016