gpt4 book ai didi

shared-memory - 在 Cloud Run 中存储共享缓存对象的位置?

转载 作者:行者123 更新时间:2023-12-03 19:20:32 26 4
gpt4 key购买 nike

我正在使用 Cloud Run 创建数据摄取管道。每次通过 Pub Sub 将文件放入 GCS 存储桶时,都会调用我的 Cloud Run api。我需要加载一些元数据,其中包含我正在摄取的数据的文本。此元数据很少更改。我显然不想在每次执行时将它重新加载到内存中。我最好的选择是什么?到目前为止,我能够研究的是:

选项1

You can also cache objects in memory if they are expensive to recreate on each service request. Moving this from the request logic to global scope results in better performance. https://cloud.google.com/run/docs/tips#run_tips_global_scope-java



在此链接给出的示例中,是否只在冷启动时调用了重计算函数一次?如果我需要在元数据更新时偶尔重新触发这个函数怎么办。我还发现以下信息令人不安,因为似乎不能保证其他实例会重用该对象。

In Cloud Run, you cannot assume that service state is preserved between requests. However, Cloud Run does reuse individual container instances to serve ongoing traffic, so you can declare a variable in global scope to allow its value to be reused in subsequent invocations. Whether any individual request receives the benefit of this reuse cannot be known ahead of time.



选项 2

使用 Redis 或 Cloud Memory Store 之类的东西,只要有变化,它就会由云函数更新。并且所有 cloud run api 实例都从 Redis 中拉取元数据信息。这会比选项 1 的性能低还是高?这还有什么其他的缺点吗?

如果有其他更好的方法可以做到这一点,我会非常感兴趣。

更新 1:我考虑了更多,因为我的元数据对于每个租户都不同,并且每次调用我的云运行代码都会为一个租户摄取一个文件,加载所有租户是个坏主意每次执行时的元数据,即使它被缓存。不过,我可能会在每个租户的项目中运行单独的云运行。

最佳答案

关于第一个选项( 选项 1 ):
heavyComputation()功能 here只会在冷启动时调用,每次都会有一个新的 Cloud Run container instance创建(当超过可以并行发送到给定容器实例的最大请求数并因此创建新实例时)。

为了解决第二个选项( 选项 2 ):

截至目前,Cloud Run(完全托管)不支持无服务器 VPC 访问,因此无法连接到 Cloud Memorystore。监控以下Feature Request从 Cloud Run 产品团队获取所有相关信息和更新,以检查此功能何时可用。

您可以在此 post 上找到一些解决方法以及已经提到的功能请求。它们基本上包括:

  • Using a Google Kubernetes Engine cluster with Cloud Run .
  • 在 Compute Engine 上设置一个 Redis 实例。
  • 关于shared-memory - 在 Cloud Run 中存储共享缓存对象的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59460974/

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