首页 > 解决方案 > 如何在谷歌云中保存一些规则或配置,然后调用它来处理云函数中的 pubsub 主题数据?

问题描述

我正在使用谷歌云功能。我来自基于服务器的应用程序,所以我对无服务器世界了解不多。

我有一个场景,我在谷歌数据存储中有两种类型,即 iot_kind 和 config_kind。一种具有类似于查找表的配置,另一种具有正常的有效负载值。

我正在将 IoT 设备中的数据发布到 pubsub 主题中,并将该数据获取到云函数中。

例如,物联网有效载荷是

{"id":"213213", 'price': 20, 'name':"some_name"}

然后我正在查询配置类型并从中提取一些数据,例如价格乘数

select * 
from config_kind 
where id = "213213" #lets say output is 2

然后我将价格乘以 *2 并将其保存到 IoT_kind 例如 value=40

现在以这种方式,每次我将数据输入云功能时,我都必须进行读取,我认为这非常昂贵并且有点处理。

有没有更好的方法呢?就像我将最新的配置保存在某处,然后每当有效负载出现时,它会看到配置并根据配置进行处理,然后将其保存到数据库中?

我可以做一些事情,比如制作一个云函数并在那里存储最新的值,然后从另一个云函数调用这个云函数来从中获取值吗?它会更便宜还是更贵?非常感谢!

标签: google-cloud-platformgoogle-cloud-firestoregoogle-cloud-functionsgoogle-cloud-datastore

解决方案


Cloud Function 是一种无服务器和无状态的服务。当一个实例被创建时,它会存在一段时间并且它已经停止。没有磁盘被挂载,所有工作都在内存中。这意味着您无法在其中持久保存任何价值。

无论如何,您有 3 个解决方案来减少读入数据存储的配置数量

  • 即使您不能持久存储数据,您仍然可以将它们存储在内存中(高达 2Gb 的内存,包括您的应用程序足迹)。因此,您必须对 Datastore 执行第一个请求,然后,您可以将配置数据存储到定义为全局变量的映射中。因为 Cloud Functions 在您没有竞争条件的同时只能处理 1 个请求。(例如,这与 Cloud Run 不同)
  • 如果您的配置不经常更改,您可以将其存储到文件中并存储到云存储中。在函数的开头加载文件(并像以前一样将其存储到全局变量中,只读取一次),然后执行搜索文件。仅当配置文件大小低于函数内存限制时,这才有效。
  • 如果读取成本在每月 50 美元以上,您可以使用 Cloud SQL 数据库而不是 Datastore。

这对你有意义吗?


推荐阅读