タグ

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

  • ネットワークの疎通を確認する方法 - Carpe Diem

    概要 インスタンスのヘルスチェックに失敗したり、リクエストが届かなかったりするケースの調査のためにネットワークの疎通を確認する機会は多々あります。 今回はその中でよく使うコマンドをまとめてみました。 環境 Ubutnu 16.04 コマンド ping pingはICMPのエコー要求/応答機能を使った診断コマンドです。 疎通確認 $ ping google.com PING google.com (216.58.200.206): 56 data bytes 64 bytes from 216.58.200.206: icmp_seq=0 ttl=54 time=2.329 ms 64 bytes from 216.58.200.206: icmp_seq=1 ttl=54 time=2.744 ms ちなみにICMPはL3のプロトコルなのでポートは関係ありません。 確認できないケース pi

    ネットワークの疎通を確認する方法 - Carpe Diem
  • 様々な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
  • Non-Blocking I/O, I/O Multiplexing, Asynchronous I/Oの区別 - Carpe Diem

    概要 各言語がC10K問題をどう解決してきたかを調べてみたところ、Non-Blocking I/O, I/O Multiplexing, Asynchronous I/Oの区別がよく分からなかったので調べてみました。 正直なところ人によってちょこちょこ定義が異なるのではっきりとした答えはなさそうですが、自分で調べてしっくりした形をまとめます。 前提 同期と非同期の違い 用語 説明 同期 OSにタスクを投げて、入出力の準備ができたら アプリケーションに処理が返ってくる 非同期 OSにタスクを投げて、入出力が完了したら通知をもらう ブロッキングとノンブロッキングの違い 用語 説明 ブロッキング OSへ依頼したタスクが完了するまで待つ ノンブロッキング OSへ依頼したタスクの完了を待たない Blocking I/O ref: java Selector is asynchronous or no

    Non-Blocking I/O, I/O Multiplexing, Asynchronous I/Oの区別 - Carpe Diem
  • goroutineはなぜ軽量なのか - Carpe Diem

    概要 以前の記事で christina04.hatenablog.com Goはスレッドよりはるかに軽量なgoroutineでC10K問題を解決する、という話をしましたが、goroutineが軽量なのはなぜか?という理由を深掘りしたことがなかったのでしてみました。 環境 golang 1.11.1 Darwin 17.7.0 軽量と呼ばれる理由は2つ 大きく分けると以下の2つのポイントがあります スレッドに比べてメモリ使用量が低い スイッチングコストが低い それぞれ説明していきます。 goroutineがスレッドに比べてメモリ使用量が低いのはなぜか スタックとヒープのメモリの使い方を理解すると分かります。 ヒープはメモリの下層、プログラムコードのすぐ上にあり、上に向かって成長します。一方スタックは仮想アドレス空間の一番上にあり、徐々に下に成長していきます。 ref: イベントループなしでの

    goroutineはなぜ軽量なのか - Carpe Diem
    ryskosn
    ryskosn 2018/10/27
  • delveでGoのデバッグ - Carpe Diem

    概要 Goでデバッグをする際にdelveというツールがオススメです。 環境 golang v1.8.3 delve 1.0.0-rc.1 インストール brewでもインストールできますが、単体テストの実行の際に上手く動かないことがあったのでgo getの方をオススメします。 $ xcode-select --install $ go get -u github.com/derekparker/delve/cmd/dlv 通常の使い方 以下のコードに対して実行するとします。 func main() { a := Hoge("main") fmt.Println(a) } func Hoge(m string) string { hoge := "hoge" fuga := m + hoge + "fuga" return fuga } 起動 $ dlv debug hoge.go (dlv)

    delveでGoのデバッグ - Carpe Diem
    ryskosn
    ryskosn 2018/06/25
    build 時に最適化を無効にするオプション
  • Goでのstreamの扱い方を学ぶ - Carpe Diem

    概要 結論から言うと、Streamで扱っているものはStreamのまま扱うです。 具体的にはio.Readerを毎回ioutil.ReadAllで[]byteに変換せずにそのまま使いましょうです。 なぜStreamを使うべきか Node.jsの例ですが、こちらで非常に分かりやすく説明されています。 yosuke-furukawa.hatenablog.com それを踏まえて考えてみると、Goの場合以下の2つが大きいと思います。 1. メモリの効率化 ioutil.ReadAllなどで一旦全て[]byteに変換すると、その分メモリを消費しますし、アロケーションやGCに依る速度低下が起きます。 一方io.Readerやio.Writerは各chunkの処理に同じバイトを使いまわすので、メモリの効率が良いです。 2. 標準パッケージの多くがio.Readerをサポートしてる io.Reader、

    Goでのstreamの扱い方を学ぶ - Carpe Diem
    ryskosn
    ryskosn 2018/01/27
    何でもかんでも ioutil.ReadAll すればいいというものではない、とのこと。なるほど。
  • SPAを S3+CloudFront で表示する方法 - Carpe Diem

    概要 AngularなどのSPAをS3+CloudFrontで表示する方法についてです。 要件 SSL/TLSを使いたい https://example.com/hoge のようなサブディレクトリのようなパスで403にならないようにしたい ↑のようなパスでもOGPがきちんと表示される リロードしても404にならない S3バケットのファイルには直接アクセスできないようにしたい 以前のケースとの比較 過去に S3 + CloudFrontにした時にハマったこと - Carpe Diem Angularで作ったサイトでリロードすると404エラー - Carpe Diem で似たようなケースに対応しました。しかしこれらは先の要件である 3. ↑のようなパスでもOGPがきちんと表示される や 5. S3バケットのファイルには直接アクセスできないようにしたい を満たせていませんでした。今回はそちらを考

    SPAを S3+CloudFront で表示する方法 - Carpe Diem
  • 1