Daijiro MORI
null+****@clear*****
Thu Nov 14 21:24:15 JST 2013
Daijiro MORI 2013-11-14 21:24:15 +0900 (Thu, 14 Nov 2013) New Revision: ff273678445f1561d5fd9f786b496bcd56aaa05d https://github.com/droonga/droonga.org/commit/ff273678445f1561d5fd9f786b496bcd56aaa05d Message: Refine overview. Modified files: ja/overview/index.md Modified: ja/overview/index.md (+26 -31) =================================================================== --- ja/overview/index.md 2013-11-14 16:56:14 +0900 (f633fc6) +++ ja/overview/index.md 2013-11-14 21:24:15 +0900 (df9c209) @@ -21,7 +21,7 @@ Droongaは分散型のデータ処理エンジンです。以下の機能を持 ### レプリケーション&パーティショニング Droongaでは複数のサーバが一つのクラスタを構成し、全体として巨大なデータ集合を管理します。 -複数のサーバ間でデータをn重に保存したり、巨大なデータ集合を複数の部分に分割して管理することができます。 +複数のサーバでデータの複製を保存したり、巨大なデータ集合を複数の部分に分割して管理することができます。 ### マルチテナンシー @@ -33,7 +33,7 @@ Droongaは以下のような方針に基づいて設計されています。 ### ストリーム指向 -Droongaエンジン内では、全ての通信は一方向に流れるデータストリームとなります。検索・更新・集計などの処理の多くは、ストリームを入出力とする機能ブロックがパイプラインを構成することで実現されます。 +Droonga Engine内では、全ての通信は一方向に流れるデータストリームとなります。検索・更新・集計などの処理の多くは、ストリームを入出力とする機能ブロックがパイプラインを構成することで実現されます。 この構成によって、より高いスループット性能、より低いレイテンシ性能を追究することが可能となっています。 ### リアルタイム指向 @@ -46,7 +46,7 @@ Droongaエンジン内では、全ての通信は一方向に流れるデータ ### 高可用性 -すべてのエンジンノードに同等の機能を持たせることによって、障害発生時にノード可用性を維持できるようにしています。複数のノードにレプリケーションを持たせることによってデータの永続性を高めています。レプリケーション間の整合性が一時的に損なわれることは許容するものとし、結果整合性の実現を目指します。 +すべてのDroonga Engineプロセスに同等の機能を持たせることによって、障害発生時にプロセス単位での可用性を維持できるようにしています。複数のサーバにレプリケーションを持たせることによってデータの永続性を高めています。レプリケーション間の整合性が一時的に損なわれることは許容するものとし、結果整合性の実現を目指します。 ### 拡張性 @@ -78,41 +78,36 @@ Droongaクラスタは一つ以上のDroonga Engineプロセスで構成され ### 発効日時 +そのカタログの情報が有効となることが期待される日時を示します。 + ### ゾーン -ホスト資源とそのトポロジー +クラスタ内に存在する全てのDroonga Engineプロセスと、それらの近接関係を示します。 ### ファーム -ホスト毎のディスク資源 +一つのDroonga Engineプロセスで管理することのできるパーティションの量を示します。 -### データセット +### データ集合 -* 操作単位となる複数のテーブルの組 -* ハッシュ値&世代によってパーティション化 -* データセット/テーブル毎にレプリケーション数を設定 +データ集合は、整合性をもって管理することが期待されるテーブルの組です。 +一つのDroongaクラスタの中には複数のデータ集合を格納することができます。 +それぞれのデータ集合は、クラスタの中で一意な名前を持たなければなりません。 +一つのデータ集合は、複数の部分(パーティション)に分割されます。また、それぞれのパーティションの複製(レプリカ)が作られます。いずれもクラスタの中に分散して格納されます。 +個々のレコードの値から求められるハッシュ値、およびその更新された日時が、パーティション化のキーとなります。 +レコードの値からハッシュ値を計算する関数は、そのレコードが属するテーブル毎に定義します。 +ひとつのデータ集合を構成する一連のパーティションをリングと呼びます。 ## Droonga Engineの処理 -* 分散処理のための通信は全てfluentdを利用 -* データもクエリも全てJSON(msgpack)で表現 -* 全ての処理はメッセージパッシングで実現 -* 通信パタン(同期・非同期・自律)はAPで選択 -* 通常の検索処理はmap/reduceで実現 -* 複数のタスクとその依存関係をjsonで定義 -* バッチ処理や複雑な分析処理も自由に記述 -* プランナが適宜(可能なタスクは並列に)実行 - -## プラグイン - -* 4種類のプラグイン -* adapterプラグイン - 入出力メッセージを加工 - アプリケーションとDroonga間の形式変換 -* distributerプラグイン - map/broadcast/scatter等の通信処理をカスタマイズ -* collectorプラグイン - reduce/gather等の通信処理をカスタマイズ -* handlerプラグイン - 検索・更新処理の実体を記述 - 自律メッセージ送出,cache/view更新,ログ集計等々.. +クラスタを構成する個々のDroonga Engineでの処理について説明します。 + +Droonga Engineは、Fluentdのoutput pluginとして動作します。 +任意のinput plugin経由で受信するデータストリームをDroongaに対する入力として扱うことができます。Droonga Engineが受信したデータは、tag名などに応じて、Adapterと呼ばれるモジュールに渡されます。Adapterは、個々のJSONデータを、Droongaの内部処理モジュールが受理できる形式に変換します。また、Droonga Engineとの通信を行うための特別な形式を満たすJSONデータを特にEnvelopeと呼んでいます。Envelope形式に適合するJSONデータは、Droonga Engineに対する処理要求やその処理結果などをより直接的に表現しています。 +Adapterを経て加工されたJSONデータは、Plannerと呼ばれるモジュールに渡されます。Plannerは、JSONデータをクラスタ内のどのEngineプロセスに転送し、その結果をさらにまたどのEngineプロセスで処理するかといった計画を立て、その実行計画情報をJSONデータに付け加えます。 +Plannerの出力は、Distributerというモジュールに引き渡され、クラスタ内のEngineプロセスに配送されます。 +JSONデータは、データ集合のパーティションを管理するHandlerというモジュールに届けられ、ここでデータストアに対する処理を加えます。必要に応じて処理結果をデータとして出力したり、他のJSONデータをemitしたりします。 +複数のパーティションで実行された結果を集約する場合には、Collectorというモジュールにデータが集められ、ここで集計や並べ替えなどの処理にかけられます。 +最終的な処理結果をDroonga Engineの外部に出力する際には、再度Adapterモジュールを通過し、出力を受け取る外部プログラムが処理しやすい形式にデータを整形します。 +上記のモジュールのうち、Adapter, Distributer, Handler, Collectorについては、Rubyスクリプトで記述するpluginによって、自由に処理をカスタマイズすることができます。 + -------------- next part -------------- HTML����������������������������...Download