如何解决Go客户端库对Google Cloud Storage的上传速度很慢
我看到我认为从GKE容器向GS存储桶的上传吞吐量较低。
- 使用Go客户端库v1.12.0和Go 1.15.2。
- GKE集群区:europe-west1-b
- 桶区:europe-west1
- Kubernetes版本:1.18.6-gke.4801(快速通道)
- GKE泳池机器类型:n2-highmem-48
- 图像类型:容器优化的操作系统(cos)
我正在将以下代码部署为Kubernetes作业:
package main
import (
"context"
"flag"
"fmt"
"log"
"math"
"time"
"cloud.google.com/go/storage"
"github.com/google/uuid"
)
func main() {
bucketName := flag.String("bucket","test","")
objectName := flag.String("object","xdata","")
size := flag.Int("size",10000000000,"") // 10 GB
flag.Parse()
*objectName = fmt.Sprintf("%s-%s",*objectName,uuid.New().String())
log.Printf("Using gs://%s/%s with %dB \n",*bucketName,*size)
start := time.Now()
buf := make([]byte,*size)
for i := 0; i < *size; i++ {
buf[i] = byte(i % math.MaxUint8)
}
elapsed := time.Since(start)
log.Printf("Created buffer of size %d in %v\n",*size,elapsed)
cli,err := storage.NewClient(context.Background())
if err != nil {
log.Panic(err)
}
defer func() {
if err := cli.Close(); err != nil {
log.Panic(err)
}
}()
w := cli.Bucket(*bucketName).Object(*objectName).NewWriter(context.Background())
w.ChunkSize = 0 // no chunking (performance is worse with chunking enabled)
start = time.Now()
if _,err := w.Write(buf); err != nil {
log.Panic(err)
}
if err := w.Close(); err != nil {
log.Panic(err)
}
elapsed = time.Since(start)
seconds := elapsed.Seconds()
bps := float64(*size) / seconds
log.Printf("Written %dB in %v (%.2f BPS)\n",elapsed,bps)
}
输出为: 2020/10/01 07:55:15以33.206907686s(301142162.79 BPS)写10000000000B。
它在大约33秒内上传了10GB。 因此大约为300 MB / s。我期待的吞吐量与分区/区域PD SSD相似,如此处所述:https://cloud.google.com/compute/docs/disks/performance。毕竟,这些也是网络磁盘。鉴于我使用的机器大小,我期望的速度会超过1000 MB / s。
我也找不到关于GS吞吐量限制的任何文档(例如块存储的文档)。
有人有更多使用GS的经验,可以对此有所了解吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。