【问题标题】:Asynchronous or synchronous pull for counting stream data in pub sub pub/sub?用于计数 pub sub pub/sub 中的流数据的异步或同步拉取?
【发布时间】:2020-01-30 19:46:39
【问题描述】:

我想统计过去一小时内的消息数量(过去一小时指的是消息数据中的时间戳字段)。

我目前有一个可以同步计算消息的代码(我正在使用 Google Cloud Pub/Sub Synchronous pull),但我注意到这需要很长时间。

我的代码将按预定义(我将其设置为 100 次以上)的次数重复轮询订阅,这样我就可以确定在最后一小时内没有更多消息乱序了。
这不是一个可接受的设计,因为这意味着用户必须等待 5 到 10 分钟才能让服务在他们想要指标时对消息进行计数!

Pub Sub 设计中是否有解决此类问题的最佳做法
这似乎是一个很容易解决的问题(计算上一个 X 时间范围内的事件数),所以我认为可能有。

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

【问题讨论】:

    标签: publish-subscribe google-cloud-pubsub


    【解决方案1】:

    我会尝试以不同的方式捕捉信息。我的解决方案基于日志记录和 BigQuery。想法是编写一个日志,例如message received with timestamp xxxxx,以过滤此日志模式并将结果接收到 BigQuery。

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

    为了写这个日志,2个解决方案

    • 更便宜但不是真正推荐的,使用消息的进程将其与它一起处理。但是,您依赖于外部服务。这个服务有两个职责:它的工作和这个日志(用于度量)。不是固体。也许它可以是发布者的角色,带有这样的日志:message published at XXXX。然而,这意味着所有发布者或所有订阅者都在 GCP 上。
    • 更好的是插入一个函数,更便宜(128Mb 的内存)来简单地处理消息和写入日志。

    【讨论】:

    猜你喜欢
    • 2022-01-27
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    相关资源
    最近更新 更多