firebase - 如何将谷歌云功能用作单例
问题描述
我想使用创建谷歌云功能并将其用作单例。我知道这不是这些功能的行为,但我在谷歌云基础设施中找不到更适合我需要的其他项目。
简而言之,我需要的是一个能够每秒处理数百次访问的全局远程计数器。
我尝试了带有事务的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 成功实现了单例的行为?
有人对如何使用谷歌基础设施创建计数器有更好的了解吗?
谢谢
解决方案
所以谷歌杀死实例只是为了好玩?
不,这正是 Cloud Functions 的工作方式(以及一般的无服务器产品)。Cloud Functions 将根据需要扩展服务器实例以适应当前负载(每个后台函数最多 1000 个服务器实例),并在没有负载时缩减至 0 个实例。它还会偶尔在一段时间后替换服务器实例,以确保内存泄漏不会成为问题,或将操作系统更新发布到实例(例如,安全补丁)。
Cloud Functions 不提供免费的持久服务器实例。如果您想要一个在您说出来之前不会消失的持久服务器实例,您将不得不使用其他产品,例如 Compute Engine 或 App Engine,或者完全改变您的策略。
推荐阅读
- axon - 将 Axon 事件发布到 Kafka 主题上
- javascript - 环境预设的 Babel 转译问题
- powershell - 解析包含非标准字符的输出
- java - Android Studio“未找到 Android API 平台 30 的源”
- dynamics-crm - Dynamics 365 案例状态选项集值
- java - JAVA - 将一种日期格式转换为另一种日期格式。未处理的异常类型 ParseException
- angular - 如何在 Typescript 中为每个图标设置不同的颜色
- python - 将列表组合到列表列表中,其中匹配项位于列表内的同一列表中
- python - 如何限制 re_path URL 中的 int 值和 str 长度
- google-chrome-devtools - Chrome 开发工具无法检测到设备