BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース GigaSpaces XAP 7.1 EA:弾力的なミドルウェア、データクエリそしてSpring 3.x

GigaSpaces XAP 7.1 EA:弾力的なミドルウェア、データクエリそしてSpring 3.x

原文(投稿日:2010/03/20)へのリンク

GigaSpaces XAP は、分散アプリケーションサーバで、インメモリでデータグリッド(data grid)を持っている。 GigaSpaces は、商用のクラスタ化された JavaSpaces の実装として始まり、後に、ローカルキャッシング、追い出し(エヴィクション)そしてクエリのサポートのようなインメモリのデータグリッド機能を含むように拡張された。更に、 GigaSpacesは、エンタプライズアプリケーションのスケーラビリティと小さな待ち時間に対する、より広い解決策として、 Space based architecture(SBA) を導入した。このSBAのコアには、データストレージやメッセージングのようなミドルウェアの機能をまとめた、拡張され、そして軽量の Springコンテナが配置されている。このコンテナは、後で、グリッド中の他のマシンにコピーされ、リニアなスケーラビリティを提供する。最近のバージョンでは、ユーザー・エクスペリエンス と分散アプリケーション管理の単純化が、焦点になっている。

XAP 7.1のリリースは、いくつものテーマを含んでいる:

弾力的なミドルウェアサービス

ミドルウェアサービスは、 Amazon EC2互換のミドルウェアサービスを提供し、デプロイと使用法を簡素化することを狙っている。このテーマの最初のマイルストーンは、弾力的なデータグリッド機能を含む。

古い、低レベルの設定(すなわち、ホストバインディング、IPアドレス、そしてデータグリッド パーティションの数)は、いくつかの高レベルな詳細とデータグリッドの初期と最大の能力の定義に替わる。この新しい弾力的なミドルウェアサービスで、システムは、利用できるハードウェアリソースを確認するか、必要なリソースをセットアップする(仮想化された環境の場合)、そしてプリセットされた設定でデータグリッドをスタートする。そのAPIは、以下のようになる:

elasticServiceManager.deploy(new ElasticDataGridDeployment("mygrid")
                                        .isolationLevel(IsolationLevel.DEDICATED)
                                        .highlyAvailable(true)
                                        .elasticity("2GB", "6GB")
                                        .jvmSize("512MB")
                                        .addSla(new MemorySla(70)));

自動化された設定により、スケーラビリティと耐障害性 が透過的になる。ノード間の負荷分散、システムによる、故障したデータグリッド パーテションの回復、そして一定のメモリスレッショルドを超えたときに、デプロイされたマシン間でのデータ移動によって、このことが実現されている。

仮想化互換性

新しいリリースは、 VMWare, GoGridそして RackSpaceのような、いくつもの仮想化プラットフォームでテストされ、互換性がある。近い将来、 TerremarkCitrix Xen 加えることが計画されている。

データクエリ

データグリッドへのクエリ機能が、いくつか改善されて、パス式を使って、ネストされたオブジェクトのフィールドへのクエリがサポートされた:

SQLQuery query = new SQLQuery(Person.class, "address.street.number = 1");

新しいアノテーションのセットを使って、spaceクエリのインデックス化は、親クラスからコントロールされる:

@SpaceClass
public class Person
{
    private String lastName;
    private String firstName;
    private Integer age;

    ...
    @SpaceIndex(type=IndexType.BASIC)
    public String getFirstName() {return firstName;}
    public void setFirstName(String firstName) {this.firstName = firstName;}

    @SpaceIndex(type=IndexType.BASIC)
    public String getLastName() {return lastName;}
    public void setLastName(String name) {this.lastName = name;}

    @SpaceIndex(type=IndexType.EXTENDED)
    public String getAge() {return age;}
    public void setAge(String age) {this.age = age;}
}

管理アプリケーション

管理ツールの新しいwebインタフェースが、このバージョンで導入され、 GWT/AJAX ベースのダッシュボードに、全クラスタとその実行コンポーネントのリアルタイムな集計データがグラフと表で表示される(figure 1)。既存の管理GUIは、前の7.0で導入され、スレッドのスナップショット機能そして登録されてた全JVMを集約して、ログを監視する機能が追加された。スレッドのダンプ機能もAPI経由で利用できる。

Figure 1: web管理ダッシュボード

内蔵の Spring 3.0

このXAP 7.1サーバは、 Spring 3.0を内蔵していて、 Spring 2.5以前のバージョンへの後方互換性をサポートしている。しかし、デプロイ前に新しい Spring 3ディストリビューションでアプリケーションを再コンパイルすることが推奨されている。

パフォーマンスの改善

このバージョンでのパフォーマンスの改善には:

  • コンカレント インデックススキャンのメカニズムは、できるだけ 競合フリー であるように書き換えられた
  • 複雑なクエリの場合は、SQLクエリのマルチスレッドなコンカレント処理が有効となる
  • データ構造の変更とより新しい同期モジュール(すなわち java.util.concurrent)によってトランザクション処理時間が改善された

スケールアウトの手順

既存のアプリケーションが XAP 7.1のフレームワークを使うために、アプリケーションが取り組む問題領域に依存した 段階的な方法 がある。その手順を明確にすると:

  • Web層: 動的な負荷バランスのためにXAPを使って標準的なWARファイルをデプロイする
  • メッセージング/イベント: メッセージングのために既存の Message Driven Beans をXAPイベント・リスナーで置き換える
  • リモーティング: POJOにアノテーションを加えるか Spring XML設定を使って、リモート・インボケーションと非同期リモーティングを統合する
  • データアクセス (基本): GigaSpaces XAPを統合する最初のレベルは、 Hibernateの第2レベルのキャッシュとして使う。この目的は、ほとんどリードの場合に、著しいパフォーマンス向上を提供することである
  • データアクセス(上級): データモデル構造を分割して、DAOを直接XAPのインメモリ データグリッドへのアクセスに変換して、リードとライトのパフォーマンスが改善される
  • トランザクション: Springベースのアプリケーションは、移行処置が要らない。他のアプリケーションは、Springトランザクションフレームワークを使うことが推奨されている

XAP 7.1の早期リリース版が ドキュメントとダウンロードで入手できる。

この記事に星をつける

おすすめ度
スタイル

BT