[Coherence, WLS] Using Weblogic Server ActiveCache for Coherence

Webアプリケーションを構築・再構築する際に、キャッシュ機構を追加して、データアクセスのボトルネックの解消をはかり、スケーラビリティと性能を向上させることがよくあります。WebLogic Server(以下、WLS)にはJavaサーブレットコンテキスト、JPAのコンテキスト(Toplink Grid)、そしてHTTPセッションコンテキスト(Coherence*Web)における、Coherenceキャッシュとの統合を提供する機能を持っており、総じてActiveCacheと呼んでいます。

ActiveCache
http://download.oracle.com/docs/cd/E21764_01/web.1111/e16517/cases.htm

この記事では、最初のJava Servletコンテキストの部分を取り上げ、WLSでシームレスにデータキャッシュ層を利用するための方法(J2EE Webアプリケーションのパッケージング、デプロイ、管理)についてお伝えしたいと思います。

アーキテクチャ
WLS 10.3.4+には、ノードマネージャ(プロセス監視・管理サービス)があり、これを利用してWLS以外の、例えばCoherenceのようなコンポーネントを管理できます。WLS管理コンソールには追加の管理ページ(http://{ホスト名}:{ポート番号、通常は7001}/console)があり、ここでCoherenceクラスタを構成することができます(環境>Coherenceクラスタ)。


 そして、Coherenceクラスタノードの構成画面はこちら。([環境]>[Coherenceサーバー])



WLS管理コンソールから、クラスタを構成したり、全てのクラスタノードを立ち上げたり停止したりできます。
この例では、サーブレットと全てのCoherenceキャッシュノードが同じCoherenceクラスタにありますが、サーブレットはデータを持っていません。つまりストレージ属性が無効になっています。これは、サーブレットがデプロイ/アンデプロイされても、サーブレットがデータを保持しないので、キャッシュデータをクラスタノード間で移動させる必要がないことを意味します。このトポロジは以下のようになっています。

In-cluster topology
[注意]上図はHTTPセッションデータをCoherenceにキャッシュする仕組みを示していますが、このトポロジーはWebアプリケーションのデータをキャッシュする場合と同じです。

Setup
以下のような前提条件のもとでセットアップを進めます。
  • WLS 10.3.5 がインストール済みであること。
  • Java JDK 1.6+ がインストール済みであること。
  • ドメインが構成されていること。今回はドメイン名をbase_domainとする
  • Coherence 3.7+ for Java がインストール済みであること。これは単にzipファイルを解凍するだけでよい
  • Eclipse Indigo IDE (3.7.0) がインストール済みであること(オプション)
同じアプリケーションをデプロイする環境をセットアップする手順は以下の通りです。
  1. ノードマネージャ を構成し、Coherenceクラスタノードの起動・停止を可能にする
    この手順はWLSに詳しい読者にとっては当然なのですが、完全を期すため、Macで必要だった手順をまとめました。
    1) まず、WLSの起動に使う環境編集を設定します。
    export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home
    # Dir where WLS installed to
    export MW_HOME=/Users/Dave/apps/wls1035_dev/
    export USER_MEM_ARGS="-Xmx1024m -XX:PermSize=1024m"
    2) ノードマネージャのパラメータを $MW_HOME/wlserver/common/nodemanager/nodemanager.properties に設置します。簡単のため、ネイティブライブラリ(これはプラットフォームに依存します)やSSLを使わないようにしました。
    NativeVersionEnabled=false
    PropertiesVersion=10.3
    ListenAddress=localhost
    SecureListener=false
    DomainRegistrationEnabled=true
    3) アプリケーションデプロイ先として、WLSのドメインを $MW_HOME/wlserver/common/nodemanager/nodemanager.domain プロパティファイルに追加しました。
    base_domain=/Users/Dave/apps/mywls/user_projects/domains/base_domain
    4) 最後に、ノードマネージャを立ち上げました(ノードマネージャはドメインではなく、マシンと関連付けられています)。
    cd $MW_HOME/wlserver/server/bin
    ./startNodeManager.sh
  2. WLS管理コンソールを使う新しいマシンの定義を構成する
    次に、ノードマネージャをCoherenceクラスタの立ち上げに使えるようにするため、マシンの定義をします。上述の通り、ノードマネージャはドメインではなくサーバに関連づけられており、マシンは1個以上のWLSインスタンス(サーバ)をホストするコンピュータの論理的な表現です。
    マシンを構成するために、[環境]>[マシン]でWLS管理コンソールのマシン画面に移動し、[新規]ボタンを押して以下の値を入力します。

    (画面1)
    名前: MyMachine - あなたのマシン名
    マシンのOS: その他 - Mac OSX用のネイティブライブラリを使わないので、ここでは指定しない


    (画面2)
    タイプ: プレーン - 追加のセキュリティ構成をしないようにします。
    [注意]他のパラメータはデフォルトのままにしています。


    ノードマネージャをデフォルト値のパラメータで立ち上げたら、特に追加の設定は必要ありません。マシンの監視ページでノードマネージャを監視できることを確認しましょう。



    もし状態が取得できない場合は、ノードマネージャの出力を確認して下さい。コンソールから起動している場合は、ノードマネージャのログファイル($MW_HOME/wlserver/common/nodemanager/nodemanager.log)を参照しましょう。

  3. Coherenceクラスタを構成し、起動する
    Webアプリケーションのデータをキャッシュするために使うCoherenceクラスタを立ち上げるためには、Coherenceクラスタを構成し、Coherenceサーバを立ち上げる定義をする必要があります。

    Oracle Fusion Middleware Oracle WebLogic Server Administration Console Online Help
    Create Coherence clusters
    http://download.oracle.com/docs/cd/E21764_01/apirefs.1111/e13952/taskhelp/coherence/CreateCoherenceClusters.html
    Create Coherence servers
    http://download.oracle.com/docs/cd/E21764_01/apirefs.1111/e13952/taskhelp/coherence/CreateCoherenceServers.html

    Coherenceクラスタを構成するために、[環境]>[Coherenceクラスタ]と辿って、Coherenceクラスタ定義画面に移動します。ここで使用した設定値は以下の通りです。

    名前: MyCluster - 別の環境と衝突しないような名前にしています。
    カスタム・クラスタ構成ファイルの使用: チェック
    <activecache-example.zip>/WLSCohWebAppEAR/EarContent/APP-INF/classes/tangosol-coherence-override.xml がクラスタ用の Coherence operational override file です(キャッシュ構成ファイルではありません)。

    次に、Coherenceクラスタサーバーを構成します。[環境]>[Coherenceサーバー]を辿って設定画面へ移動します。今回使用した構成パラメータは以下の通りです。

    名前(任意): CacheServer1
    マシン(作成したマシン名): MyMachine
    クラスタ(作成したクラスタ名): MyCluster
    ユニキャスト・リスニング・ポート: 9999
    デフォルトの8888は他のクラスタで使われている可能性がありますので、別のクラスタに参加しないようにしておきます。

    その他の構成パラメータはデフォルトのままにしています。
    サーバーの起動構成は以下のパラメータを使用しました。

    Java ホーム: /Library/Java/Home
    Java ベンダー: Apple
    BEAホーム(WLSのインストールディレクトリ): /Users/Dave/apps/wls1035_dev/wlserver
    ルートディレクトリ(ドメインのベースディレクトリ): /Users/Dave/apps/mywls/user_projects/domains/base_domain
    クラスパス:
    /Users/Dave/apps/wls1035_dev/modules/features/weblogic.server.modules.coherence.server_10.3.4.1.jar:/Users/Dave/coherence/3.7/coherence-java/coherence/lib/coherence.jar
    これらのJarファイルの順序が重要です。正しい区切り文字(:)を使って下さい。
    引数:
    -Xms1024m -Xmx1024m -Dtangosol.coherence.cacheconfig=/Users/Dave/Documents/workspace/WLSCohWebAppEAR/EarContent/APP-INF/classes/coherence-cache-config.xml -Dtangosol.coherence.distributed.localstorage=true -Dtangosol.coherence.role=CacheServer
    JVMへの引数はCoherenceキャッシュサーバーを起動するためのものです。

    [注意]Coherenceオーバーライドファイルの最後のパラメータでは、デフォルトストレージ設定がfalseに指定されています。そのため、ストレージ属性を明示的に有効にする必要があります。これは、WLSの起動スクリプトでこのプロパティを設定しなければ、TestServletのシステムプロパティを使って、ストレージ有効化のデフォルト設定を上書きすることができないためです。

    なお、上記パスは皆様の読者の環境に適宜合わせて下さい。
    Coherenceサーバを追加する場合、Coherenceサーバ管理ページにてCoherenceサーバを複製し、新しい(複製した)Coherenceサーバーの名前を変更すると簡単です。

    Coherence クラスタはCoherenceサーバーページから起動します([環境]>[Coherenceサーバー])。このページの[制御]タブで、全てのCoherenceサーバーを選択し、[起動]ボタンをクリックします。

     
  4. CoherenceとActiveCacheの共有ライブラリを展開する
    CoherenceとActiveCacheのJARファイルをデプロイする場合、WLSのクラスパスに追加する方法、Webアプリケーションの共有ライブラリとしてデプロイするなど、色々な方法があります。今回はJARファイルは共有ライブラリとしてデプロイして、(ライブラリをインポートするアプリケーションだけがスコープ内に共有ライブラリを持つように)利用を分離し、オーバーヘッドを最小限(クラスの1個のコピーのみがロードされるように)にしました。共有ライブラリはWLS管理コンソールからデプロイできます([環境]>[デプロイメント])。

    Deploy WLS Shared Libraty

  5. Coherenceキャッシュを使うWebアプリケーションをパッケージ、デプロイする
    WARファイルもしくはEARファイルで実施するのですが、今回はEARファイルを使います。やり方としては、WLSの自動デプロイディレクトリにEARファイルを配置する、管理コンソールを使う、 Weblogic Scripting Tool(WLST)を使う、(WLSTを使う)EclipseのようなIDEを使う、などがあります。今回は、OEPEプラグインが提供するウィザードを使うことにしました。
    Deploy EAR to WLS from Eclipse
    EAR Webアプリケーションプロジェクト(依存関係のあるプロジェクトも)をインポートするだけで、Coherenceのライブラリパスを更新して、デプロイ対象のWLSにデプロイできます。
サンプルWebアプリケーションのテスト
TestServletサンプルWebアプリケーションのURLは、
http://<your hostname>:7001/WLSCohWebApp/TestServlet
です。このアプリケーションは、Coherenceクラスタメンバーを表示し、MyCacheというキャッシュにエントリを追加します(キーはHTTPセッションIDで、値はHTTPセッションの最終変更値)。
Web app output
この出力から、アクティブセッションを持つクライアントの個数と、クラスタのメンバー個数がわかります。全てのキャッシュデータはこのサーブレットを実行したクライアントから見えるので、参照データやドロップダウンリストの値などの頻繁に変更されないアプリケーションデータにとっては理想的な保管場所になるかと思います。
 
サンプルアプリケーションについて
ActiveCacheの機能を使うと、キャッシュの参照をリソースとして構成することができます。TestServletでは、アノテーション @Resource を使って動的にNamedCache "MyCache" への参照を注入しています。

OracleR Fusion Middleware Using ActiveCache
Access the Data Cache from your Application
http://download.oracle.com/docs/cd/E21764_01/web.1111/e16517/coh_wls.htm#FEDEJAAI
mycache resource ref

Coherenceキャッシュのリファレンス(NamedCache)リソースは、JNDIルックアップから検索できます。サーブレットが参照する共有ライブラリを weblogic-application.xml ファイルで指定できます。

Shared libs config

CoherenceクラスタはJMXから監視することができます。クラスタのメトリックを見るためには、テストマシンのJConsoleを開き、weblogic.server.nodemanager... プロセスの一つを開きます(Coherence管理サーバーを起動して、リモートアクセス可能にすることもできます )。ノードツリーを開いたら、以下のようなメトリックを確認できるはずです。

JConsole view

明示的な起動と停止の操作のために、サーブレットのリスナークラスが登録されており、アプリケーションがアンデプロイされるとWebアプリケーションをシャットダウンします。

このエントリをご覧になった方々が、WLSのActiveCacheの機能を使えば、Webアプリケーションで頻繁に利用するデータへ高速にアクセスできることがわかってもらえると幸甚です。キャッシュを「サイドキャッシュ」(データを明示的にキャッシュに追加している)として使っていますが、データベースやその他のデータソースから必要なデータをキャッシュにオンデマンドで載せるように構成することも簡単です。その他のオプションはここでは検討していませんが、WLSTを使ってクラスタの設定と立ち上げを実行するスクリプトを作成することにも一考の価値があると思います。

サンプルアプリケーションはこちらからダウンロードできます。

関連資料

原文はこちら。
http://blogs.oracle.com/felcey/entry/using_weblogic_server_activecache_for

0 件のコメント:

コメントを投稿