簡體   English   中英

GCS從Kubernetes GKE內的Pod緩慢上傳

[英]GCS slow upload from pod inside kubernetes GKE

從GKE內的Pod上傳到GCE需要很長時間。 我希望升級到kubernetes 1.1會有所幫助,但沒有幫助。 它速度更快,但沒有達到應有的速度。 我做了一些基准測試,使用100MiB上傳了一個文件:

  • docker 1.7.2本地

    花了{20m51s240ms},大約是約{0.07993605115907274} MB / s

  • docker 1.8.3本地

    用了{3m51s193ms},大約是約{0.4329004329004329} MB / s

  • 本地1.docker

    用了{3m51s424ms},大約是約{0.4329004329004329} MB / s

  • kubernetes 1.0

    用了{1h10s952ms},大約是約{0.027700831024930747} MB / s

  • kubernetes 1.1.2(泊塢窗1.8.3)

    花費了{32m11s359ms},大約約為{0.05178663904712584} MB / s

如您所見,kubernetes 1.1.2的吞吐量增加了一倍,但仍然很慢。 如果要上傳1GB,我必須等待約5個小時,這不是預期的行為。 GKE在Google基礎架構中運行,因此我希望它應該比從本地上載更快或更慢。

我還注意到上傳時CPU負載很高(70%)。 它使用n1-highmem-4機器類型和單個RC / pod進行了測試,該RC / pod除了上傳外什么也不做。

我正在將Java客戶端與GAV坐標com.google.appengine.tools:appengine-gcs-client:0.5

相關代碼如下:

InputStream inputStream = ...; // 100MB RandomData from RAM
StorageObject so = new StorageObject().setContentType("text/plain").setName(objectName);
AbstractInputStreamContent content = new InputStreamContent("text/plain", inputStream);
Stopwatch watch = Stopwatch.createStarted();
storage.objects().insert(bucket.getName(), so, content).execute();
watch.stop();

使用帶有gsutil cp的手動安裝的gcloud復制100MB文件幾乎不需要時間(3秒)。 因此,java庫可能是一個問題? 問題仍然存在,如何使用java-library提高上傳時間?

解決方案是啟用“ DirectUpload”,所以不要編寫

storage.objects().insert(bucket.getName(), so, content).execute();

你必須寫:

    Storage.Objects.Insert insert = storage.objects().insert(bucket.getName(), so, content);
    insert.getMediaHttpUploader().setDirectUploadEnabled(true);
    insert.execute();

使用此解決方案可獲得的性能:

  • 用了{13s515ms},大約是約{7.6923076923076925} MB / s

Java文檔的setDirectUploadEnabled

設置是啟用還是禁用直接媒體上載。

如果將value設置為true,則將在單個請求中上載整個媒體內容的情況下直接上載。 如果將值設置為false,則上載使用可恢復媒體上載協議上載數據塊。

如果內容大小低於某個最小限制,則建議直接上傳。 這是因為某些Google API的最小塊寫入大小,因此,如果可恢復請求在第一個塊的空間內失敗,則無論如何客戶端都必須從頭開始重啟。

默認為false。

您看到較高的CPU負載,並且速度緩慢只會影響Java而不是Python gsutil ,這一事實與Java 8中緩慢AES GCM問題是一致的。 使用適當的專用CPU指令在Java 9中解決了該問題。

如果您對此有控制權,則可以使用Java 7或將jdk.tls.disabledAlgorithms=SSLv3,GCM添加到傳遞給java -Djava.security.properties的文件中,如常規通用慢速AES GCM的此答案中所述,應解決慢速問題題。

暫無
暫無

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

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