タグ

golangとnetworkに関するAkazaのブックマーク (4)

  • So you want to expose Go on the Internet

    This piece was originally written for the Gopher Academy advent series. We are grateful to them for allowing us to republish it here. Back when crypto/tls was slow and net/http young, the general wisdom was to always put Go servers behind a reverse proxy like NGINX. That's not necessary anymore! At Cloudflare we recently experimented with exposing pure Go services to the hostile wide area network.

    Akaza
    Akaza 2024/02/10
    GoでInternet facingなHTTPサーバーを作るときに注意すること。暗号化、タイムアウト、ロギング、メトリクスなど。
  • GoのHTTPクライアントがAWS NLB配下にあるコンポーネントと通信するときに5-tupleが分散しないので特定のインスタンスにしか負荷分散されないという話題 - その手の平は尻もつかめるさ

    Microservicesのようなものを考えた際、Goで書かれたコンポーネントがHTTP(S)を使って他のコンポーネントと通信するという場合があると思います。 その「他のコンポーネント」がAWS NLBの配下にある時、GoのHTTPクライアントがTCPコネクションを使い回す場合があり、その状況においては特定のNLB配下のインスタンスにしかリクエストを割り振らない挙動をするという話題です。 NLB プロトコル、ソースIP、ソースポート、宛先IP、宛先ポート、そしてTCPシーケンス番号に基いてフローハッシュアルゴリズムを用いて割り振り先のインスタンスを選択するようになっています。 ref: For TCP traffic, the load balancer selects a target using a flow hash algorithm based on the protocol,

    GoのHTTPクライアントがAWS NLB配下にあるコンポーネントと通信するときに5-tupleが分散しないので特定のインスタンスにしか負荷分散されないという話題 - その手の平は尻もつかめるさ
  • 2022年11月30日のAdGuard DNS部分的ダウンについて

    2022年11月30日03:24(東京)に、AdGuard DNSに深刻な障害が発生し、マイアミ、ニューヨーク、ロンドンの3ヶ所のサーバーが影響を受けました。 障害発生中、これら3つの拠点に接続されているすべてのお客様のインターネットが事実上遮断されました。 これは、AdGuard DNSの全顧客の約20%、すなわち1000万人以上の方がインターネットに問題を抱えたことになります。 影響を受けた方に、このような事態になったことを心からお詫び申し上げます。 今後このような問題が発生しないよう対策を講じる所存です。 何が起きたのか 小さなミスがいくつも重なり、問題発生に至りました。 これらのミスは、それぞれ単独なら致命的ではなく、障害を引き起こすものではありませんでした。 しかし、残念なことに、これらのミスが重なったことこそが、より大きなトラブルの原因となりました。 最初のミスは、11月28日

    2022年11月30日のAdGuard DNS部分的ダウンについて
    Akaza
    Akaza 2022/12/20
    “サーバーは増加した負荷に対応できず、次々と故障し始めました。” 煙を吹いたり火花を散らしたりしてそう。/ “RSAとの最初のTLSハンドシェイクは、Goのcrypto/tlsだと非常に遅く…”
  • http.ListenAndServe() をインターネットに公開してはいけない - Qiita

    http.ListenAndServe() を使ったサーバーをプロダクションに投入していたのですが、海外からのアクセスが多くなったころにリソースリークが発覚しました。 ListenAndServeのドキュメント ListenAndServeのソースを見るとこうなっています。 func ListenAndServe(addr string, handler Handler) error { server := &Server{Addr: addr, Handler: handler} return server.ListenAndServe() } addr, handler 以外は http.Server のnil値がそのまま使われている事がわかります。この構造体にはいくつかのタイムアウト値がありまが、nil値で初期化されるとタイムアウトなしの状態になってしまいます。 Server型のドキ

    http.ListenAndServe() をインターネットに公開してはいけない - Qiita
    Akaza
    Akaza 2019/04/17
    タイトルについてはお行儀の悪いクライアントの対応が大変だからって話だろうか。
  • 1