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"と書いたリクエストのままでレコードを削除できます。
  • 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-groongagroongaコマンドと似た要領で動作します。
    • 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プロジェクトはユーザや開発者としての皆さんのご協力をお待ちしています! 詳しくはコミュニティのページをご覧下さい。