タグ

ネットワークに関するhitsujibaneのブックマーク (73)

  • HTTPプロトコルパーサのオーバーヘッドは18%以下という話 - kazuhoのメモ置き場

    「テキストプロトコルは遅くないよ」という話 - kazuhoのメモ置き場に関するの具体的な話。 Kazuho@Cybozu Labs: 「サーバ書くなら epoll 使うべき」は、今でも正しいのかを書く際に自作したベンチマークツールがあるのですが、それを使ったベンチマーク結果をid:tokuhiromがhttp://d.hatena.ne.jp/tokuhirom/20091001/1254355956にまとめてくれている*1。それについて、ちょっと補足と実測値を。 まず、コメントにも書いたんだけど、サーバのスループットを測る際にはTCP接続を多重化する必要があるので、-a 100 -n 100 -f *2のようなオプションでベンチマークをとってください。あと、ローカルホスト上での測定か、ホスト間での測定か、によっても当然結果は変わる。 自分の環境 (linux 2.6.18-028sta

    HTTPプロトコルパーサのオーバーヘッドは18%以下という話 - kazuhoのメモ置き場
  • Geekなぺーじ : 大変革が迫りつつあるインターネット

    IPv4アドレス枯渇が迫りつつあります。 現状では、再来年ぐらいに枯渇する事が予想されています。 このIPv4アドレス枯渇は、恐らくインターネットアーキテクチャに対して非常に大きな影響を与えます。 今、この瞬間にあるインターネットインフラと、3年後のインターネットインフラは結構違う形をしているのではないかと推測しています。 以下、何故IPv4アドレス枯渇がインターネットアーキテクチャの大変革をもたらすのかと、この問題の背景を説明したいと思います。 2つに分離するインターネット インターネットは戦時中の物資が少ない状況においても通信網が維持出来る事を想定して設計されています。 そのため、専用機器だけではなく、ありあわせの機器を繋ぎ合わせて通信が実現できることが重要な要素でした。 また、電話のような回線交換方式ではなく、パケット交換方式を採用して様々な種類の通信を同時に行える事も設計の柱でした

  • Twitter の半径数クリック以内の情報収集 - IT戦記

    ちょっと 現実頭皮的に自己満足的プログラムを書きたくなったので Twitter のクローラーを書いてみた。 C++ にしては、割とすっきり書けて満足。 使ったライブラリ soci データベースライブラリ picojson json パーサー boost.asio ネットワークライブラリ boost.date_time 日付時刻ライブラリ ソース #include <cassert> #include <soci.h> #include <soci-sqlite3.h> #include <unistd.h> #include <iostream> #include <sstream> #include <picojson.h> #include <boost/scoped_ptr.hpp> #include <boost/asio.hpp> #include <boost/cast.hpp

    Twitter の半径数クリック以内の情報収集 - IT戦記
  • RPC サーバの遅延リターン - steps to phantasien(2009-07-04)

    最近は過労気味でウェブにものを書くこともできない, という話で上司の同情を誘うべく 日人の労働時間やストレスの実態をまとめた エンドレス・ワーカーズ を読んだら, 自分の労働時間は日人労働者の上位 2 割から漏れていることを知り愕然とした. あんなに働いたってのに...残業エリートへの道は険しい. 道を進みたいわけじゃないけれど. (平均は越えてたぜ!) いずれにせよ流行からはすっかり脱落しているので, 時流を無視して仕事の話でもしよう. 以前, 会社の blog で RPC の結果をノンブロッキングスタイルで受け取るプリミティブ "弱関数" を提案した. でも試行錯誤の結果, いまは使っていない. C++ での弱参照は意図しないリークを作りやすい. 使いわすれることも多く, 忘れた頃にクラッシュする. 要求は明示的にキャンセルした方がいいことがわかった. (世間はみんなそうやってます

  • ネットワークプログラムのI/O戦略 - sdyuki-devel

    図解求む。 以下「プロトコル処理」と「メッセージ処理」を分けて扱っているが、この差が顕著に出るのは全文検索エンジンや非同期ジョブサーバーなど、小さなメッセージで重い処理をするタイプ。ストリーム指向のプロトコルの場合は「プロトコル処理」を「ストリーム処理」に置き換えるといいかもしれない。 シングルスレッド・イベント駆動 コネクションN:スレッド1。epoll/kqueue/select を1つ使ってイベントループを作る。 マルチコアCPUでスケールしないので、サーバーでは今時このモデルは流行らない。 クライアントで非同期なメッセージングをやりたい場合はこのモデルを使える: サーバーにメッセージを送信 イベントハンドラを登録;このときイベントハンドラのポインタを取っておく イベントハンドラ->フラグ がONになるまでイベントループを回す イベントハンドラ->結果 を返す 1コネクション1スレッ

    ネットワークプログラムのI/O戦略 - sdyuki-devel
  • 100行のCプログラムでWebチャットを実装する方法 - mixi engineer blog

    例の冷却ファンを修理してもらいに秋葉原に行ったのですが、最近の同人ゲームのクオリティはすごいなあと感心していたら、その二階はもっととんでもないことになってて、ひとつ大人になってしまったmikioです。今回は、Tokyo Cabinetのテンプレート直列化機能を駆使して、たった100行のCプログラムでWebチャットシステムを実装してみます。 古式ゆかしいWebチャットシステム 10年くらい前にCGIスクリプトでチャットシステムを作るのが流行していたのを覚えている方も多いと思います。チャットログは現在のようにデータベースサーバに転送して格納するのではなく、ローカルファイルシステム上のファイルにCSVやTSVなどのフォーマットで格納したり、同じくローカルのDBMファイルに格納するのが主流でした。2ちゃんねるの「datファイル」もそのようなデータファイルの一種と言えるでしょう。 その頃から、CGI

    100行のCプログラムでWebチャットを実装する方法 - mixi engineer blog
  • High-Performance Networking Programming in C | Linux Journal

    TCP/IP network programming in C on Linux is good fun. All the advanced features of the stack are at your disposal, and you can do lot of interesting things in user space without getting into kernel programming. Performance enhancement is as much an art as it is a science. It is an iterative process, akin to an artist gingerly stroking a painting with a fine brush, looking at the work from multiple

  • HTTP/1.1 (DELETE, GET, HEAD, PUT, POST) : Alan Dean

    Diagram An activity diagram to describe the resolution of HTTP response status codes, given various headers. The diagram is available in various formats: http-headers-status.gif (205 kb) http-headers-status.jpg (340 kb) http-headers-status.png (447 kb) http-headers-status.svg (315 kb) please see request for assistance below The Visio diagram, published on Google Code Request for assistance

  • Is there a beginner's book for C++ socket programming? - Stack Overflow

  • はやいTCPサーバの書き方 - nyaxtのPC作業ログ

    cagra高速化にあたってのノウハウを一部公開してみます。また明日校正/更新します。つっこみ待ちです。 select(2)の代わりにepoll_wait(2), kqueue, /dev/epoll等を使う 他に山ほど解説ページがあるので略 大量のディスクリプタを処理するようなサーバの場合、多少効果があるかもしれません。しかし、クライアント数が少ない場合、劇的な性能の向上は見込めないとおもいます。クライアント数が多い場合は、1セッション1スレッドなモデルではOS側のタスクスイッチングのオーバーヘッドが効いてくることも多いです。クライアント数を増やすには複数のセッションを1スレッドで処理できるようにすると良いです。実装にあたっては、non-blocking ioを活用すると効果的です。 TCP_NODELAYを設定する Nagleアルゴリズムをオフにします。多少応答性が良くなります。 これっ

    はやいTCPサーバの書き方 - nyaxtのPC作業ログ
  • 日々是横着 - 「サーバ」に対する誤った認識

    最近、常時接続というのが当り前になり、自宅サーバを立てることを 勧めるような書籍や Web ページが非常に多く出てきているので、 自分でもサーバを立ててみたいと思っている人を多く見受けます。 しかし、サーバを立てる際に気をつけるべきことを全く認識せずに 立てようとしている例も非常に多く見受けられます。 ここは、インターネットに公開するサーバを立てる際に一般の方が 勘違いしがちなこととそれに対する(私の個人的な)回答を、 世の中に溢れる「自宅サーバ立てよう!」系の書籍/Web ページには あまり書かれない 「自分でサーバを立てるのは大変だからやめよう!」 という視点で行い、 サーバ運営の現実をしっかり認識して頂くための ページです。 対象とする読者は基的に 「サーバを自分で立てようと思っている人全員」で す。特に 「あまりコンピュータに詳しいわけじゃないけど、 なんだか自分で立てられるって

  • memcachedバイナリプロトコルは同期プロトコルを禁止するべき - Blog by Sadayuki Furuhashi

    現状のmemcachedのバイナリプロトコルのクライアント(=libmemcached)は、リクエストの順番通りにレスポンスが返ってくることを期待しており、これはmemcachedバイナリプロトコルを「汎用的なkey-valueベースの分散ストレージのためのプロトコル」として考えると、ひどい実装である。 そのような実装は最適化の余地を大幅に制限してしまい、性能とスケーラビリティが悪化する。memcachedの仕様書は、そのようなクライアントの実装はバグであると明示するべきである。 現状のmemcachedクライアントの実装の問題点と、その解決策について述べる。 同期プロトコルと非同期プロトコル ネットワークプロトコルは以下の2つの種類に分けられる: 同期プロトコル リクエストの順番通りにレスポンスを返す(リクエストの順番とレスポンスの順番が同期している) 非同期プロトコル リクエストした順

    memcachedバイナリプロトコルは同期プロトコルを禁止するべき - Blog by Sadayuki Furuhashi
  • 10分でわかるOpenIDの概念と用語集 - livedoor ディレクター Blog(ブログ)

    こんにちは、livedoor AuthやOpenID、EDGEを担当している櫛井です。 皆さんはOpenIDというものをご存じですか?今回は10分でわかるOpenIDの周辺情報をまとめてみたいと思います。 OpenIDとは、1つのIDで色々なサイトにログインできる仕組みのことで、対応サイトに対し、ユーザーの認証IDとしてURLまたはXRIを使用することが出来る分散型の認証システムを指します。最近ではOpenIDを発行しているサイトや、OpenIDでのログインに対応しているサイトも増えてきています。認証の遷移イメージとしてはlivedoor Authの図が参考になるかと思います。 ■用語 ・OP OpenID Provider (オープンID プロバイダ)の略で、OpenIDとして利用できるIDを発行しているサイトやサービスを指します。OPが発行しているOpenIDの数は数千万とも数億ともい

    10分でわかるOpenIDの概念と用語集 - livedoor ディレクター Blog(ブログ)
  • MessagePack 0.2.0 リリース! - Blog by Sadayuki Furuhashi

    バイナリシリアライズ形式 MessagePack の2回目のリリースです。 フォーマットの仕様はそのままで、C++用のAPIを大幅に強化しました。詳しくは:サンプルコード msgpack-0.2.0.tar.gz MessagePackとは MessagePackは効率を重視したデータ交換用のフォーマットで、言うなれば「速いJSON」です。 データ型を持つシリアライズ形式(JSONやYAMLと同じ。整形式XML文章とは異なる) フォーマット定義(IDL)が不要 シリアライズ/デシリアライズがとても高速 シリアライズされたデータのサイズが小さい ストリーム処理できる いまのところ Ruby、C、C++ で使える 作りかけのActionScript版(lp:~frsyuki/msgpack/as3) プロトコルを実装する手間を省ける ネットワークで通信を行うプログラムを書くときは、ぜひ高速なバ

    MessagePack 0.2.0 リリース! - Blog by Sadayuki Furuhashi
  • 例として推奨されているドメイン名とIPアドレス - あどけない話

    解説記事や発表資料で、ドメインの例を出す場合、example.jp等を使うことが推奨されているのを知っている人は多いでしょう。しかし、IPアドレスの方は知らない人もいるみたいです。ここでは両方について出典を示しながらまとめます。 知っていて別の例を使うのはいいのですが、知らないで別の例を使うのはよくないです。 gTLDのドメイン名の例 RFC2606で以下のように定められています。 3. Reserved Example Second Level Domain Names The Internet Assigned Numbers Authority (IANA) also currently has the following second level domain names reserved which can be used as examples. example.com exa

    例として推奨されているドメイン名とIPアドレス - あどけない話
    hitsujibane
    hitsujibane 2008/11/16
    ネットワークに関する文章を書くときに、例としてIPアドレスやドメイン名を出す場合、使うことを推奨されている名前
  • 「はてな流大規模データ処理」を見てきた - もぎゃろぐ

    KOF2008:関西オープンソース2008というイベントに来ています。 はてなの伊藤さんの講演があったので、講演メモを公開。 #ボクがメモした内容であって、100%言ったとおりに書いてあるわけじゃないので、参考としてご覧ください。 (続き) アジェンダ 大規模なデータ OSのキャッシュ MySQLの運用 大規模データアプリケーションの開発 データの例 はてなブックマークのデータ量:五千万件くらいのデータ量 このデータに対して何百万人がアクセスしてくる状況でどういう作りにするか レコード数 1073万エントリー 3134万エントリー 4143万タグ データサイズ エントリー2.5GB 何の工夫もなく普通にアクセスすると...200秒待っても結果が帰ってこない 大規模データの難しいところ 開発サーバで開発者が作っている時は快適に動いていても、多数の人間がアク

  • 複数のテストサーバをリバースプロキシで集約 (3) - daily dayflower

    複数のテストサーバをリバースプロキシで集約 (1) - daily dayflower と 複数のテストサーバをリバースプロキシで集約 (2) - daily dayflower の続きです。 mod_rewrite の RewriteMap を使ってごにょごにょしましたが,なんともまどろっこしかったです。そもそも URI の書き換えに癖のある DSL を使う mod_rewrite を使わなきゃいけないということ自体がアレです。もっと手になじんだプログラミング言語で書ければロジックもすっきりするのに! というわけでモジュールを書いてみました(mod_proxy_mapper.c - daily dayflower)。 プロキシ専用ですが,サブリクエストを使ってプロキシ先を選定するモジュールです。 サブリクエストを使っているので,Apache でサポートしている言語ハンドラ……CGI*1

    複数のテストサーバをリバースプロキシで集約 (3) - daily dayflower
  • HTTP/1.1 の同時接続数について - daily dayflower

    はてなブックマーク - Fasterfoxが最強すぎる件 - 真性引き篭もり が盛り上がってたので,机上の話だけですが,いまさら書いてみます。 RFC (2616) での記述 Clients that use persistent connections SHOULD limit the number of simultaneous connections that they maintain to a given server. A single-user client SHOULD NOT maintain more than 2 connections with any server or proxy. A proxy SHOULD use up to 2*N connections to another server or proxy, where N is the number

    HTTP/1.1 の同時接続数について - daily dayflower
  • mod_proxy を使ってサービスを止めずにサーバ移転 - まちゅダイアリー (2008-10-12)

    mod_proxy を使ってサービスを止めずにサーバ移転 - まちゅダイアリー (2008-10-12)
  • memstored 0.1 = memcached + mpio + Tokyo Cabinet - Blog by Sadayuki Furuhashi

    memstored は memcached のバイナリプロトコルをサポートしたハッシュストレージサーバーです。IO戦略ライブラリmpio の信頼性と性能をテストするために開発しました。 IOに mp::iothreads を使用し、バックエンドには Tokyo Cabinet の抽象データベースAPIを利用しているため、高速でスケーラビリティが高く、かつ柔軟性の高いアーキテクチャになっています。プログラムの大部分はライブラリによって実現されているため、プログラム全体の見通しが良く、行数で見ても非常に小さく収まっています。 SVN (memstored): http://svn.coderepos.org/share/lang/c/memstored/trunk SVN (mpio): http://svn.coderepos.org/share/lang/c/mpio/trunk パッケー

    memstored 0.1 = memcached + mpio + Tokyo Cabinet - Blog by Sadayuki Furuhashi