[英]Google Cloud Pub/Sub triggers high latency on low messages throughput
我正在运行将消息发布到 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 秒或更多)。
有没有办法或解决方法使 PubSub 每次都表现良好( 50 毫秒或更短的延迟),即使传入的消息量很少?
如果你总是发布到同一个主题,你最好保留从pubSubClient.topic(topicName)
返回的对象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 支持,以便他们可以查看您正在使用的特定项目和主题延迟绝对不是预期的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.