タグ

ブックマーク / christina04.hatenablog.com (3)

  • Goのnet/httpのtimeoutについて - Carpe Diem

    概要 タイムアウトと一口に言ってもサーバ・クライアント、そして各フェーズによって細かく設定があります。 今回はGonet/httpのtimeoutについて1つ1つ説明していきます。 環境 golang/go 1.13 Server 全体図 サーバ系timeoutと各フェーズは以下の関係になっています。 各項目 項目 役割 http.Server.ReadHeaderTimeout request headersを読む際のtimeout http.Server.ReadTimeout request headersやrequest bodyを読む際のtimeout。 SetReadDeadline()を呼び出してセットする。 http.Server.WriteTimeout request bodyの読み込み〜responseの書き込みまで。 SetWriteDeadline()を呼び出し

    Goのnet/httpのtimeoutについて - Carpe Diem
  • KubernetesのPodを安全に終了する - Carpe Diem

    概要 KubernetesのPodを安全に終了する際に気をつけるべき事前知識と設定方法について説明します。 あらかじめまとめると 新規リクエストのルーティングがなくなるまでpreStopでPodのアプリケーションコンテナの終了開始を待たせる 既存リクエストが全て処理されるまでアプリケーション側でGraceful Shutdownをする SIGKILLで強制終了されないように1, 2が完了するまでterminationGracePeriodSecondsを長くする の3つを実施することになります。 環境 Kubernetes v1.21.14 前提知識 Podが終了すると何がトリガーされるか Podが終了するとまずdeletionTimestampがPodリソースに設定され、Terminating状態になります。 そしてその次に以下の3つの処理がそれぞれ独立(並行)して実施されます。 Pod

    KubernetesのPodを安全に終了する - Carpe Diem
    W53SA
    W53SA 2023/08/07
  • Goのnet/httpのkeep-aliveで気をつけること - Carpe Diem

    概要 Idle connectionをプールするkeep-aliveの仕組みですが、Goで適切に使用するためにはいくつか注意があります。 環境 golang/go 1.13.1 TCP Keep-Aliveの挙動をパケットキャプチャで確認する 例えば以下のようにDefaultTransportの一部の設定(①、②)をイジってリクエストを送ると client = &http.Client{ Transport: &http.Transport{ DialContext: (&net.Dialer{ Timeout: 30 * time.Second, KeepAlive: 10 * time.Second, // ① DualStack: true, }).DialContext, ForceAttemptHTTP2: true, MaxIdleConns: 100, IdleConnTim

    Goのnet/httpのkeep-aliveで気をつけること - Carpe Diem
    W53SA
    W53SA 2022/12/06
  • 1