在Cloud Run中将共享缓存对象存储在何处?

问题描述 投票:0回答:2

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

选项1

如果对象的价格昂贵,也可以将其缓存在内存中在每个服务请求上重新创建。从请求逻辑中移出全局范围可带来更好的性能。https://cloud.google.com/run/docs/tips#run_tips_global_scope-java

在此链接给出的示例中,HeavyComputation函数在冷启动时是否仅被调用一次?如果在元数据更新后偶尔需要重新触发此功能该怎么办?我还发现以下令人不安的信息,似乎无法保证其他实例是否可以重用该对象。

[在Cloud Run中,您不能假定保留了服务状态请求之间。但是,Cloud Run确实重用了单个容器实例以提供持续的流量,因此您可以在全局范围,以允许其值在后续使用中被重用调用。是否有任何个人请求获得以下好处:无法提前知道此重用。

选项2

[使用Redis或Cloud Memory Store之类的东西,只要有更改,就可以通过云功能对其进行更新。而且所有云实例都从api运行api提取元数据信息。这会比选择1的性能差多少?还有其他不利之处吗?

[如果还有其他更好的方法,我会很感兴趣。

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

shared-memory google-cloud-run data-ingestion google-cloud-memorystore
2个回答
0
投票

我们从您的初始前提开始,即“我显然不想在每次执行时将其重新加载到内存中”。对我而言,这并非总是正确的说法。如果我实现了缓存技术,那么作为一名程序员,我已经花了很多时间将其正确设置,并引入了错误和维护机会。如果我每次执行节省了100毫秒,那么在这些成本与增加执行时间所节省的成本之间,要实现成千上万次执行盈亏平衡呢?我通常会先采用最简单的方法,并准备将来监视操作并仅在必要时提出改进建议。


0
投票

关于第一个选项(选项1

© www.soinside.com 2019 - 2024. All rights reserved.