Google Cloud Functions 和 Sheets v4 API 之间的并发问题
Concurrency Issues between Google Cloud Functions and Sheets v4 API
我有 2 个与管理 Google 云函数之间的并发相关的问题。
设置是我有一个 slackbot,可以使用“checkoff”斜杠命令。这个斜杠命令发送另一个 Slack 用户 yes/no 按钮是否授权检查。当用户单击一个选项时,它会将响应发送到 Google Cloud Function,其中 1) 将响应发送回 Slack 以关闭按钮,以及 2) 如果在 Google [= 中获得授权,则记录核对37=] 使用 Sheets v4 API (spreadsheets.values.append)
问题 #1: 向 yes/no 按钮发送垃圾邮件的用户会在 Cloud Function 确认并关闭按钮之前触发对 Cloud Function 的多个 Slack 请求。这导致在 sheet 中记录了多个 Cloud Functions 生成和多个检查。如果我可以维护状态,我可以保存来自请求的唯一信息并检查以确保该请求尚未得到服务。是否有使用 Cloud Functions 执行此操作的模式?
问题 #2: 有时独立用户会在相似的时间授权多次核对。这些请求产生独立的 Cloud Function 实例,这些实例试图附加到 Sheet。在极少数情况下,另一个函数会在第一个函数的读取和写入之间写入,从而导致覆盖。我会使用读写锁来处理这个问题,但我知道无法在 Cloud Functions 之间共享并发资源。
(不太重要)问题 #3:我真的很想批量处理 spreadsheet 写入,但它似乎与第 1 次无服务器计算相悖地方。有办法吗?
感谢任何帮助。
我在使用 Cloud Functions 和 Firestore 时遇到了类似的问题。在我的例子中,我收到了 'order/123' 形式的关于新数据和更新数据的通知,然后我在 Firestore 中创建了订单的副本,问题是有时多个通知同时到达导致订单重复因为竞争条件。
我的问题解决方案是使用 Google Cloud Tasks,https://console.cloud.google.com/cloudtasks,我有一个接收通知的云函数,它向队列添加一条消息,以并发 1 进行处理,然后是其他云函数负责处理。
Receive notification -> Post message to queue (concurrency 1) -> Process message
在这种情况下,每个客户有 1 个队列,我确信有更好的方法,但目前这已经足够了。您稍后可以将客户路由到相同的队列,但始终让相同的客户在相同的队列中。
我有 2 个与管理 Google 云函数之间的并发相关的问题。
设置是我有一个 slackbot,可以使用“checkoff”斜杠命令。这个斜杠命令发送另一个 Slack 用户 yes/no 按钮是否授权检查。当用户单击一个选项时,它会将响应发送到 Google Cloud Function,其中 1) 将响应发送回 Slack 以关闭按钮,以及 2) 如果在 Google [= 中获得授权,则记录核对37=] 使用 Sheets v4 API (spreadsheets.values.append)
问题 #1: 向 yes/no 按钮发送垃圾邮件的用户会在 Cloud Function 确认并关闭按钮之前触发对 Cloud Function 的多个 Slack 请求。这导致在 sheet 中记录了多个 Cloud Functions 生成和多个检查。如果我可以维护状态,我可以保存来自请求的唯一信息并检查以确保该请求尚未得到服务。是否有使用 Cloud Functions 执行此操作的模式?
问题 #2: 有时独立用户会在相似的时间授权多次核对。这些请求产生独立的 Cloud Function 实例,这些实例试图附加到 Sheet。在极少数情况下,另一个函数会在第一个函数的读取和写入之间写入,从而导致覆盖。我会使用读写锁来处理这个问题,但我知道无法在 Cloud Functions 之间共享并发资源。
(不太重要)问题 #3:我真的很想批量处理 spreadsheet 写入,但它似乎与第 1 次无服务器计算相悖地方。有办法吗?
感谢任何帮助。
我在使用 Cloud Functions 和 Firestore 时遇到了类似的问题。在我的例子中,我收到了 'order/123' 形式的关于新数据和更新数据的通知,然后我在 Firestore 中创建了订单的副本,问题是有时多个通知同时到达导致订单重复因为竞争条件。 我的问题解决方案是使用 Google Cloud Tasks,https://console.cloud.google.com/cloudtasks,我有一个接收通知的云函数,它向队列添加一条消息,以并发 1 进行处理,然后是其他云函数负责处理。
Receive notification -> Post message to queue (concurrency 1) -> Process message
在这种情况下,每个客户有 1 个队列,我确信有更好的方法,但目前这已经足够了。您稍后可以将客户路由到相同的队列,但始终让相同的客户在相同的队列中。