繁体   English   中英

Google Cloud Functions 和 Sheets v4 之间的并发问题 API

[英]Concurrency Issues between Google Cloud Functions and Sheets v4 API

我有 2 个与管理 Google Cloud Functions 之间的并发性相关的问题。

设置是我有一个 slackbot,可以使用“checkoff”斜杠命令。 此斜杠命令向另一个 Slack 用户发送是/否按钮是否授权核对。 当用户单击一个选项时,它会将该响应发送到 Google Cloud Function,其中 1) 将响应发送回 Slack 以关闭按钮,以及 2) 如果在 Google 表格中使用 Sheets v4 API ( spreadsheets.values .append )

问题 #1:在 Function 可以确认并关闭按钮之前,向云 Function 发送垃圾邮件的用户会触发多个 Slack 请求到云 Function。 这导致多个 Cloud Functions 产生,并且在工作表中记录了多个核对。 如果我可以维护 state,我可以保存请求中的唯一信息并检查以确保该请求尚未得到服务。 是否有一种模式可以使用 Cloud Functions 执行此操作?

问题 2:有时独立用户会在相似的时间授权进行多次核对。 这些请求会产生独立的云 Function 实例,这些实例会尝试 append 到工作表。 在极少数情况下,另一个 Function 在第一个函数的读取和写入之间写入,导致覆盖。 我会使用读写锁来处理这个问题,但我知道无法在 Cloud Functions 之间共享并发资源。

(不太重要)问题 #3 :我真的很喜欢批量写入电子表格,但它似乎首先违背了无服务器计算的原则。 有没有办法做到这一点?

任何帮助表示赞赏。

Cloud Functions 和 Firestore 也有类似的问题。 在我的例子中,我收到了关于新数据和更新数据的通知,格式为“order/123”,然后我在 Firestore 中创建了一份订单副本,问题是有时多个通知同时到达导致订单重复因为竞争条件。 我的问题解决方案是使用 Google Cloud Tasks, https://console.cloud.google.com/cloudtasks ,我有一个接收通知的云 function,它向队列中添加一条消息,以并发 1 进行处理,然后其他云 function 负责处理。

Receive notification -> Post message to queue (concurrency 1) -> Process message 

在这种情况下,每个客户有 1 个队列,我相信有更好的方法,但现在这已经足够了。 您稍后可以将客户路由到相同的队列,但始终让相同的客户在相同的队列中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM