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

  • 様々なrate limitアルゴリズム - Carpe Diem

    概要 インターネットに晒されているWebサービスでは TV等で紹介されたことによる大量流入 悪意ある人物からの攻撃 クライアントのバグに依る大量リクエスト など、来想定していた以上のトラフィックが来ることはよくあります。 単純にシステムを構築すると大規模トラフィックに対応できずシステムがスローダウンしてしまうため、何かしらrate limitをかけておいた方が良いです。 ただしrate limitと一口に入っても色々あるため、今回は主なrate limitアルゴリズムを紹介します。 Leaky bucket Leaky bucketはデータ転送レートを一定にする(=上限を設定する)アルゴリズムです。 下の図のように、様々な流量の水流がそのバケツに流れ込んでも小さな穴からは一定の水流が流れ出す仕組みです。 ref: What is the difference between token

    様々なrate limitアルゴリズム - Carpe Diem
    nv-h
    nv-h 2019/11/11
    無限にメモリがあって無限にレイテンシを大きくしても良いんだったら簡単なんだけどね。単に高速に捌くだけならFPGAとかASICでちょちょいってやりたい。
  • Golang 1.11 で導入された ListenConfig を使って SO_REUSEPORT を利用する - Carpe Diem

    概要 先日リリースされた1.11でソケットオプションを設定できるようになりました。 これによってLinux 3.9から導入されたSO_REUSEPORTという、同じポートでbindすることが可能になる機能が利用可能になります。 環境 golang 1.11 macOS 10.13.6 (Darwin Kernel Version 17.7.0) Ubuntu 16.04 (4.4.0-87-generic) 何が嬉しい? 一言で言うとGraceful Restartが可能になるという点です。 通常サーバプロセスを再起動するとその瞬間はリクエストを捌けなくなります。 Rolling updateのような事ができる環境であればいいですが、そうではない場合 a) Listenしているsocketのfile descriptorの複製 b) SO_REUSEPORTを使う といった手段でデプロイ時

    Golang 1.11 で導入された ListenConfig を使って SO_REUSEPORT を利用する - Carpe Diem
    nv-h
    nv-h 2018/10/13
    Golang 1.11でSO_REUSEPORT対応。そもそもこのオプション知らなかった。。。今まで2重待ち受けとかめんどいことしてたなぁ。
  • 1