异步还是同步拉取,用于计算pub sub pub / sub中的流数据?

时间:2019-10-01 13:42:35

标签: publish-subscribe google-cloud-pubsub

我想计算最近一小时的消息数(最近一小时是指消息数据中的时间戳字段)。

我目前有一个可以对邮件进行同步计数的代码(我正在使用Google Cloud Pub / Sub Synchronous pull),但是我注意到这将花费很长时间。

我的代码将重复轮询预定的次数(我将其设置为100+),以便确保在过去一小时内没有更多乱序的消息。
这是不可接受的设计,因为这意味着用户必须等待5-10分钟才能让服务在需要度量时对消息进行计数!

Pub Sub 设计中是否存在用于解决此类问题的最佳实践?
这似乎是一个容易解决的问题(计算最近X个时间范围内的事件数),所以我认为可能会发生。

异步设计会有所帮助吗?异步设计如何工作?我对异步和Python future概念不太确定(我正在使用GCP Pub / Sub的Python客户端库)。

1 个答案:

答案 0 :(得分:1)

我将尝试以不同的方式捕获消息。我的解决方案基于日志记录和BigQuery。想法是编写一个日志,例如message received with timestamp xxxxx,以过滤此日志模式并将结果存储在BigQuery中。

然后,当用户询问时,您只需要请求BigQuery并在所需的时间段内对消息进行计数。 您还可以更改时间范围,拥有历史记录...

要编写此日志,需要两种解决方案

  • 更便宜但不建议这样做,消耗消息的过程会将其记录下来。但是,您依赖于外部服务。此服务有2个职责:其工作和此日志(用于指标)。不是固体。可能是发布者的角色,其登录名是这样的:message published at XXXX。但是,这意味着所有发布者或所有订阅者都在GCP上。
  • 更好的方法是插入一个功能,即便宜的内存(128Mb)来简单地处理消息并写入日志。