我有一个 Go 云运行应用程序,当它启动时,它会从 GCS 下载一个 512mb 的文件(程序需要这个文件)。在本地,在我没什么特别的家庭连接上,它运行良好,它会在几秒钟内下载,但是当我将它部署到云运行时,它会像蜗牛一样下载。我不得不增加超时并记录一个进度计数器,以确保它正在做某事(确实如此)。它可能以大约 30Kb/s 的速度下载,这是行不通的。
云运行实例和 GCS 区域存储桶都在 us-east4 中。似乎没有任何我可以玩的旋钮来让它工作,我没有看到这个问题/约束记录。
任何人有任何想法可能是什么问题?
这是下载的代码,以及大量的日志记录,因为我一开始不知道它是否在做任何事情:
func LoadFilter() error {
fmt.Println("loading filter")
ctx := context.Background()
storageClient, err := storage.NewClient(ctx)
if err != nil {
return err
}
defer storageClient.Close()
ctx, cancel := context.WithTimeout(ctx, time.Minute*60)
defer cancel()
obj := storageClient.Bucket("my_slow_bucket").Object("filter_export")
rc, err := obj.NewReader(ctx)
if err != nil {
return err
}
defer rc.Close()
attrs, err := obj.Attrs(ctx)
if err != nil {
return err
}
progressR := &ioprogress.Reader{
Reader: rc,
Size: attrs.Size,
DrawFunc: func(p int64, t int64) error {
fmt.Printf("%.2f\n", float64(p)/float64(t)*100)
return nil
},
}
fmt.Println("reading filter...")
data, err := ioutil.ReadAll(progressR)
if err != nil {
return err
}
fmt.Println("decoding filter...")
filter, err := cuckoo.Decode(data)
if err != nil {
return err
}
fmt.Println("filter decoded")
cf = filter
fmt.Println("initailized the filter successfully!")
return nil
}
阿晨1998
相关分类