Dinio は memcached プロトコルに対応したキー・バリュー型データストアである Nesta/IO に分散データストアの機能を提供するサーバー製品です。
複数のデータストア(Nesta/IO)をノード(実態はプロセスです)として管理することで大量のデータを扱う事が可能になります。 Dinio は論理的に 1,000台までのデータストアを管理することが可能です。
分散データストア Dinio は以下の特徴を備えています。
データストアの追加や削除はシステムを停止することなく行うことができます。
また、データストアの追加や削除が行われた時点で自動的にノード間でデータの再配分が行われます。このデータの再配分を行っているときは、対象となるデータストアが分散ロックメカニズムによって一時的にロックされますのでデータの一貫性が保たれます。
Dinio はデータの複製を作成するレプリケーション機能を備えています。
レプリケーション機能を用いることでどこかのデータストアが障害を起こしても複製を持つデータストアから目的のデータを取り扱うことが可能になります。標準の設定では3カ所のデータストアにデータを書き込みます。このことでバックアップを必要としないデータベースを実現しています。
レプリケーションはキューイングされてバックエンドのスレッドで実行されるため、メインスレッドの性能に影響を与えない設計になっています。コンフィグレーションによってはデータの更新と同期してレプリケーションを行う設定も可能です。
Dinio はマスタサーバーを必要としないため単一障害点が存在しません。
一つの Dinio を複数のアプリケーションから共有する事も可能です。また、アプリケーションごとに専用の Dinio を用意することでパフォーマンスが向上します。
データストアの情報は複数の Dinio 間で共有しています。データストアの追加や削除などが発生した場合はデータストアの情報が Dinio 間で瞬時に通知されます。
データストアの情報を共有する Dinio のサーバー情報はコンフィグレーションファイルの dinio.friend_file で定義します。
クライアントからのインターフェイスは memcached プロトコルになります。
プログラムは C言語で記述されているので Linux, Mac OS/X および Windows で動作します。
Dinio と Nesta/IO のインターフェイスも memcached プロトコルです。 ただし、レプリケーションやノード間でのデータの再配分を効率よく処理するために独自のコマンドを拡張しています。
ライセンスは MIT License になります。
nestalib: nestalib-0.9.4.tar.gzUNIX 系 OS 上では以下のようにインストールします。
nestalib をインストールした後に Nesta/IO と Dinio をインストールします。
Nesta/IO とDinio を同じコンピュータにインストールする場合はどちらかのポート番号を変更する必要があります。Nesta/IO と Dinio のポート番号はデフォルトで 11211 になっています。
1. nestalib のインストール
デフォルトではライブラリが /usr/local/lib にヘッダーファイルが /usr/local/include/nestalib にインストールされます。
$ tar zxvf nestalib-0.9.4.tar.gz $ cd nestalib-0.9.4 $ ./configure $ make $ sudo make install
2. Nesta/IO のインストール
$ tar zxvf nestaio-0.3.1.tar.gz $ cd nestaio-0.3.1 $ ./configure $ make
3. Dinio のインストール
$ tar zxvf dinio-0.3.1.tar.gz $ cd dinio-0.3.1 $ ./configure $ make
Windows では展開したディレクトリに Visual Studio C++ 2008 Express(無償版) のプロジェクトファイルがあるのでそれをお使いください。
【起動方法】
$ cd nestaio-0.3.1 $ ./nestaio [-start] [-f conf.file]
【終了方法】
$ ./nestaio -stop [-f conf.file]
【起動方法】
$ cd dinio-0.3.1 $ ./dinio [-start] [-f conf.file]
【終了方法】
$ ./dinio -stop [-f conf.file]
【その他の起動パラメータ】
以下のコマンドは Dinio を起動したコンピュータでしか実行できません。
$ ./dinio -status [-f conf.file]
$ ./dinio -add IPアドレス [ポート番号(11211) [スケールファクタ(100)]] [-f conf.file]
$ ./dinio -remove IPアドレス [ポート番号(11211)] [-f conf.file]
$ ./dinio -unlock IPアドレス [ポート番号(11211)] [-f conf.file]
$ ./dinio -hash キー値 [キー値 ...] [-f conf.file]
$ ./dinio -import ファイル名 [-f conf.file]
コンフィグレーションは Dinio を展開したディレクトリの conf/dinio.conf を修正します。
conf/dinio.conf の修正を反映させるにはプログラムを再起動する必要があります。
|
Dinio のベンチマークを参考値として掲載しておきます。
ベンチマークプログラムには mcb を利用させていただきました。
ローカルホストに4つのデータストアを起動してレプリケーション数は標準の 2 で計測しました。書き込まれたデータは2箇所のデータストアに複製されます。
$ ./dinio $ ./dinio -status start 2011/01/21 09:42:45 running 4 datastore servers. Status IP------------- PORT #NODE #CONN #set------ #get------ #del------ [OK ] 127.0.0.1 11221 100 10 0 0 0 [OK ] 127.0.0.1 11222 100 10 0 0 0 [OK ] 127.0.0.1 11223 100 10 0 0 0 [OK ] 127.0.0.1 11224 100 10 0 0 0
【評価マシン】
MacBook Pro (CPU:Intel Core 2 Duo 2.26GHz, Memory:2GB)
Mac OS X 10.6 Snow Leopard (64-bit kernel)
【ベンチマーク内容】
・set:同時接続 100 でランダムなキーを生成し、データ長が約1,000バイトの set コマンドを1接続当たり 1,000回繰り返す。
・get:同時接続 100 でランダムなキーを生成し、get コマンドを1接続当たり 1,000回繰り返す。
|
Author: YAMAMOTO Naoki
Last modified: 2011/02/11