谷歌发布/订阅控制RateLimit [英] Google Pub/Sub to control RateLimit

查看:0
本文介绍了谷歌发布/订阅控制RateLimit的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我做了一个云函数来做以下事情:

  1. 在今天的前一天(大约400个ID)每晚一次获取订单ID的过滤器。
  2. 对于每个ID,从源获取详细信息。
  3. 对于每个详细信息,请从目标获取额外信息。
  4. 作为发票发送到目标。

我的问题在第2步。速率限制为每分钟14个请求。因此,我想创建一个介于1和2之间的发布/订阅。创建一个从主题中提取消息的订阅函数。处理其中的14条消息并确认这些消息,然后解析承诺。但这给我留下了一些问题:

  1. 这是正确的流程吗?
  2. 如何计划步骤2?
  • 如果我收到429响应,我会等待1分钟(这将被收费)
  • 是否让步骤2每隔1分钟运行一次,以不获得429响应代码?(这将在一天中没有消息的情况下运行很长时间。
  • 不是让发布/订阅触发函数,而是检查响应代码-如果是429,则等待1分钟进行处理。但我的问题是:它会调用云函数的一个实例还是多个实例?

我希望有人能分享一些想法。我是云功能和异步编程的新手。我的洞功能可以正常工作,只限5个订单。就在后来,我遇到了这个速率限制(我知道,我太蠢了)。

推荐答案

我个人认为可以使用FiRestore来存储每个ID(文档ID)的进程状态。

我的意思是,第一个函数在FiRestore集合中创建(大约)400个文档--根据问题中的ID创建一个文档。然后,每个文档都可以用作给定文档处理的状态机和日志-从详细信息检索到发票生成和过帐...

此外,第一个函数可以发送带有文档ID的发布订阅消息(到目前为止大约有400条消息)。

在发布订阅主题的另一边--还有第二个云函数。我会计算其并行运行的实例的最大数量,以最大限度地减少API速率异常,但如果收到异常-这不是问题。此函数执行实际工作,并在成功的情况下更新Firestore文档的状态(即完成),或在出现异常的情况下更新其他状态...

然后我们有一些调度程序(比方说15分钟一次、10分钟一次、20分钟一次--我不知道上下文)、pubSub主题和另一个云函数。此云函数(在收到调度程序的消息后)扫描FiRestore集合,并且对于处于"异常"状态的文档,将消息发送到第一个发布订阅(见上文),以便可以重新处理文档-这是一个自我修复过程...

流程、日志和流程(状态更新等)可以在FiRestore文档中收集,这样他们中的每个人都可以获得整个过程发生的时间...

此外,我还会使用专用的堆栈驱动程序日志来监控它的运行情况(例如,如果每个时间单位的异常数量超过某个限制--它可能会导致警报触发)。日志消息应包含与FiRestore集合中的日志(和其他详细信息)或多或少类似的信息。

然后我将使用接收器进入BigQuery并拥有一些报告/仪表板(如果需要)...

最后,应该有一个自定义服务帐户来运行那些具有相关IAM角色的云功能,以便与GCP资源(pubSub、Firestore、StackDrive等)配合使用...

这篇关于谷歌发布/订阅控制RateLimit的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆