Пул бездействующих соединений Go HTTP и трассировка http

У меня есть давно работающая программа GO (версия 1.18), которая отправляет сотни запросов GET одновременно в секунду, используя RESTY, на удаленный . Каждый запрос GET представляет собой отдельную процедуру перехода, которая использует один и тот же клиент RESTY.

удаленный сервер https://api.abcd.comhttps://api.abcd.com — nginx/1.19.2(HTTP/2), IP-адреса — 11.11.11.11 и 22.22.22.22. Да, этот удаленный сервер имеет несколько IP-адресов.

Я использую имя хоста при настройке клиента RESTYSetBaseURL("https://api.abcd.com")

Конфигурация транспорта по умолчанию в RESTY.

TraceInfo() включен на стороне клиента RESTY. В информации трассировки есть поле IsConnReused. Этот IsConnReused на самом деле происходит из структуры GotConnInfo в пакете GO httptrace:

      type GotConnInfo struct {
    Conn net.Conn

    // Reused is whether this connection has been previously used for another HTTP request.
    Reused bool

    // WasIdle is whether this connection was obtained from anidle pool.
    WasIdle bool

    // IdleTime reports how long the connection was previously idle, if WasIdle is true.
    IdleTime time.Duration
}

вопрос 1: GO httptrace определяет «повторное использование соединения» на основе имени хоста (api.abcd.com) или IP-адреса?

вопрос 2: пул соединений GO http package на самом деле является картой, ключ представляет собой тип структуры connectMethodKey. Поле addr в этой структуре — это имя хоста или IP-адрес?

      type connectMethodKey struct {
    proxy, scheme, addr string
    onlyH1              bool
}

Это то, что я нашел в TraceInfo(). Когда программа запускается в начале, все запросы отправляются на 11.11.11.11:443. Через несколько минут все запросы отправляются на 22.22.22.22, а не на 11.11.11.11. Затем, через несколько минут, все запросы снова начинают отправляться на 11.11.11.11, на этот раз не на 22.22.22.22.

вопрос 3: когда запросы начинают отправляться на 22.22.22.22, сокетные соединения с 11.11.11.11 простаивают, почему GO http больше не использует простаивающие соединения? Я не думаю, что у этого бездействующего соединения уже есть тайм-аут.

0 ответов

Другие вопросы по тегам