首页 > 解决方案 > 如何将谷歌云功能用作单例

问题描述

我想使用创建谷歌云功能并将其用作单例。我知道这不是这些功能的行为,但我在谷歌云基础设施中找不到更适合我需要的其他项目。

简而言之,我需要的是一个能够每秒处理数百次访问的全局远程计数器。

我尝试了带有事务的firebase数据库,但它不能很好地处理高并发。

然后我创建了一个 fcm 并调整了一组机制以使其成为单例......因为在第一个实例成功启动后,任何由谷歌基础设施自动创建的新实例都被杀死(我无法阻止谷歌创建它们,但我可以杀死它们) .

但是有一个问题...

出于某种原因,我不知道,谷歌有时会杀死 SINGLETON 实例。
当这种情况发生时,不能为我的函数创建新实例(由于代码设计)......我正在阅读 firebase 文档,然后我发现:

一个新的函数实例在两种情况下启动:

当你部署你的功能。

当自动创建一个新的函数实例以扩展负载,或偶尔替换现有实例时。 https://cloud.google.com/functions/docs/concepts/exec#function_scope_vs_global_scope

这是什么意思:or occasionally to replace an existing instance.所以谷歌杀死实例只是为了好玩?

有没有人使用 fcm 成功实现了单例的行为?
有人对如何使用谷歌基础设施创建计数器有更好的了解吗?

谢谢

标签: firebasegoogle-cloud-platformgoogle-cloud-functions

解决方案


所以谷歌杀死实例只是为了好玩?

不,这正是 Cloud Functions 的工作方式(以及一般的无服务器产品)。Cloud Functions 将根据需要扩展服务器实例以适应当前负载(每个后台函数最多 1000 个服务器实例),并在没有负载时缩减至 0 个实例。它还会偶尔在一段时间后替换服务器实例,以确保内存泄漏不会成为问题,或将操作系统更新发布到实例(例如,安全补丁)。

Cloud Functions 不提供免费的持久服务器实例。如果您想要一个在您说出来之前不会消失的持久服务器实例,您将不得不使用其他产品,例如 Compute Engine 或 App Engine,或者完全改变您的策略。


推荐阅读