Высокая задержка publi sh с клиентом PubSub Golang - PullRequest
0 голосов
/ 02 апреля 2020

У нас есть специальный Golang скрипт для публикации sh сообщений в PubSub.

client, err := pubsub.NewClient(ctx, GOOGLE_CLOUD_PROJECT))

Затем мы используем тот же клиент, чтобы опубликовать sh до 40 тем.

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,
    }
.
.
.


, а затем на основе определенного условия опубликовать sh до 1 из топи c. Наш издатель l oop выглядит следующим образом

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 для публикации sh сообщений в темах и синхронно ожидаем подтверждения сообщений, а это означает, что за раз только 3000 полет / ожидание подтверждения на клиенте.

Наш текущий уровень публикации близок к 5K RPS, но наши задержки составляют 30 секунд.

Ниже приведены статистические данные, которые я собрал с нашей панели инструментов Datadog.

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

Когда я написал небольшой скрипт-тест для публикации sh сообщений в одной топи c средняя задержка для этой машины составляла 147 мс.

Я пытался настроить параметры издателя для каждой топи c, но это не помогло.

Теперь у меня есть пара вопросов.

  1. Это правильный способ использовать один экземпляр клиента для публикации sh в нескольких темах?
  2. Есть ли в библиотеке какие-то встроенные конструкции для поддержки такого сценария разветвления ios?

1 Ответ

0 голосов
/ 02 апреля 2020

Вы пробовали массовую публикацию sh?

публика sh (topi c, [] Сообщение {1,2,3,4, .....})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...