首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PubSub Golang客户端的高发布延迟

使用PubSub Golang客户端的高发布延迟
EN

Stack Overflow用户
提问于 2020-04-02 08:33:31
回答 1查看 511关注 0票数 0

我们有一个定制的Golang脚本来向PubSub发布消息。

代码语言:javascript
复制
client, err := pubsub.NewClient(ctx, GOOGLE_CLOUD_PROJECT))

然后,我们使用同一个客户端发布多达40个主题。

代码语言:javascript
复制
topic1 := client.Topic(topicName)
    topic1.PublishSettings = pubsub.PublishSettings{
        DelayThreshold: 10 * time.Millisecond,
        CountThreshold: 1000,
        NumGoroutines:  70 * runtime.GOMAXPROCS(0),
        ByteThreshold:  1e6,
        Timeout:        60 * time.Second,
    }



topic2 := client.Topic(topicName)
    topic2.PublishSettings = pubsub.PublishSettings{
        DelayThreshold: 10 * time.Millisecond,
        CountThreshold: 1000,
        NumGoroutines:  70 * runtime.GOMAXPROCS(0),
        ByteThreshold:  1e6,
        Timeout:        60 * time.Second,
    }
.
.
.

然后根据一定的条件发布到主题的1。我们的publisher循环如下所示

代码语言:javascript
复制
semaphore := make(chan int, 3000)
for i := 0; i < totalMessages; i++ {
            semaphore <- 1
            go func(topic *pubsub.Topic, semaphore chan int) {
                data := []byte(_RandStringBytes(messageLengthInBytes))
                msg := &pubsub.Message{
                    Data: data,
                }
                if _, err := topic.Publish(ctx, msg).Get(ctx); err != nil {
                    log.Fatalf("Could not publish message: %v", err)
                }
                <-semaphore
            }(topic, semaphore)
        }

我们使用3000 Goroutines向主题发布消息,并同步等待消息被确认,这意味着在某一时刻只有3000条消息在飞行中/在客户端等待确认。

我们目前的发布速度接近5K RPS,但我们的延迟高达30秒。

下面是我从我们的Datadog仪表板编译的统计数据。

代码语言:javascript
复制
Publish Latency.    Number of Messages
0-1                 1877
1-2                 1990
2-3                 2661
2-3                 2149
5-10                10323
10-15               4013
15-20               10322
20-25               3034
25-30               925
> 30                1901

当我编写一个小的基准脚本将消息发布到单个主题时,来自同一台机器的平均延迟是147 was。

我试着调整每个主题的发行者设置,但这并没有帮助。

,现在我有几个问题。。

  1. 是使用单个客户端实例将多个主题发布到多个主题的正确方法?
  2. 在库中是否有内置的构造来支持这种散列场景?

EN

回答 1

Stack Overflow用户

发布于 2020-04-02 13:08:59

你试过批量出版吗?

发布(主题,[]消息{1,2,3,4,…})

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60987316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档