Kawanet Blog II

アクセスカウンタ

zoom RSS tdserver - バイナリプロトコルに対応(HTTP)

<<   作成日時 : 2009/05/06 05:25   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

Tokyo Dystopia の HTTP インターフェースとして開発中の tdserver は ttserver とは異なり
HTTP サーバ専用で、その他のプロトコルには対応していません。

HTTP では、ヘッダ処理やクエリのパースにかかるオーバヘッドがありますが、
全文検索処理には 60〜700ミリ秒程度かかる ので、専用プロトコルよりも、
ウェブブラウザをクライアントとして使えたり、キャッシュや mod_proxy_balancer など
既存の豊富なツール群が使える HTTP 流用のメリットのほうが大きいと思われます。
専用プロトコルだと、クライアントも書かないとテストすらできないし。
 
とはいえ、サーバ間で数万件規模の検索結果をやりとりする場合は、
検索結果の ID を , カンマ区切りのテキストで返却する形式は生成・パースの
負荷が大きすぎるので、バイナリ形式でも返却する機能を追加しました。
 
検索クエリに format=binary をつけると、int64_t の配列で返します。
ヒットした ID 番号がそれぞれ 64 ビットのバイナリデータとなります。

http://localhost:1977/?q=hello&format=binary&filename=result.bin

例えば 50万件ヒットした場合の容量は、50万件×8バイト=4MB になります。
filename= で、ウェブブラウザで接続した場合にダウンロードされるファイル名を指定できます。
format=binary をつけない場合のデフォルトは、カンマ区切りテキストです。
今後、メタデータとかに対応したら format=xml や json もあると便利になりそう。

なお、タイトルの『バイナリプロトコル』は、釣りです。_o_

単に検索結果の HTTP レスポンスボディをバイナリにも対応しただけで、
実際のところはリクエストはテキスト(むしろ URI エンコード)ですし、
レスポンスの HTTP ヘッダも通常通りのテキストです。
そのため、keep-alive もちゃんと効きます。

tdserver のインストール手順はこちら

(余談)
こうした1つ1つはシンプルな機能の HTTP サーバを並べていって、
それらを組み合わせることで1つの高度なシステムを作り上げるのは面白そう。
ttserver・tdserver ともに、サーバプロセス1つにつき1つのデータセットにしか
アクセスできないけど、何か切り替えの仕組み(ディスパッチャ)を入れるよりは、
ポートとデータが1:1対応する方がシンプルなので、分かりやすいか。
アクセス制限は、ポート単位で行う。それより細かい制限はできない。
ただ、アプリ側が同時に複数のデータセット(複数サーバ)にアクセスしていくと、
その分、サーバ全体での TCP/IP の同時コネクション数も膨大になりそう。
C10K 問題(クライアント1万接続)でなくて、S10K 問題(サーバ1万接続)みたいな。:)
 

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
tdserver - バイナリプロトコルに対応(HTTP) Kawanet Blog II/BIGLOBEウェブリブログ
文字サイズ:       閉じる