MessagePack 0.3.0 リリース!

バイナリシリアライズ形式MessagePackのバージョン0.3.0をリリースしました。C API が大幅に充実、ストリームデシリアライザとメモリゾーンの効率化など。MessagePackのプロジェクトページができました:http://msgpack.sourceforge.jp/ シリアライズフォー…

memcachedプロトコルを使った非同期通知サーバー

アプリケーションA:keyXをgetする アプリケーションA:getが待たされる アプリケーションB:keyXにvalueXをセットする アプリケーションA:getが帰り、valueXを取得できる このように非同期に通知する機構をmemcachedプロトコルを使って汎用的に利用するこ…

memcachedプロトコルを使ったBlockingQueue

マルチスレッドプログラミングでよく使うBlockingQueueをmemcachedプロトコルを使ってネットワーク越しに使うことができるサーバーを実装してみました。 タスクをガンガンpushしていく一方で、ワーカースレッドならぬワーカーサーバーが1つずつpopして処理し…

Safari 4 より bash 4 が気になる

bash-4.0がリリースされたので早速試す。 $ sudo port sync $ sudo port deactivate readline $ sudo port install bash $ bash NEWS CHANGES autocd ディレクトリ名を入力だけでcdする。 $ shopt -s autocd $ / cd / cdspell cdするときディレクトリ名をよ…

Ruby Rev + MessagePack による分散プログラム

ネットワークプログラミングで面倒なのが、通信相手にバイト列しか送れないためプロトコルをシリアライズ方法から考えないといけないかったり、複数のクライアントに対応しようとするとスレッドやらイベント駆動やらを考えないといけないところで、なかなか…

Key Value Store勉強会に行ってきました by kumofsのひと

※分散Key-Valueストア「kumofs」を公開しました! 先日開催されたKey Value Store勉強会に行ってきました。私の発表資料は↓ここからダウンロードできます。 kvs-kumofs.pdf 合わせて読むと理解が深まるかもしれない: スマートな分散で快適キャッシュライフ …

ブラウザから1クリックでアプリケーションを起動する - Java Web Start 〜 JavaFX

festivoice.netはブラウザから1クリックで専用のクライアントソフトウェアが起動して、簡単に音声チャットが始められます。この1クリックでアプリケーションを起動する仕組み - Java Web StartはJavaに標準で搭載されているので、大抵の環境でインストールす…

音声チャットをはじめよう! - festivoice.net オープン

気軽に多人数の音声チャットが始められるサービスfestivoice.net(フェスティボイス)をオープンしました! festivoice.net festivoice.netの始め方 festivoiceはfestival(祭)とvoice(声)を組み合わせた造語です。ユーザー登録が不要で、誰でも簡単に始…

マルチコア時代の高並列性IOアーキテクチャ Wavy

シングルスレッドではもう遅い。以前にマルチコア時代の高速サーバーの実装で、「ネットワークIOはマルチスレッドで動かすが、その他の部分はシングルスレッドで動かす」というIOアーキテクチャの実装(mp::iothreads)を紹介しました。iothreadsはロジック…

高速ログフォーマットと簡単な解析機能の実装

先日の高速ログフォーマットの提案を実際に実装してみました。 ログを MessagePack でシリアライズしてバイナリ形式で出力することで、生のバイト列をBase64などでエンコードしなくてもログに書き出せるようにし、また高速に解析できるようにしようというア…

高速ログフォーマットの提案

バイナリ形式のログフォーマットが必要になったので(テキストだと生バイト列を出力できなくて困る。Base64はイヤ)、どうせならオレオレフォーマットではなく一般的に使えるフォーマットだといいなーと思いメモ。 最初の発想 改良1:定義ファイル(静的型付…

MessagePack for C#

バイナリシリアライズ形式「MessagePack」がC#に移植されました! MessagePack C# 実装を作ってみた SUtils/Serialization 1.1.0 にて MessagePack, JSON 両方に対応してみた saiya++++++。 これでC、C++、Ruby、そしてC#の間で、相互に高速なオブジェクトの…

MessagePack 0.2.2 リリース - Rubyゼロコピー化, mswin32版

バイナリシリアライズ形式「MessagePack」のバージョン0.2.2をリリースしました。Ruby版で文字列をデシリアライズするとき、必ずしもコピーしなくなりました。文字列のデシリアライズが大幅に高速化しています。 また mswin32 版と mingw 版の ruby で Messa…

MessagePack 0.2.1 リリース

バイナリシリアライズ形式「MessagePack」のバージョン0.2.1をリリースしました。 Ruby:x86_64アーキテクチャでINT_MAXより大きいFixnumをシリアライズできなかったバグを修正 C++:msgpack::type::tuple がリファレンスをメンバに持つことができるようにな…

memcachedバイナリプロトコルは同期プロトコルを禁止するべき

現状のmemcachedのバイナリプロトコルのクライアント(=libmemcached)は、リクエストの順番通りにレスポンスが返ってくることを期待しており、これはmemcachedバイナリプロトコルを「汎用的なkey-valueベースの分散ストレージのためのプロトコル」として考…

Protocol Buffersは遅い

Google の Protocol Buffers は、同技術と競合するバイナリシリアライズ形式である MessagePack と比べて、場合によっては 19倍 以上遅く、シリアライズ後のデータサイズは 7倍 以上になることがあります。平均的に見ると MessagePack の方が高速であり、高…

MessagePack 0.2.0 リリース!

バイナリシリアライズ形式 MessagePack の2回目のリリースです。 フォーマットの仕様はそのままで、C++用のAPIを大幅に強化しました。詳しくは:サンプルコード msgpack-0.2.0.tar.gz MessagePackとは MessagePackは効率を重視したデータ交換用のフォーマッ…

mmap+POSIXセマフォによる高速なプロセス間通信 - mp::ipc_vector

同じホストの異なるプロセスの間で、高速な通信を行いたいときがあります:fork() したプロセスと通信したい場合や、「アプリケーションたくさん → localhostのクライアントデーモン1つ → サーバー」という形で接続したい*1 *2 場合などなど。 あるいは共有…

スレッド間通信のオーバーヘッドを比較する

pthread_系の関数は mutex か cond しか待てないが、select/poll/epoll はファイルディスクリプタしか待てないので、両方待ちたいときに困る。解決方法はいろいろあると思いますが、私の思いつく範囲では以下の4つ。 selectで待ち、シグナルで割り込む ファ…

同期プロトコルと非同期プロトコル

今のところチラシの裏的な話。 ネットワークプロトコルは、 リクエストした順番通りにレスポンスを返す(リクエストの順番とレスポンスの順番が同期している) リクエストした順番通りにレスポンスが返ってくるとは限らない(リクエストの順番とレスポンスの…

memstoredの実装詳細 1000行に収まる高速サーバーについて

1000行はテキトーなハッタリだが良くあること ;-) memstored の本体は memstored.cc ファイル1つに収まっており、その行数は600行程度しかない。memstored のポイントは、少ない行数で高速なサーバーをカンタンに書けたことであった。memstored の実装につ…

memstored 0.1 = memcached + mpio + Tokyo Cabinet

memstored は memcached のバイナリプロトコルをサポートしたハッシュストレージサーバーです。IO戦略ライブラリmpio の信頼性と性能をテストするために開発しました。IOに mp::iothreads を使用し、バックエンドには Tokyo Cabinet の抽象データベースAPIを…

MessagePack C++ API Document (β)

バイナリシリアライズ形式「MessagePack」を活発に開発中です。C++版のAPIについてサンプルコードを交えつつ紹介してみます。※2009-03-01:この内容はもう古いです。最新のドキュメントを参照してください:http://msgpack.sourceforge.jp/ インストール方法…

memcached binary protocol

先日memcached Night in Tokyo #1に参加してきました。レプリケーションがアツイ。バイナリプロトコルがアツイ。というわけでバイナリプロトコルのマイクロベンチマークをしてみました。 テストしたのは本家memcachedではなく、私が勝手に作ったストリームパ…

mp::iothreads

マルチコア時代の高速サーバーの実装で紹介したアーキテクチャを実装しようとすると、アーキテクチャ自体はマルチスレッドなので、ロックだ、メモリ管理だと、いろいろと面倒です。一般化できるなら一般化して、ロジック部分だけを書けば高速なサーバーが実…

MessagePack for C++ template版

※2009-03-01追記:ここの内容はもう古いです。最新のドキュメントを参照してください:http://msgpack.sourceforge.jp/cpp:doc 先日MessagePack for C++を紹介したのですが、やはり動的型とC++は合わないことが分かったので、動的型を使う方針はやめました。…

マルチコア時代の高速サーバーの実装

特にサーバー用途では、CPUがシングルコアに戻ってくることは考えにくい。マルチコアCPUの性能を活かすにはマルチスレッドに対応したサーバーの実装が必要になるわけですが、マルチスレッドなプログラミングは往々にして「高負荷になると固まる」とか「たま…

MessagePack for C++

この記事はもう古いです。「MessagePack for C++ template版」を見てください。 バイナリシリアライズ形式「MessagePack」のC++版APIを開発しています。 Thriftなどのコードジェネレータを利用して静的なクラスを生成するものとは差別化を図り、IDLを記述し…

memcachedプロトコルのストリームパーサ

memcachedクライアントはほとんどの言語で実装されており、key-valueベースの何かを作るときにはmemcacheプロトコルをサポートしておくと、クライアントを実装する手間が省けるのでイケてます。しかしmemcachedのテキストプロトコルのような「行」が主体とな…

バイナリシリアライズ形式「MessagePack」

Googleが公開したバイナリエンコード手法であるProtocol Buffersは、クライアントとサーバーの両方でシリアライズ形式を取り決めておき(IDL)、双方がそれに従ってデータをやりとりするようにします。 この方法では高速なデータのやりとりができる反面、IDL…