Oracle Coherenceのエラスティック・データ機能の構成

概要

    目的

    Oracle Coherenceは、インメモリ・データ・グリッドと呼ばれるインメモリ・キャッシュ・ソリューションです。しかし、コア・メモリが依然として不足している場合は、どのような対策があるでしょうか。 Oracle Coherenceは、この問題を解決するためのメカニズムを提供します。このメカニズムでは、ソリッド・ステート・ディスク(SSD)などの高性能2次ストレージを活用しています。

    ソリッド・ステートまたはフラッシュ・ディスクは、可動部品がなく、データの格納にDRAM型またはEEPROM型のメモリに依存している点で、従来型のディスク・メディアとは異なります。 そのため、SSDベースのデバイスは極めて高速で、従来型のメモリに近いかまたは同等の速度で動作します。SSDについて、詳しくはこちらを参照してください。

    Oracle Coherenceでは、SSDおよび同等のデバイスを活用して、速度をほとんどあるいはまったく低下させずにキャッシュ・データのサイズを大幅に拡張できます。 この機能は、Oracle Coherenceのエラスティック・データ機能を通じて提供されます。エラスティック・データ機能によって、キャッシュ用のバックアップ記憶域としてSSDデバイスを指定することが可能となり、使用可能なメモリが大幅に拡張されます。エラスティック・データ機能を使用すると、必要に応じてメモリをSSDデバイスに"スピルオーバー"してメモリ・サイズを増加させ、メモリ使用量が減少したときにコア・メモリに戻すことができます。 このようにして、コア・メモリのサイズは、伸縮性を持つことになります。

    このチュートリアルでは、エラスティック・データ機能の基本的なアーキテクチャ、エラスティック・データ機能に対応するキャッシュを構成する方法、およびオペレーション構成オーバーライドを使用してエラスティック・データ機能の動作を制御する方法について説明します。 チュートリアルでは、多数のスクリプトとシミュレーションJavaクラスを使用して複数のキャッシュ内にデータを生成してそれらのデータとやり取りを行うことで、実際のプログラム・アクティビティをシミュレートします。このシミュレーションの目的は、特定の業務環境を再現することではなく、Coherenceキャッシュとの簡単なやりとりを可能にすることです。

    所要時間

    約45分

    概要

    Oracle Coherenceのエラスティック・データ機能を使用するには、キャッシュレベルとオペレーションレベルの両方での構成の他に、SSDデバイスの構成が必要です。 また、さまざまなオプション構成もサポートされています。

    シナリオ

    Oracle Coherenceのエラスティック・データ機能を構成するには、次の3つが必要となります。

    • ソリッド・ステート・ディスク - ジャーナル・データ用に使用
      エラスティック・データ機能を構成するテストでは任意のディスク・デバイスを使用できますが、本番環境ではSSDデバイスのみを使用する必要があります。SSDではないデバイスにメモリをスピルオーバーするようにエラスティック・データ機能を構成すると、Oracle Coherenceのパフォーマンスに重大な影響を及ぼすことがあります。

    • キャッシュ構成 - フラッシュ・ジャーナルまたはRAMジャーナルの定義を含むバッキング・マップを、スキーム要素の一部分として定義

    • オペレーション構成 - キャッシュをバックアップするフラッシュ・ジャーナルまたはRAMジャーナルの場所およびその他の動作を定義


    エラスティック・データ機能の概要


    ハードウェアとソフトウェアの要件

    ハードウェアとソフトウェアの要件は、次のとおりです。

    • Oracle Coherence 3.7.1 - こちらからダウンロードできます。
    • Coherence ED OBEサンプル・コード - こちらからダウンロードできます。

    前提条件

    このチュートリアルを始める前に、次のことを確認してください。

    • JavaおよびXML構文に関する実用的な知識を有している必要があります。
    • Oracle Coherence 3.7.1が/opt/coherenceに適切にインストールされ、アクセスできる状態となっている必要があります。
    • 前記のリンクを使用してED OBEサンプル・コードをダウンロードし、解凍されている必要があります。
    • Oracle Java JDKバージョン1.6.0_26以降のダウンロードとインストールが完了している必要があります。 Oracle Java JDKキットと関連製品については、こちらを参照してください。
      Javaのインストールは、このOBEの対象外となっています。 詳しくは、JDKのダウンロードとインストールに関するページを参照してください。

    このチュートリアルを始める前に、Oracle Coherence 3.7.1と関連するサンプル・ソース・コードをダウンロードしてインストールしておく必要があります。 以下の手順では、Oracle Coherence 3.7.1のインストール・プロセスおよび適切と考えられるインストールの場所について確認します。 Oracle Coherence 3.7.1のインストールがすでに完了している場合は、この手順を省略できます。

    前記のリンクを使用し、ライセンス契約に同意してOracle Coherence 3.7.1をダウンロードします。 なお、このチュートリアルでは、ファイルのダウンロード先が/tmp/およびインストール先が/optであると仮定しています。

    コマンド・プロンプトを開いて、Oracle Coherenceがインストールされる場所にディレクトリを変更します。

    次のようなコマンドを使用して、Oracle Coherenceのzipファイルの内容を解凍します。

    unzip /tmp/coherence-java-3.7.1...zip

    ファイルの正確な名前は変わることがあるので、注意してください。

    このチュートリアルでは、すべてのファイルを/opt/coherenceに解凍します。


    次のようなコマンドを使用して、OBEサンプル・コードの内容を解凍します。
    unzip /tmp/ED.OBE.src.zip


Oracle Coherenceのエラスティック・データ機能の構成

    Oracle Coherenceのエラスティック・データ機能を構成するには、次のタスクを実行する必要があります。

    1. エラスティック・データ機能が使用するディレクトリを、適切なSSDデバイス上に作成します。 Oracle Coherenceの実行中は、このディレクトリの監視および検証は可能ですが、このディレクトリでファイルを追加または削除することはできません。
    2. RAMジャーナルまたはフラッシュ・ジャーナルに基づいたバッキング・マップ・スキームを使用するように、Coherenceキャッシュを構成します。 バッキング・マップ・スキームは、Coherenceキャッシュがエラスティック・データ機能を使用する方法を定義します。
    3. ファイル・サイズ、ディレクトリ、およびその他の動作特性など、キャッシュがエラスティック・データ機能を使用する方法に関して、エラスティック・データ機能の運用情報を構成します。 これについては、次の項で説明します。
    4. 環境を構成します。 この手順はOBE専用で、スクリプトが正しく実行されるようにすること、およびOBEとCoherenceホーム・ディレクトリの環境変数が正しいことを確認します。
    5. RAMジャーナルの基本機能をテストします。 この手順では、デフォルトの状態でRAMジャーナルをテストして、予想どおりに機能することを確認します。

    データ・ディレクトリの作成

      コマンド・プロンプトを開いて、Elastic Data OBEがインストールされる場所にディレクトリを変更します。
      このチュートリアルでは、データ用として/opt/ED.OBE/dataを使用します。 なお、適切なSSDデバイス上にある任意のディレクトリを使用することもできます。



      このチュートリアルでは/optの下にあるディレクトリが使用されていますが、本番環境では実際のSSDデバイスを使用する必要があることに注意してください。

    RAMジャーナルを使用するためのOracle Coherenceの構成


      ジャーナル機能とは、ジャーナルと呼ばれる一連の変更における状態の変化を記録する技術です。 変更が発生すると、メモリに格納されるツリー構造を使用して、ジャーナル機能は特定のキーの各値を記録し、そのキーの最新値を持つジャーナル・エントリを追跡し続けます。
      エントリの値を検索するには、最新値を持つジャーナル・エントリへのポインタを含むツリー内でキーを検索します。 ジャーナルが変更された結果、そのエントリの値が古くなると、ジャーナルには古い値が蓄積していくので、これらの値は一定の間隔で削除されます。


      エラスティック・データ機能には、緊密に連携して動作するように設計されたRAMジャーナルとフラッシュ・ジャーナルの両方の実装が含まれています。 たとえば、RAMジャーナルでメモリを使い果たした場合、RAMジャーナルからのオーバーフローをフラッシュ・ジャーナルが自動的に受け入れることで、キャッシュをRAMのサイズをはるかに超えるサイズにまで拡張できます。

      エラスティック・データ機能を構成するには、バッキング・マップ・スキームにRAMジャーナル・スキームまたはフラッシュ・ジャーナル・スキームを追加します。 <flashjournal-scheme>要素は、フラッシュ・ジャーナル・マネージャを使用して、データをディスクに書き込む方法を決定します。 <ramjournal-scheme>要素は、フラッシュ・ジャーナルと類似してはいますが、先にメモリに書き込み、メモリを使い果たすとディスクに拡張されます。

      これらのメカニズムのどちらかを使用してエラスティック・データ機能を実装するには、<ramjournal-scheme>要素または<flashjournal-scheme>要素をバッキング・マップ・スキームに追加します。 たとえば、RAMジャーナルを実装する場合は、<ramjournal-scheme>要素を<backing-map-scheme>要素に追加します。 同様に、フラッシュ・ジャーナルを実装する場合は、<flashjournal-scheme>要素を<backing-map-scheme>要素に追加します。  

      次に例を挙げます。

           <distributed-scheme>
             <scheme-name>journaled-scheme</scheme-name>
             <backing-map-scheme>
                 <ramjournal-scheme/>
             </backing-map-scheme>
            
      <autostart>true</autostart>
           </distributed-scheme>
               
      ジャーナル機能を既存の構成に追加するには、次の手順を実行します。

      コマンド・プロンプトを開き、Elastic Data OBEが解凍されたディレクトリに変更します。

      cd /opt/ED.OBE

      任意のエディタを使用して、config/cache-configuration.xmlを開きます。

      gedit config/cache-configuration.xml

      次に示す<distributed-scheme>要素を検索します。

        <distributed-scheme>
           <scheme-name>example-scheme</scheme-name>
           <service-name>DistributedCache</service-name>
           <backing-map-scheme>
               <local-scheme>
                   <scheme-ref>example-binary-backing-map</scheme-ref>
                </local-scheme>
           </backing-map-scheme>
           <autostart>true</autostart>
       </distributed-scheme>

      <backing-map-scheme>要素を検索し、<local-scheme>. . . </local-scheme>要素とそのネストされた内容をすべて削除します。 通常は、スキームを変更するのではなく、既存のスキームをコピーします。

      注: この例では、使用されるスキームは、coherence.jarにパッケージ化されている分散スキームの例に変更を加えたバージョンとなっています。
      <backing-map-scheme>要素の内部に、<ramjournal-scheme>要素を追加します。

      新しい要素は、次のようになります。
      <backing-map-scheme/>
          <ramjournal-scheme/>
      </backing-map-scheme>


      変更が完了した要素は、次のようになります。
        <distributed-scheme>
          <scheme-name>example-scheme</scheme-name>
          <backing-map-scheme>
              <ramjournal-scheme/>
          </backing-map-scheme>
         
      <autostart>true</autostart>
        </distributed-scheme>

      変更を保存して、エディタを終了します。

    環境の構成

      エラスティック・データ機能のテストを簡素化するために、さまざまなスクリプトが提供されています。 これらのスクリプトは、特定の環境変数の設定に依存しています。
      これらの変数には適切なデフォルト値が設定されているので、それらの値が正しければ変更する必要はありません。

      スクリプトでは、次のことが前提条件となっています。
      • Oracle Coherenceが、/opt/coherenceにインストールされている必要があります。
      • OBEソースが、/opt/ED.OBEに解凍されている必要があります。

      これらの値のどちらかが正しくない場合は、次の手順を実行してください。

      コマンド・プロンプト・ウィンドウで、OBEソースが解凍されたディレクトリにいることを確認します。

      cd /opt/{obe source directory}

      任意のエディタで、bin/set-env.shスクリプトを開きます。

      gedit bin/set-env.sh

      スクリプトの先頭の近くに、OBEソースとOracle Coherenceの場所を指定する2つのexport文があります。
      2つの変数を非コメント化し、使用中の環境に適した値に設定します。

      デフォルト値の/opt/coherence/opt/ED.OBEを使用する場合は、変更は不要です。

      #!/bin/bash

      export OBE_HOME=/opt/my.ed.obe.location
      export COH_HOME=/opt/my.coherence.location

      変更を保存して、エディタを終了します。

    RAMジャーナルのテスト

      提供されているサーバー起動スクリプトbin/start-server.shを使用して、Oracle Coherenceのインスタンスを起動することができます。 Oracle Coherenceサーバーを起動するために、OBEインストールのルートにいることを確認します。

      $ pwd

      /opt/ED.OBE

      サーバー・インスタンスをバックグラウンドで起動します。

      $ bin/start-server.sh > server.log 2>&1 &

      このコマンドはサーバー・インスタンスをバックグラウンドで起動し、標準出力と標準エラーの両方を同じログ・ファイルにリダイレクトします。

      サーバー起動プロセスを追跡します。
      次のようなtail -f {filename}コマンドを使用して、バックグラウンドでのCoherenceインスタンスの起動を追跡します。

      $ tail -f server.log

      このコマンドは、サーバー・ログが変更されると、ログの最後の数行を表示します。 ログにStarted DefaultCacheServerと表示されるまで待機し、コマンドを終了して操作を続行します。



      提供されるシミュレーションでは、一部のキャッシュに対して、エンティティの追加、更新、キャッシングの操作を行います。 このシミュレーションは、新しく作成されたエラスティック・データ機能の構成を実用化するために使用することができます。 シミュレーションを管理するために、bin/start-sim.shスクリプトとbin/stop-sim.shスクリプトが提供されています。 これらのスクリプトは、src/javaディレクトリで提供されているコードを使用します。 このチュートリアルでは対象外となっていますが、興味があれば、ソースを検証することもできます。

      次のようにbin/start-sim.shコマンドを実行して、シミュレーションを開始します。

      $ bin/start-sim.sh

      このコマンドは、シミュレーションを開始するとともに、シミュレーション自体のプロセスIDを表示します。

      3つのプロセスが起動されて、各プロセスがその出力をsim.logs/sim*.logにルーティングします。
      また、シミュレーションは、sim/ディレクトリで提供されている定義ファイルに基づいて実行されます。これらの定義ファイルは、継続時間、生成されるオブジェクト数、キー・プリフィックスなどを制御します。 デフォルトでは、シミュレーションを開始すると、シミュレーションごとに50,000個のオブジェクトが生成され、2分が経過するとシミュレーションは終了します。

      新しく定義されたエラスティック・データ・キャッシュに対するアクセスの結果を検証します。
      ジャーナル・マネージャによって制御されるエラスティック・データ機能の多くの機能は、オーバーライドできます。 もっとも一般的なのは、Oracle Coherenceがエラスティック・データ機能のジャーナル・ファイル用に使用するディレクトリです。 ただし、オーバーライドされなかった場合、Oracle Coherenceはデフォルト値を使用します。 デフォルト値は、中核のCoherenceオペレーション構成の中で定義されており、サーバーを実行するとログに記録されます。

      コマンド・ウィンドウで、次のgrepコマンドを入力します。

      grep Manager server.log


      結果を検証します。 デフォルト値に関するいくつかのメッセージを確認します。これらのデフォルト値は、次の項でオーバーライドされます。
      ここでは特に、フラッシュ・ジャーナルによって使用されるディレクトリに注目します。 ディレクトリがランダムに生成されることに注意してください。

      操作を続行する前に、既存のCoherenceインスタンスを停止する必要があります。
      元のサーバー・インスタンスを起動したコマンド・ウィンドウで、
      jobsコマンドを使用して実行されているインスタンスのジョブIDを確認し、killコマンドを使用してプロセスを停止します。


      killコマンドが、-9などの特定のシグナルを指定していないことに注意してください。 シグナルを指定しない場合、killコマンドはプロセスを終了するように通知しますが、クリーンアップを行うことは可能です。 この例では、Oracle Coherenceは、終了する前に、作成したジャーナル・ファイルをすべて消去します。

Oracle Coherenceのエラスティック・データ機能のテスト

    エラスティック・データ機能を本格的にテストするには、ディレクトリ、書込みサイズ、ジャーナル・ファイル・サイズなどの要素を含め、ジャーナル機能の動作のさまざまな側面を制御できる必要があります。

    この項では、ジャーナル機能の動作を制御するCoherenceのオペレーション・オーバーライドによって指定される、フラッシュ・ジャーナル・マネージャの設定を構成してテストします。

    ジャーナル・マネージャの構成

      ジャーナル・マネージャは、エラスティック・データ機能のさまざまな機能を制御します。 <journaling-config>のもっとも一般的な要素としては、次のものがあります。
      • <directory>: エラスティック・データ機能がジャーナル・ファイルを格納するために使用する場所です。
      • <maximum-value-size>: フラッシュ・ジャーナルに格納されるバイナリ値の最大サイズを、バイト単位で指定します。 値は、64MB以下でなければなりません。 デフォルト値=64MB
      • <block-size>: 下層で実行されるディスクへの書込みに使用される書込みバッファのサイズです。 書込みを最適化するために、ディスクの物理ブロック・サイズの整数倍にする必要があります。 4KB~1MBの範囲で2の倍数にしてください。
      • <maximum-file-size>: ジャーナル・ファイルの最大ファイル・サイズです。1MB~4GBの範囲で指定します。 パフォーマンスを確保するために、この値は2の倍数かつブロック・サイズの倍数にする必要があります。

      RAMジャーナル・マネージャは同様の機能を提供しますが、<maximum-value-size>要素と<maximum-size>要素を含むオプションがより限定されています。 たとえば、RAMジャーナルに適用できるファイルベースのオプションはありません。

      コマンド・ウィンドウでOBEソース・コードのルートに移動し、部分的に構成されたオーバーライド・ファイルをsrc/configディレクトリからconfigディレクトリへコピーします。

      $ cp src/config/coherence-override-dev.xml config/

      起動スクリプトは、このオーバーライド・ファイルを検出した場合には使用するよう、すでに構成されています。

      任意のエディタでオーバーライド・ファイルを開き、Enter journalling configuration hereコメントを検索します。

      gedit config/coherence-override-dev.xml

      コメントの下に、<journaling-config>要素を追加します。この要素には、<flashjournal-manager>要素も含めます。
      <flashjournal-manager>要素およびそれと同等の<ramjournam-manager>要素には、異なるジャーナルタイプに対応するオーバーライド値が含まれています。

      新しい要素は、次のようになります。
      <!--
        Enter journaling configuration here
      -->
      <journaling-config>
          <flashjournal-manager>
          </flashjournal-manager>
      </journaling-config>

      フラッシュ・ジャーナルの要素には、さまざまなオーバーライド値が含まれています。 オーバーライド値を、次の順番で入力します。

      OBEが/opt/ED.OBEにインストールされていない場合は、<directory>要素が正しく設定されていることを確認してください。

      <maximum-value-size>64KB</maximum-value-size>
      <block-size>256KB</block-size>
      <maximum-file-size>2MB</maximum-file-size>
      <directory>/opt/ED.OBE/data</directory>
      <async-limit>1MB</async-limit


      これらの要素は、次のことを定義します。
      • ジャーナル内で許可される要素の最大サイズ
      • 書込みブロック・サイズ
      • 各ジャーナル・ファイルのサイズ(このチュートリアルではテストが目的なので人為的に小さな値に設定)
      • ジャーナル・ファイルを格納するディレクトリ
      • 非同期書込みサイズ(定期的書込みを強制的に行うために人為的に小さな値に設定)

      変更が完了した要素は、次のようになります。
      <journaling-config>
          <flashjournal-manager>
              <maximum-value-size>64KB</maximum-value-size>
              <block-size>256KB</block-size>
              <maximum-file-size>2MB</maximum-file-size>
              <directory>/opt/ED.OBE/data</directory>
              <async-limit>1MB</async-limit>
          </flashjournal-manager>
      </journaling-config>

      変更を保存して、エディタを終了します。

    Coherenceインスタンスの起動

      次のようなコマンドを使用して、Oracle Coherenceサーバーを起動します。

      $ bin/start-server.sh > server.log 2>&1 &

      tailコマンドを使用して、サーバーが起動したことを確認します。

      $ tail -f server.log

      前の項で説明したように、tailコマンドの出力に、サーバーの初期化が完了したことを通知するStarted DefaultCacheServerが表示されるまで待機します。 tailコマンドを終了して、操作を続行します。

      データ・ディレクトリを検証します。
      lsコマンドを使用して、データ・ディレクトリの内容を検証します。 このディレクトリにファイルが存在していないことを、確認してください。

      ls -lha /opt/ED.OBE/data


      シミュレーションが開始されてキャッシュにオブジェクトが追加されるまで、Oracle Coherenceにはオブジェクトをスピルオーバーさせる必要はありません。

    シミュレーションの開始と結果の検証

      シミュレーションは、複数のプロセスを実行するように設計されています。各プロセスは、複数ある指定されたキャッシュの1つに対して、あらかじめ設定された数のエントリを書き込みます。
      この動作によって、Oracle Coherenceのエラスティック・データ機能は、Oracle Coherenceサーバーに割り当てられた少量のメモリ(256MB)をすぐに使い果たすことになります。

      次のようなコマンドを使用して、シミュレーションを開始します。

      bin/start-sim.sh

      シミュレーションは、複数の異なるキャッシュでさまざまなアクティビティを実行します。

      lsコマンドまたはbin/monitor-data.shスクリプトを使用して、データ・サブディレクトリでのアクティビティを検証します。

      監視スクリプトは、以前に指定されたディレクトリ(/opt/ED.OBE/data)を使用することを前提としており、ls -lhaコマンドを実行して1秒間待機する動作を、全体で90秒繰り返します。

      $ bin/monitor-data.sh

      監視スクリプトは次のような出力を生成します。
      . . .
      -rw-r--r-- 1 oracle staff 2.0M Jul 16 13:09 coh8739135425693253626.tmp
      . . .
      -rw-r--r-- 1 oracle staff 2.0M Jul 16 13:10 coh956962025706288357.tmp
      . . .
      コマンド・ウィンドウで、次のようなコマンドを使用してジョブのIDを確認します。

      jobs

      関係するプロセスIDを確認し、killコマンドを使用してプロセスを停止します。

      kill %1

      検証

      オーバーライド・ファイルの設定が変わることで、Oracle Coherenceのジャーナル機能の動作も変わります。 たとえば、Coherenceインスタンスに割り当てられるメモリの量は、256MBと非常に小さな値に設定されています。 また、ジャーナル・ファイルの最大ファイル・サイズも、非常に小さな値に設定されています。 ジャーナル設定の実験を行うには、データ・ディレクトリを、存在していないディレクトリに変更します。 何が起こるでしょうか。 また、ファイル・サイズを変更して、値を増減させます。 ファイルの数に何か変化があるでしょうか。

まとめ

    このチュートリアルで学習した内容は、以下のとおりです。

    • フラッシュ・ジャーナルまたはRAMジャーナルを通じてジャーナル機能を使用するようにキャッシュを構成する方法
    • ジャーナル・マネージャを使用して、ジャーナル機能の動作を微調整する方法
    • シミュレーションを使用して、エラスティック・データ機能をテストする方法

    参考資料

    • Oracle Coherence 3.7.1のドキュメントは、こちらを参照してください。
    • Oracle Coherenceの開発と管理に関する各種クラスおよび上級者向けトレーニングは、こちらで検索できます。
    • Oracle Coherenceについて、詳しくはOracle Learning Libraryにあるその他のOBEを参照してください。

    著者

    • カリキュラムのおもな開発者: Al Saganich
    • 共著者: Jason Howes、Tim Middleton、Noah Arliss他

このOracle by Exampleをナビゲートする際、次の機能を使用できます。

ヘッダー・ボタンの非表示:
ヘッダー内のボタンを非表示にするには、タイトルをクリックします。 ボタンを再表示するには、もう一度タイトルをクリックします。
トピック一覧ボタン:
すべてのトピックの一覧です。 いずれかのトピックをクリックすると、その項に移動します。
すべてのトピックを開く/閉じる:
すべての項の詳細を表示または非表示にします。 デフォルトでは、すべてのトピックが閉じられています。
すべてのイメージを表示/非表示:
すべてのスクリーンショットを表示または非表示にします。 デフォルトでは、すべてのイメージが表示されています。
印刷:
コンテンツを印刷します。 現在表示または非表示にされているコンテンツが印刷されます。

このチュートリアルの特定の項に移動するには、一覧からトピックを選択してください。