我想计算最近一小时的消息数(最近一小时是指消息数据中的时间戳字段)。
我目前有一个可以对邮件进行同步计数的代码(我正在使用Google Cloud Pub / Sub Synchronous pull),但是我注意到这将花费很长时间。
我的代码将重复轮询预定的次数(我将其设置为100+),以便确保在过去一小时内没有更多乱序的消息。
这是不可接受的设计,因为这意味着用户必须等待5-10分钟才能让服务在需要度量时对消息进行计数!
Pub Sub 设计中是否存在用于解决此类问题的最佳实践?
这似乎是一个容易解决的问题(计算最近X个时间范围内的事件数),所以我认为可能会发生。
异步设计会有所帮助吗?异步设计如何工作?我对异步和Python future
概念不太确定(我正在使用GCP Pub / Sub的Python客户端库)。
答案 0 :(得分:1)
我将尝试以不同的方式捕获消息。我的解决方案基于日志记录和BigQuery。想法是编写一个日志,例如message received with timestamp xxxxx
,以过滤此日志模式并将结果存储在BigQuery中。
然后,当用户询问时,您只需要请求BigQuery并在所需的时间段内对消息进行计数。 您还可以更改时间范围,拥有历史记录...
要编写此日志,需要两种解决方案
message published at XXXX
。但是,这意味着所有发布者或所有订阅者都在GCP上。