gpt4 book ai didi

go - Cloud Run从GCS下载文件的速度异常缓慢

转载 作者:行者123 更新时间:2023-12-01 22:20:48 25 4
gpt4 key购买 nike

我有一个Go cloud run应用,当它启动时,它会从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
}

最佳答案

确实,@ wlhee所说的完全正确。如果您有任何在外部运行或请求管道的 Activity ,则这些 Activity 将无权访问为实例提供的完整CPU。如文档所述:

在Cloud Run上运行的应用程序完成请求处理后,
容器实例对CPU的访问将被禁用或严重
有限。因此,您不应启动后台线程或
在请求处理程序范围之外运行的例程。
运行后台线程可能会导致意外行为,因为
对同一容器实例的任何后续请求将恢复任何
暂停的后台 Activity 。

我建议您通过对应用程序中某些启动端点的访问,在对服务提出请求时从Cloud Storage运行此下载 Activity ,完成下载然后返回响应以指示请求结束。
请检查此文档中的tips on Cloud Run

关于go - Cloud Run从GCS下载文件的速度异常缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63626349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com