Пул бездействующих соединений 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 больше не использует простаивающие соединения? Я не думаю, что у этого бездействующего соединения уже есть тайм-аут.