| ヘクター | |
|---|---|
| 原作者 | ラン・タヴォリー |
| 最終リリース | |
| リポジトリ | github |
| 書かれた | ジャワ |
| タイプ | 列指向DBMS |
| ライセンス | MITライセンス |
| Webサイト | prettyprint |
HectorはApache Cassandraの高水準クライアントAPIです。ギリシャ神話に登場するトロイの戦士ヘクトールにちなんで名付けられ、Cassandra Javaクライアント(Thrift) [ 2 ]の代替としてHectorによってカプセル化されています。[ 3 ]また、Mavenリポジトリへのアクセスも備えています。[ 4 ]
Cassandraは低レベルのThriftプロトコルを搭載しているため、アプリケーション開発者にとってより優れたプロトコルを開発できる可能性がありました。Hectorは、Thriftの欠点を補う高レベルインターフェースとしてRan Tavoryによって開発されました。HectorはMITライセンスに基づいており、設計の変更、使用、修正、分割が可能です。
Hectorの高レベルな特徴は[ 2 ]
| タイプ | コメント |
|---|---|
FAIL_FAST | エラーが発生した場合は失敗します |
ON_FAIL_TRY_ONE_NEXT_AVAILABLE | 諦める前にもう1つのホストを試す |
ON_FAIL_TRY_ALL_AVAILABLE | 諦める前に利用可能なすべてのホストを試す |
HectorはJMXを通じて可用性カウンタと統計を公開します。[ 6 ]
Hectorはインターフェースにおいて2つの負荷分散ポリシーに従いますLoadBalancingPolicy。デフォルトは RoundRobinBalancingPolicyと呼ばれる単純なラウンドロビン分散アルゴリズムです。リクエストLeastActiveBalancingPolicyはアクティブな接続数が最も少ないプールにルーティングされ、クラスター全体での利用率の分散が確保されます。 [ 7 ]
ExhaustedPolicy基盤となるクライアント接続プールの制御方法を決定します。現在、3つのオプションが利用可能です。[ 8 ]
| タイプ | コメント |
|---|---|
WHEN_EXHAUSTED_FAIL | 利用可能なクライアントがなくなった場合、取得は失敗します |
WHEN_EXHAUSTED_GROW | 負荷の増加に応じてプールが自動的に増加します |
WHEN_EXHAUSTED_BLOCK | クライアントが利用可能になるまで取得をブロックする(デフォルト) |
例として、Cassandra 上の単純な分散ハッシュテーブルの実装を示します。
/** * key でキー指定された新しい値を挿入します * @param key 値のキー * @param value 挿入する文字列値 */ public void insert ( final String key , final String value ) throws Exception { execute ( new Command (){ public Void execute ( final Keyspace ks ) throws Exception { ks . insert ( key , createColumnPath ( COLUMN_NAME ), bytes ( value )); return null ; } }); }/** * 文字列値を取得します。 * @return 文字列値。指定されたキーの値が存在しない場合は null になります。 */ public String get ( final String key ) throws Exception { return execute ( new Command (){ public String execute ( final Keyspace ks ) throws Exception { try { return string ( ks . getColumn ( key , createColumnPath ( COLUMN_NAME )). getValue ()); } catch ( NotFoundException e ) { return null ; } } } ); }/** * Cassandra からキーを削除します */ public void delete ( final String key ) throws Exception { execute ( new Command (){ public Void execute ( final Keyspace ks ) throws Exception { ks . remove ( key , createColumnPath ( COLUMN_NAME )); return null ; } }); }はそのままでも素のThriftクライアントを提供していますが、これは悪くありません。しかし、実世界のクライアントに不可欠な多くの機能が欠けています。私はこのギャップを埋めるためにHectorを開発しました。
現在githubでホストされているHectorの高レベルな機能は次のとおりです。
- Cassandra への高レベルオブジェクト指向インターフェース。
- フェイルオーバーのサポート。
- 接続プール。
- JMX サポート。
- Command デザイン パターンをサポートすることで、クライアントはビジネス ロジックに集中でき、必要な処理は Hector に任せることができます。
はThrift APIを完全にカプセル化しているため、開発者は使い慣れた設計パターンを用いてHectorクライアントのみを扱うことができます。既存のユーザーが現在のプロジェクトを移行する場合や、Thriftを使い慣れているユーザーのために、オリジナルのAPIも引き続き利用可能です。
0.7.0のベータリリース以降、RiptanoはHector経由でCassandraの使用に必要な依存関係のMavenリポジトリへのアクセスを提供しています。
に非常にシンプルな負荷分散機能とフェイルオーバー動作の改善を追加しました。HectorはJava Cassandraクライアントです。詳細については、以前の投稿「Hector – a Java Cassandra client」をご覧ください。バージョン0.5.0-6では、簡易負荷分散とフェイルオーバー動作の改善を追加しました。
よりスムーズな操作とパフォーマンス特性の把握を容易にするために、Hectorは可用性カウンターと、オプションでJMX経由でパフォーマンス統計を公開しています。
は、インターフェースを介してプラグ可能な負荷分散機能を提供します
。すぐに使用できる2つの基本実装
(デフォルト)と
。
リクエストをアクティブな接続数が最も少ないプールにルーティングします。これにより、接続数が最も少ないマシンにリクエストが送信されるため、クラスター全体での使用率が適切に分散されます。 は、
単純なラウンドロビン分散アルゴリズムを実装しています。
LoadBalancingPolicyLeastActiveBalancingPolicyRoundRobinBalancingPolicyLeastActiveBalancingPolicyRoundRobinBalancingPolicy
クライアント接続の基盤となるプールの動作は、ExhaustedPolicyによって制御できます。[…]