| ヘクター | |
|---|---|
| 原作者 | ラン・タヴォリー |
| 最終リリース | |
| リポジトリ | 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 ]
- Cassandraの高レベルオブジェクト指向インターフェースです。主にCassandra-java-clientに着想を得ています。APIはKeyspaceインターフェースで定義されています。
- コネクションプーリング。大規模アプリケーションと同様に、DAOでは大量の読み取り/書き込みが一般的に発生します。クライアントがリクエストごとに新しい接続を開くのはコストが高すぎます。そのため、クライアントが十分な速度で動作した場合、利用可能なソケットがすぐに不足する可能性があります。Hectorはコネクションプーリングと、その詳細を管理する優れたフレームワークを提供します。
- フェイルオーバーのサポート:Cassandraは分散データストアであり、ホスト(ノード)がダウンする可能性があります。Hectorには独自のフェイルオーバーポリシーがあります。
| タイプ | コメント |
|---|---|
FAIL_FAST | エラーが発生した場合は失敗します |
ON_FAIL_TRY_ONE_NEXT_AVAILABLE | 諦める前にもう1つのホストを試す |
ON_FAIL_TRY_ALL_AVAILABLE | 諦める前に利用可能なすべてのホストを試す |
- JMXサポート: Hector は、利用可能な接続数、アイドル接続、エラー統計など、多くの重要なランタイム メトリックに対して JMX を公開します。
- 負荷分散: 新しいバージョンではシンプルな負荷分散が存在します。[ 5 ]
- コマンド設計パターンをサポートしているため、クライアントはビジネス ロジックに集中でき、必要な処理は Hector に任せることができます。
可用性メトリック
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 ; } }); }参考文献
- ^ 「リリース · hector-client/Hector」 . GitHub .
- ^ a b Ran Tavory. 「Hector – Java Cassandraクライアント」 . PrettyPrint.me.オリジナルから2010年11月26日にアーカイブ。2011年3月23日閲覧。Cassanra
はそのままでも素のThriftクライアントを提供していますが、これは悪くありません。しかし、実世界のクライアントに不可欠な多くの機能が欠けています。私はこのギャップを埋めるためにHectorを開発しました。
現在githubでホストされているHectorの高レベルな機能は次のとおりです。
- Cassandra への高レベルオブジェクト指向インターフェース。
- フェイルオーバーのサポート。
- 接続プール。
- JMX サポート。
- Command デザイン パターンをサポートすることで、クライアントはビジネス ロジックに集中でき、必要な処理は Hector に任せることができます。
- ^ 「Apache Cassandra用Hectorクライアント:Thrift APIのカプセル化」(PDF) . DataStax . 2011年4月12日閲覧。Hector
はThrift APIを完全にカプセル化しているため、開発者は使い慣れた設計パターンを用いてHectorクライアントのみを扱うことができます。既存のユーザーが現在のプロジェクトを移行する場合や、Thriftを使い慣れているユーザーのために、オリジナルのAPIも引き続き利用可能です。
- ^ 「Apache Cassandra用Hectorクライアント:完全Maven化」(PDF) . DataStax . 2011年4月12日閲覧。Cassandra
0.7.0のベータリリース以降、RiptanoはHector経由でCassandraの使用に必要な依存関係のMavenリポジトリへのアクセスを提供しています。
- ^ Ran Tavory. 「Hectorにおける負荷分散とフェイルオーバーの改善」 . PrettyPrint.me.オリジナルから2011年4月26日にアーカイブ。2011年3月23日閲覧。Hector
に非常にシンプルな負荷分散機能とフェイルオーバー動作の改善を追加しました。HectorはJava Cassandraクライアントです。詳細については、以前の投稿「Hector – a Java Cassandra client」をご覧ください。バージョン0.5.0-6では、簡易負荷分散とフェイルオーバー動作の改善を追加しました。
- ^ 「Hector Client for Apache Cassandra: メトリクスの可用性」(PDF) . DataStax . 2011年4月12日閲覧.
よりスムーズな操作とパフォーマンス特性の把握を容易にするために、Hectorは可用性カウンターと、オプションでJMX経由でパフォーマンス統計を公開しています。
- ^ 「Apache Cassandra用Hectorクライアント:基本的な負荷分散」(PDF)。DataStax 。 2011年4月12日閲覧。Hector
は、インターフェースを介してプラグ可能な負荷分散機能を提供します
。すぐに使用できる2つの基本実装
(デフォルト)と
。
リクエストをアクティブな接続数が最も少ないプールにルーティングします。これにより、接続数が最も少ないマシンにリクエストが送信されるため、クラスター全体での使用率が適切に分散されます。 は、
単純なラウンドロビン分散アルゴリズムを実装しています。
LoadBalancingPolicyLeastActiveBalancingPolicyRoundRobinBalancingPolicyLeastActiveBalancingPolicyRoundRobinBalancingPolicy - ^ 「Apache Cassandra用Hectorクライアント:プールの設定」(PDF) . DataStax . 2011年4月12日閲覧。
クライアント接続の基盤となるプールの動作は、ExhaustedPolicyによって制御できます。[…]