【发布时间】:2016-02-25 17:38:15
【问题描述】:
从 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
-
docker 1.9.0 本地
花了 {3m51s424ms},大约是 ~{0.4329004329004329}MB/s
-
kubernetes 1.0
花费了 {1h10s952ms},大约是 ~{0.027700831024930747}MB/s
-
kubernetes 1.1.2 (docker 1.8.3)
花了 {32m11s359ms},大约是 ~{0.05178663904712584}MB/s
正如您所见,kubernetes 1.1.2 的吞吐量翻了一番,但仍然很慢。如果我想上传 1GB,我必须等待大约 5 个小时,这不是预期的行为。 GKE 在 Google 基础架构中运行,因此我希望它应该更快,或者至少与从本地上传一样快。
我还注意到上传时 CPU 负载非常高 (70%)。它使用n1-highmem-4 机器类型和一个在上传后什么都不做的单个 RC/pod 进行了测试。
我正在使用带有 GAV 坐标 com.google.appengine.tools:appengine-gcs-client:0.5 的 java 客户端
相关代码如下:
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();
使用手动安装的 gcloud 和 gsutil cp 复制一个 100MB 的文件几乎不需要任何时间(3 秒)。所以这可能是java库的问题?问题依然存在,如何使用 java-library 提高上传时间?
【问题讨论】:
-
您是否尝试使用 gsutil [1] 上传?如果它仍然很慢,您可以使用 gsutil perfdiag -o output.json gs://your-bucket 进行详细说明。 [1]:cloud.google.com/storage/docs/gsutil/commands/cp
-
@George 感谢您的建议。事实证明,使用 gsutil 非常快。但是要使用它,我必须将 gsutil 和授权安装到容器中,这不是 kubernetes 概念的意图。但这将问题缩小到 java 库。
-
很高兴听到这个消息:)
标签: google-cloud-storage google-api-java-client kubernetes google-kubernetes-engine