Know when to break up with Go's http.DefaultClient
Go http.DefaultClient はそのまま利用していると以下の観点が漏れるよという話 type Client struct を見ていくと…
Timeout: 初期値が 0 なのでタイムアウトしない
サーバーもタイムアウトしなかったら💥
Transport: DefaultTransport になっていてそのフィールドを見ると
MaxIdleConns: 100という設定。複数ホストへ接続する場合に偏りが生まれる
code:client.go
func LoanClientGet() {
//...
}
func PaymentClientPost() {
//...
}
アプリケーションが最初のGETリクエストで80回, 次のPOSTリクエストで200回呼び出す場合
初期値100なのでGETで80使っているのでPOSTは20のうちで取り回す必要がある
MaxIdleConnsPerHostが解決策になる
必要に応じて client *http.Client のようにフィールドをもたせた構造体を作ったほうがよい