簡體   English   中英

創建大小小於 1MiB 的 static 二進制文件,可以從 S3 或 GCS 下載文件

[英]Creating a static binary with size less than 1MiB that can download a file from S3 or GCS

我知道這個問題可能看起來過於具體,但我認為這些答案對其他領域也很有用。

我遇到的真正問題:給定具有sh二進制文件的任意容器映像,從 Google Cloud Storage 下載文件。

由於用戶圖像中不存在下載器二進制文件,我有一個想法將編碼的二進制文件放在命令行中(有點類似於像python -c <code>這樣的內聯腳本)。 然而,命令行大小(~1MiB)是有限制的,所以二進制文件應該比那個小。

我決定使用 Go 因為易於創建靜態鏈接的二進制文件並且人們報告說 GO 二進制文件很小。

我編寫了一個 Go 程序,該程序使用cloud.google.com/go/storage模塊創建客戶端並讀取 blob storage.NewClient().Bucket(bucket).Object(object).NewReader()

不幸的是,這個簡單程序的二進制文件是 15MiB。 添加go build -ldflags=" -s -w" (如如何減少編譯的文件大小? )將其減少到 10MiB。 這仍然比我的規模預算高出一個數量級。

我可以使用二進制優化或修剪技術嗎?

如果我希望有一個更小的二進制文件,我應該看看其他語言(例如 C++)嗎?

如果我嘗試使用一些通用的 REST 客戶端庫,我的運氣會更好嗎? //看起來沒有 - 使用http.Get的剝離 Go 程序的大小是 5MiB。

我認為您無法將 Go 二進制文件的大小降低到 1 MiB 以下,特別是如果您必須使用功能齊全的第 3 方庫,例如 GCP 存儲綁定。

在這個時代你有 1 MiB 的限制是相當奇怪的,但如果真的是這樣,我建議:

  1. 如果您的環境具有解釋性語言運行時(如 Python、Ruby 等),請使用它,因為您的源代碼的大小就是您所交付的全部內容。
  2. 否則,您可能需要使用 C++。 也就是說,如果您的二進制文件必須訪問雲存儲並且您想使用包/庫來執行此操作,除非您非常小心,否則 1 MiB 仍然具有挑戰性。 訪問雲存儲涉及很多功能——安全性、HTTP/RPC 客戶端等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM