Daijiro MORI
null+****@clear*****
Thu Nov 14 15:34:36 JST 2013
Daijiro MORI 2013-11-14 15:34:36 +0900 (Thu, 14 Nov 2013) New Revision: 9f1f09550f7680c8578503f3fb0fe9e37c962f97 https://github.com/droonga/droonga.org/commit/9f1f09550f7680c8578503f3fb0fe9e37c962f97 Message: Put a draft of overview. Added files: ja/overview/index.md Added: ja/overview/index.md (+111 -0) 100644 =================================================================== --- /dev/null +++ ja/overview/index.md 2013-11-14 15:34:36 +0900 (441aa81) @@ -0,0 +1,111 @@ +--- +title: Droonga 概要 +layout: documents +--- + +* TOC +{:toc} + +## Droongaとは何か + +Droongaは分散型のデータ処理エンジンです。以下の機能を持っています。 + +### カラム指向データストア + +データをカラムの集合として永続的に管理するデータストアとして機能します。 + +### 全文検索 + +転置索引方式による本格的な全文検索機能を持っています。またカラムの値によって絞り込みや集計を行うクエリや、緯度経度の位置情報による検索なども可能です。 + +### レプリケーション&パーティショニング + +Droongaでは複数のサーバが一つのクラスタを構成し、全体として巨大なデータ集合を管理します。 +複数のサーバ間でデータをn重に保存したり、巨大なデータ集合を複数の部分に分割して管理することができます。 + +### マルチテナンシー + +一つのクラスタでは複数の独立なデータ集合を管理することができます。 + +## 設計方針 + +Droongaは以下のような方針に基づいて設計されています。 + +### ストリーム指向 + +Droongaエンジン内では、全ての通信は一方向に流れるデータストリームとなります。検索・更新・集計などの処理の多くは、ストリームを入出力とする機能ブロックがパイプラインを構成することで実現されます。 +この構成によって、より高いスループット性能、より低いレイテンシ性能を追究することが可能となっています。 + +### リアルタイム指向 + +ここでいう「リアルタイム」とは、ある情報が発生してから、それを必要とするユーザに対して、いかに短い遅延時間で届けることができるか、という性質を指します。 +リアルタイム性能は様々な要素が複合的に絡み合って実現されますが、Groongaではこれに寄与する二つの要素を採り入れています。 + +* 転置索引の即時更新性能に優れる全文検索ライブラリGroongaを採用しています。 +* 前述のストリーム指向の構成を採っています。 + +### 高可用性 + +すべてのエンジンノードに同等の機能を持たせることによって、障害発生時にノード可用性を維持できるようにしています。複数のノードにレプリケーションを持たせることによってデータの永続性を高めています。レプリケーション間の整合性が一時的に損なわれることは許容するものとし、結果整合性の実現を目指します。 + +### 拡張性 + +Rubyスクリプトによって記述するプラグインによって自由に機能を拡張することができます。 + +## ソフトウェア構成 + +Droongaは大きく二つのコンポーネントで構成されます。 + +### Droonga Engine + +分散データ処理の要となるコンポーネントです。実際にデータを管理・処理します。 +Droonga Engineは、Fluentdのplugin(fluent-plugin-droonga)として実装されています。 +Droonga Engineへの入出力インタフェースにはFluentdで使用できるあらゆるpluginがそのまま適用できます。 +Droonga Engineのクラスタ内部の通信にはMessagePack data stream(Fluent protocol)が使用されます。 + +### Protocol Adapter + +Protocol Adapterは、WebアプリケーションからDroongaを利用しやすくするために、DroongaにHTTPおよびSocket.IOインタフェースを追加するコンポーネントです。 +Protocol Adapterは、Node.js用のWebプラットフォームExpressのplugin(express-droonga)として実装されています。 +Protocol Adapterを使用することにより、検索クエリをHTTPリクエストとして送信し、検索結果をそのレスポンスとして受け取るC/S型のサービスが利用できるようになります。また、Socket.IOの特質を生かしたpub/sub型のサービスも利用することができます。 + +## 分散 + +* カタログ +* 複数のホストに跨がって単一のDBを構築 +* 各ホストでは一つ以上のfluentdを動かす +* システムカタログを全てのホストで共有する +* クライアントはどのfluentdに接続してもよい + (同じ結果が返される) +* ハッシュ値&世代によってパーティション化 +* データセット毎にレプリケーション数を設定 +* 1クラスタ内に以下の要素を任意数定義 +* ゾーン: ホスト資源とそのトポロジー +* ファーム: ホスト毎のディスク資源 +* データセット:操作単位となる複数のテーブルの組 +* 上記より動的に資源を割り当ててDBを維持 + +## 通信 + +* 分散処理のための通信は全てfluentdを利用 +* データもクエリも全てJSON(msgpack)で表現 +* 全ての処理はメッセージパッシングで実現 +* 通信パタン(同期・非同期・自律)はAPで選択 +* 通常の検索処理はmap/reduceで実現 +* 複数のタスクとその依存関係をjsonで定義 +* バッチ処理や複雑な分析処理も自由に記述 +* プランナが適宜(可能なタスクは並列に)実行 + +## プラグイン + +* 4種類のプラグイン +* adapterプラグイン + 入出力メッセージを加工 + アプリケーションとDroonga間の形式変換 +* distributerプラグイン + map/broadcast/scatter等の通信処理をカスタマイズ +* collectorプラグイン + reduce/gather等の通信処理をカスタマイズ +* handlerプラグイン + 検索・更新処理の実体を記述 + 自律メッセージ送出,cache/view更新,ログ集計等々.. -------------- next part -------------- HTML����������������������������...Download