Создание бинарного файла stati c размером менее 1 МБ, который может загрузить файл из S3 или GCS - PullRequest
0 голосов
/ 13 апреля 2020

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

Реальная проблема, с которой я сталкиваюсь: учитывая произвольное изображение контейнера, которое имеет sh двоичный файл, загрузите файл из Google Cloud Storage.

Поскольку двоичный файл загрузчика не существует в образе пользователя, у меня была идея поместить закодированный двоичный файл в командную строку (немного похоже на встроенный скрипты типа python -c <code>). Однако существуют ограничения на размер командной строки (~ 1MiB), поэтому двоичное значение должно быть меньше, чем это.

Я решил использовать Go из-за простоты создания статически связанных двоичных файлов и люди сообщают, что GO двоичные файлы небольшие.

Я написал Go программу, которая использует модуль cloud.google.com/go/storage для создания клиента и чтения большого двоичного объекта storage.NewClient().Bucket(bucket).Object(object).NewReader().

К сожалению, двоичный файл для простой программы оказывается 15MiB. Добавление go build -ldflags=" -s -w" (как предложено в Как уменьшить размер скомпилированного файла? ) уменьшает это до 10 МБ. Это все еще на порядок больше, чем мой размерный бюджет.

Существуют ли бинарные оптимизации или методы сокращения, которые я мог бы использовать?

Должен ли я взглянуть на какой-нибудь другой язык (например, C ++), если я sh иметь меньший двоичный файл?

Повезет ли мне больше, если я попытаюсь использовать какую-нибудь общую c REST клиентскую библиотеку? // Похоже, нет - размер зачищенной Go программы, которая использует http.Get, составляет 5 МБ.

1 Ответ

2 голосов
/ 13 апреля 2020

Не думаю, что вы сможете довести размер Go двоичного файла до 1 МБ, особенно если вам нужно использовать полнофункциональные сторонние библиотеки, такие как привязки хранилища GCP.

Довольно странно, что у вас есть ограничение в 1 МБ в этот день и возраст, но если это действительно так, я бы порекомендовал:

  1. Если в вашей среде есть интерпретируемая языковая среда выполнения (например, * 1011) *, Ruby et c.) Используйте это, потому что размер вашего исходного кода - это все, что вы отправляете.
  2. В противном случае вам, вероятно, придется использовать что-то C ++. Тем не менее, если ваш двоичный файл должен иметь доступ к облачному хранилищу, и вы хотите использовать для этого пакеты / библиотеки, 1 МБ все еще может быть проблематичным, если вы не будете очень осторожны. Доступ к облачному хранилищу включает множество функций: безопасность, клиенты HTTP / RP C и т. Д. c.
.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...