繁体   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