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

  • 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
  • GoでGraceful Shutdown - Carpe Diem

    概要 以前はGraceful shutdownをするために以下のようなライブラリを使用していました。 github.com しかしながらGo 1.8 からGraceful Shutdown機能が標準で提供されるようになりました。 今回はその導入方法を紹介します。 環境 golang 1.10.3 これまでの問題 例えば以下のような重い処理がHandlerにあるとします。 簡単のためsleepで実装しています。 func hello(w http.ResponseWriter, r *http.Request) { log.Println("heavy process starts") time.Sleep(5 * time.Second) log.Println("done") w.Header().Set("Content-Type", "text/plain") w.Write([]b

    GoでGraceful Shutdown - Carpe Diem
  • ECS Fargateがプロダクションではまだ使えない理由 - Carpe Diem

    概要 ECS Fargateがリリースされてから検証・導入を進めています。 インスタンスの管理をする必要がなくなり非常にメリットを感じている一方、番環境で使う上で注意すべき点もあるのでそこをまとめます。 環境 Fargateプラットフォーム 1.2.0 問題点 dev, stg環境で検証してみて、現状感じている問題点を挙げていきます。 同一タスク内のコンテナの起動順序を制御できない 通常のECSではTask Definitionにあるlinks機能によって起動順序をある程度制御できます。 例えば コンテナA links コンテナB だとすると、コンテナBの方を先に起動してくれます。 しかしFargateではlinks機能がそもそもないので、こういった起動順序を制御することができません。 例えばConsul agentを先に起動してアプリケーションサーバはそのConsulから別のマイクロサ

    ECS Fargateがプロダクションではまだ使えない理由 - Carpe Diem
    khigashigashi
    khigashigashi 2018/10/10
    「同一タスク内のコンテナの起動順序を制御できない」なるほど、graceful shutdownは確かにやっとかないとな〜
  • 1