request가 완료되었을때 trace는??
- 커넥션을 받고 난 뒤 실제 요청을 던지는 시점: GotConn()
- request가 완료되었을때 trace는 RoundTripper interface를 활용해야함
- http.Client에 transport가 interface로 들어가므로,
wrapper를 씌워서 transport.RoundTrip이 끝나는 시점에 trace를 남김
Slide 17
Slide 17 text
Datadog에 timespan을 보여주기 적절한 trace 방식
1. Transport Wrapper에서 RoundTrip 시작 전에 Trace
2. Transport.RoundTrip() 호출
3. Transport에서 GetConn() 호출
3. Transport에서 GotConn() 호출
4. Transport Wrapper에서 RoundTrip이 완료되었을때
Trace
connection을 받는데 걸리는 시간
요청을 보내고, 응답을 받는데
걸리는 시간
Slide 18
Slide 18 text
요약
1. http.Transport는 한개만 쓸것
2. http.Client.Do()가 끝나고 err가 없으면 res.Body.Close()를 호출할것
3. httptrace.GetConn/GotConn을 활용하여 connect 의 timespan 분리
4. MaxIdleConnsPerHost를 잘 조정하자 (=MaxIdleConns / #hosts)
Slide 19
Slide 19 text
끝
컨플루언스 문서
● [Golang] http connection management
● [Golang] http.persistConn, httptrace.ClientTrace