【问题标题】:Google Cloud Pub/Sub triggers high latency on low messages throughputGoogle Cloud Pub/Sub 在低消息吞吐量时触发高延迟
【发布时间】:2020-03-24 08:16:51
【问题描述】:

我正在运行将消息发布到 PubSub 主题并触发后台云功能的项目。

我读到,在消息量大的情况下,它表现良好,但对于每秒数百甚至数十条消息的较少量,Pub/Sub 可能会产生高延迟..

发布单条消息的代码示例:

 const {PubSub} = require('@google-cloud/pubsub');

 const pubSubClient = new PubSub();

 async function publishMessage() {
    const topicName = 'my-topic';
    const dataBuffer = Buffer.from(data);

    const messageId = await pubSubClient.topic(topicName).publish(dataBuffer);
    console.log(`Message ${messageId} published.`);
 }

 publishMessage().catch(console.error);

PubSub 触发的代码示例函数:

exports.subscribe = async (message) => {
  const name = message.data
    ? Buffer.from(message.data, 'base64').toString()
    : 'World';

  console.log(`Hello, ${name}!`);
}

云功能环境详情:
节点:8
谷歌云/发布订阅:1.6.0

问题在于,当使用消息吞吐量低(例如,每秒 1 个请求)的 PubSub 时,它有时会遇到困难并显示出令人难以置信的高延迟(高达 7-9 秒或更多)。 p>

有没有一种方法或解决方法可以让 PubSub 每次都表现良好(50ms 或更短的延迟),即使传入消息量很少?

【问题讨论】:

  • 您是在猜测还是对具体细节有实际问题?
  • @JohnHanley,不,这是实际问题。您需要哪些详细信息?
  • 我在您的问题中没有看到问题 - 只是假设 Pub/Sub 很慢。提供有关您的问题的详细信息。 stackoverflow.com/help/how-to-ask
  • @JohnHanley 已编辑
  • 当您说“延迟”时,您是指发布延迟还是端到端延迟?

标签: javascript node.js google-cloud-platform google-cloud-functions google-cloud-pubsub


【解决方案1】:

如果您总是发布到同一个主题,最好保留从pubSubClient.topic(topicName) 返回的对象并重新使用它,无论您有少量消息还是大量消息。如果您想最小化延迟,您还需要设置batching 设置的maxMilliseconds 属性。默认情况下,这是 10 毫秒。由于您现在拥有代码,这意味着每次发布等待 10 毫秒以发送消息以希望填充批次。假设您在每次发布时都通过topic 调用创建了一个新发布者,您可以保证始终等待至少 10 毫秒。拨打topic时可以设置:

const publisher = pubSubClient.topic(topicName, {
      batching: {
        maxMessages: 100,
        maxMilliseconds: 1,
      },
    });

如果在重用从pubSubClient.topic(topicName) 返回的对象并更改maxMilliseconds 后,您仍然遇到这样的延迟,那么您应该联系Google Cloud Support,以便他们查看您正在使用的特定项目和主题绝对不会出现这种延迟。

【讨论】:

  • 嗨,我发现在指标(GC 监控)中,当我看到“unreachable_5xx_error_500”时,我可以看到消息由于某种原因被延迟,我在网上找不到任何关于此的信息
  • 针对哪个指标?
  • 资源 - Google Pub/Sub 订阅,指标 - 推送延迟。这是图表截图:i.stack.imgur.com/XqTqM.png
猜你喜欢
  • 1970-01-01
  • 2022-01-01
  • 2021-02-21
  • 1970-01-01
  • 2021-04-18
  • 1970-01-01
  • 2020-02-21
  • 2023-04-08
  • 1970-01-01
相关资源
最近更新 更多