Droonga 1.1.0をリリースしました!
2015-04-29大変長らくお待たせしました。ようやく、待望の機能と共にDroonga 1.1.0をリリースしました!
Droongaとは?
DroongaはGroongaと互換性を持つ分散型の全文検索エンジンです。 Droongaクラスタは、レプリケーション機能を持つGroonga互換のHTTPサーバとして動作します。
どのように動作しどのように利用するのかについては、チュートリアルをご覧下さい。 また、設計について興味がある場合は概要もご覧下さい。
replicaノードの真の意味でのHot-Addが可能になりました!
今回のDroonga 1.1.0のリリースにおける最大の改善点は、replicaノードの完全なHot-Addへの対応です。 この機能はDroongaに必要な基本機能の1つとして長らく認識されていましたが、ようやく実現の運びとなりました。 今や、Droongaクラスタはダウンタイム無しでreplicaノードを追加できるようになりました。 クローリングや新規データの追加を停止する必要はもうありません!
なお、replicaノードのHot-Addを行うためには、追加する新しいreplicaノードを除いて、クラスタ内に2つ以上のreplicaノードが存在している必要があります。 詳細はreplicaノードの追加のチュートリアルを参照して下さい。
改善点の詳細な一覧
- Droonga-engine 1.1.0
- 全般:
- 継続的に流入してくるメッセージがある状況でのgracefulな終了・再起動が正しく動作するようにしました。
- Single stepの定義において、新しいパラメータ
single_operation
を導入しました。 これをtrue
に設定した場合、そのハンドラ用のメッセージは全てのreplicaおよびsliceの中から1つのボリュームにだけ配送されます。 これは、system.status
のようにクラスタ内で1回だけ実行されればそれでよいコマンドを実装するのに役立ちます。 - Single stepの定義において、新しいパラメータ
use_all_replicas
を導入しました。 これをtrue
に設定した場合、そのハンドラ用のメッセージは全てのreplicaに必ず配送されます。 これは、system.statistics.object.count.per-volume
のように全てのreplicaで実行される必要があるコマンドを実装するのに役立ちます。 add
コマンドが、型の一致しないkeyの自動変換に対応しました。 例えば、keyの型がUInt32
と定義されたテーブルであっても、keyを文字列で"1"
と書いたリクエストのままでレコードを追加できます。dump
コマンド:他のテーブルのレコードを参照しているカラムの値を、オブジェクトの形(add
コマンドのパラメータとしては使えない)ではなく、レコードのkey文字列として正しく出力するようにしました。 この結果、参照カラムを含むテーブルをクラスタ間で正しくコピーできるようになりました。dump
コマンド:_key
カラムのみを含むテーブルのレコードも正しく出力するようにしました。dump
コマンド:転送されるメッセージに、それ自身のdate
フィールドを付与するようにしました。Collectors::RecursiveSum
を導入しました。キーの値が数値であるハッシュや数値の配列などについて、値を再帰的に足し算できます。system.status
コマンド:レスポンスの一部として、情報を報告してきたノードの識別子を出力するようにしました。system.statistics.object.count
コマンドを追加しました。これはコマンドラインユーティリティによって内部的に使用されます。system.statistics.object.count.per-volume
コマンドを追加しました。これはreplicaの同値性を確認するのに利用できます。system.absorb-data
コマンドを追加しました。これはコマンドラインユーティリティによって内部的に使用されます。
- メッセージ形式:
targetRole
フィールドを追加しました。 メッセージを処理することのできるEngineノードのロールを明示的にして揺ることができます。 もしメッセージを受信したノードのロールと一致しなかった場合には、可能であれば、適切なノードへ自動的にメッセージが転送されます。timeout
フィールドを追加しました。 リクエストに対するレスポンスをいつまで待つかを秒数で指定できます。
- コマンドラインユーティリティ:
droonga-engine-join
およびdroonga-engine-absorb-data
コマンドがより確実に動作するようになりました。- いくつかのコマンドについて、内部的に行っているSerfの通信内容を監視するための
--verbose
オプションを追加しました。 - 主にデバッグ用として、
droonga-engine-set-role
コマンドを追加しました。
- Groongaとの互換性:
- Groongaの
delete
コマンドとの互換性の向上:- 数値型のキーを持つテーブルに対しても正しく動作するようにしました。 funa1gさんによる報告がきっかけでの改善です。ありがとうございます!
- 型の一致しないkeyの自動変換に対応しました。
例えば、keyの型が
UInt32
と定義されたテーブルであっても、keyを文字列で"1"
と書いたリクエストのままでレコードを削除できます。
- Groongaの
- 全般:
- Droonga-http-server 1.1.2
express-droonga
の要求バージョンを繰り上げました。
- Express-droonga 1.0.9
- Droonga Engine 1.1.0の仕様変更に追従しました。
- uber-cache 2.0.0に対応しました。
- Droonga Engineノードとの接続状況を調査できるように、以下のエンドポイントを追加しました。
/engines
:現在接続されているDroonga Engineノードの一覧を返します。/connections
:Droonga Engineノードとの接続の詳細な内部状態を返します。
- Droongaクラスタの構成に何か変更があった場合に、必ずDroonga Engineノードとの接続を更新するようにしました。
/droonga/*
以下のエンドポイントに対するリクエストのクエリパラメータを、Droonga Engineノードに送るメッセージのbodyとして使うようにしました。
- Drndump 1.0.1
- 実装がモジュール化されました。 他の製品から内部的なライブラリを利用できるようになりました。
- Drntest 1.2.0
- 改善点
- メッセージの補完や妥当性検証を制御するためのディレクティブを追加しました。
#@enable_completion
および#@disable_completion
で、リクエストメッセージの必須フィールドの補完を制御できます(既定の状態では、必須のフィールドは自動的に補完されます)。#@enable_validation
および#@disable_validation
で、リクエストメッセージの妥当性検証を制御できます(既定の状態では妥当性が検証されます)。
dump
のようなサブスクリプション型のコマンド向けに、#@subscribe-until
ディレクティブを追加しました。 当該ディレクティブに続くリクエストによるサブスクリプションについて、指定したタイムアウトで自動的にサブスクリプションを解除できます。例:#@subscribe-until 10s
- エンジンのプロセスが異常停止している場合に、結果のステータスとして
NO RESPONSE
がすぐに返されるようになりました。 - Groongaコマンドのレスポンスとして不正な内容が返されても、エラーにならないようにしました。
- メッセージの補完や妥当性検証を制御するためのディレクティブを追加しました。
- 改善点
- Droonga-client-ruby 0.2.1
- 入力メッセージの必須フィールドについて、既定の状態で自動的に補完するようにしました。
- 入力メッセージについて、既定の状態で自動的に妥当性を検証するようにしました。
- サブスクリプション型のメッセージについて、タイムアウトを指定できるようにしました。
client.subscribe(request, :subscription_timeout => 10)
のように指定すると、指定された秒数が経過した後に自動的にサブスクリプションが解除されます。 - 便利のためにいくつかのユーティリティコマンドを追加しました。
droonga-system-status
:クラスタに対してsystem.status
のリクエストを簡単に送れます。droonga-add
:クラスタに対してadd
リクエストでのデータ追加を簡単に行えます。droonga-groonga
:groonga
コマンドと似た要領で動作します。
- droonga-send, droonga-request:
--[no-]completion
オプションを追加しました。 意図的に不完全なメッセージを送りたい場合は、--no-completion
を指定するようにして下さい。--[no-]validation
オプションを追加しました。 意図的に不正なメッセージを送りたい場合は、--no-validation
を指定するようにして下さい。--default-dataset
オプションを追加しました。 このオプションの値は、dataset
フィールドがないメッセージを送ろうとした場合に使われます。--default-target-role
オプションを追加しました。 このオプションの値は、targetRole
フィールドがないメッセージを送ろうとした場合に使われます。date
フィールドを、Droonga Engine内部での物と同じく、マイクロ秒まで含んだ形式(2015-04-08T06:16:20.571303Z
のような)で補完するようにしました。
まとめ
- Droonga 1.1.0をリリースしました!
- ダウンタイム無しでのreplicaノードの追加が、ついに可能になりました。
- Droongaプロジェクトは今後も新バージョンを継続的にリリースしていきます。乞う御期待!
Droongaプロジェクトはユーザや開発者としての皆さんのご協力をお待ちしています! 詳しくはコミュニティのページをご覧下さい。