タグ

ブックマーク / blog.restartr.com (5)

  • Goの通信経路選択(net.LookupIP & net.Dial) · I Will Survive

    August 29, 2016 - golang ※2016-09-05追記: 記事の対策では不備があるためRe: Goの通信経路選択(net.LookupIP & net.Dial)に続編書きました。 GoのHTTP通信経路選択の挙動について腑に落ちない点があり、net.LookupIP/net.Dialの仕様とそれに伴い生じる接続経路の選択問題、そしてその対策について調べてみました。 TL;DR unix環境におけるGoの名前解決まわりの仕様 net.LookupIPはDNSから取得できたアドレスリストをそのまま返すわけではない 内部ネットワーク間の接続であれば接続元と接続先がビット列的に近いものを優先したアドレスリストを返す net.Dialはnet.LookupIPがかえすアドレスリストの先頭から接続を試みる その後、最初に接続が成功したものとのみ通信を行う DNSラウンドロビン

    Goの通信経路選択(net.LookupIP & net.Dial) · I Will Survive
  • Elixir/PhoenixでISUCON5予選の参考実装を書いた · I Will Survive

    スコア計算式をもとに計算してみると以下のようなスコアとなります(eror, exception, violationsはないので減点は無し) # Elixir/Phoenix irb(main):001:0> base_score = 239 + 93 * 0.1 => 248.3 # Go irb(main):002:0> base_score = 98 + 39 * 0.1 => 101.9 同じクエリを再現したうえで、だいたい2.5倍くらいの性能差?でしょうか。 が、完全に模倣できているか自信はないのであくまで参考程度ということで… 以下にベンチマーカーの出力内容も貼っておきます。 elixir/phoenix版の結果 { "valid" : true, "requests" : 333, "elapsed" : 76093, "done" : "[{Isucon5InitExecu

  • Goのjson.Marshal/Unmarshalの仕様を整理してみる · I Will Survive

    August 13, 2014 - golang TL;DR goの構造体につけるタグは、フォーマットが不正だと読み込まれない(当然) json.Marshalは、構造体のjsonタグがあればその値をキーとしてJSON文字列を生成する json.Unmarshalは、構造体のjsonタグがあればその値を対応するフィールドにマッピングする jsonタグがなければ、完全一致もしくはcase-insensitiveなフィールドにマッピングする では、ひとつづつ確認していきます。 goの構造体につけるタグは、フォーマットが不正だと読み込まれない(当然) goの構造体にはタグの機能があって、型の後に特定のフォーマットでアノテーションが記述できます type MyType struct { Hoge string `foo:"1" bar:"2"` } key:"value"をスペース区切りで複数かけ

  • Dockerを使って任意のrubyバージョンのrpmを作成する · I Will Survive

    May 11, 2014 - docker CentOSを使ってて不便なのがruby2系のインストール。 rbenvやruby-buildを使うかソースからインストールするのですが、この場合、環境を構築するたびにビルドすることになり時間もかかるし大変面倒です。 なのでDockerを使ってクリーンな環境でRubyの最新rpmをビルドしてみました。 Dockerを使えばビルド環境がすぐに立ち上げられるので、rpmビルドに必要なパッケージを確認したりするのに最適です。 今回のソースはgithubにpushしてあります。 ReSTARTR/ruby-rpmbuild-container 環境 ゲストOS:Vagrantで起動したUbuntu-14.04 コンテナ:centos:6.4 ファイルの配置 以下ファイルを同一ディレクトリに入れておきます。 Vagrantfile provision.sh

  • Docker謹製ライブラリのlibchanについて調べてみた - I Will Survive

    June 28, 2014 - golang DockerCon2014で発表されたlibchanについて調べたことをまとめてみます。 libchanはlibcontainerやlibswarmと共に発表されました。 libswarmはDockerを中心にしたエコシステムにおけるベンダーロックインを回避するためのソリューションであり、libcontainerはDocker 0.9リリースドキュメント日語訳: Execution driversとlibcontainer導入 - Happy New Worldを参照するのがよいでしょう。 では、libchanとは何なのでしょうか。 READMEにはlike Go channels over the networkとあります。ネットワーク上のgo channel?よくかりませんね。。。 README.mdとPROTOCOL.md、いくつかのテ

  • 1