【问题标题】:GCP cloud run send a request to all running instancesGCP 云运行向所有正在运行的实例发送请求
【发布时间】:2021-08-15 07:34:57
【问题描述】:
我有一个在云运行上运行的实现缓存的 REST API,当我更新数据库中的某个属性时,可能需要每周清除一次缓存。有没有办法向我的应用程序的所有正在运行的实例发送 HTTP 请求?现在我的理解是,即使我发送多个请求并且有 5 个实例,它也可以全部转到一个实例。那么有没有办法做到这一点?
【问题讨论】:
标签:
google-cloud-platform
google-cloud-functions
google-cloud-run
【解决方案1】:
让我们回到基础:
Cloud Run 实例基于修订/图像启动。
如果您有上述用例,假设您有 5 个实例正在运行并且您突然需要重新启动它们,因为重新启动实例可以解决您的用例,例如清除/重建缓存,您需要做的是:
触发服务/配置中的更改,因此获得新修订
已创建。
这将自动替换,因此会立即停止并重新启动您的所有实例。
这里有几个选项,选择适合你的:
-
如果您将服务定义为 yaml 文件,最简单的方法是运行 replace service 命令:
gcloud beta run services replace myservice.yaml
-
否则添加一个Environmental 变量,如您增加的date,这将产生一个新修订版(因为Env 中的更改意味着新配置,新修订版)read more。
gcloud run services update SERVICE --update-env-vars KEY1=VALUE1,KEY2=VALUE2
在执行这些操作时,您将看到创建了一个新修订版,并且您的活动实例将在下一次请求时被新的实例替换,这些实例将构建新的缓存。
【解决方案2】:
您无法直接访问所有活动实例,这是无服务器的魔力(也是权衡):您真的不知道正在运行什么!如果您在 Cloud Run 上实现缓存,则需要一种方法来使其无效。
- 基于持续时间;过期后刷新
- 或通过失效。 但您不能使用 Cloud Run。
查看此用例的另一种方式是,您在所有实例之间共享一个缓存,因此您需要一个共享缓存,例如memory store。您只能拥有 1 个 Cloud Run 实例,使其无效并重新创建它,并且所有其他实例都将使用它。