ヘッダーをスキップ
Oracle® Complex Event Processing開発者ガイド
11g リリース1 (11.1.1) for Eclipse
B61654-01
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

19 スケーラビリティの構成

この章では、選択されたサービス品質によってOracle CEPアプリケーションの構成方法を説明します。次の項が含まれます。

スケーラビリティ・オプションの詳細は、第18章「スケーラビリティについて」を参照してください

19.1イベント・パーティショナ・チャネルでスケーラビリティを構成する方法

この項では、Oracle CEPイベント・パーティショナでチャネルを構成する方法について説明します。

詳細は、18.2.2項「イベント・パーティショナ・チャネル」を参照してください。

イベント・パーティショナ・チャネルでスケーラビリティを構成するには:

  1. EPNにチャネルを追加します。

    詳細は、第8章「チャネルの構成」を参照してください。

  2. 2つ以上の同一のリスナーにチャネルを接続します。

    たとえば、同一のOracle CQLルールで構成された2つ以上のOracle CQLプロセッサにチャネルを接続します。

    詳細は、5.4.2項「ノードの接続」を参照してください。

  3. チャネルを構成するために、EPNアセンブリ・ファイルを編集します。次を参照してください。

    • max-threadsを0に設定します。

      チャネルは、パススルーとして機能します。イベント順序が保持されます。

    例19-1では、このようなチャネルを表示します。

    例19-1 イベント・パーティションのためのチャネルの構成

    ...
        <wlevs:channel id="priceStream" event-type="PriceEvent" max-threads="0" >
            <wlevs:listener ref="filterFanoutProcessor1" />
            <wlevs:listener ref="filterFanoutProcessor2" />
            <wlevs:listener ref="filterFanoutProcessor3" />
            <wlevs:source ref="PriceAdapter" />
        </wlevs:channel>
    ...
    
  4. eventPartitionerのインスタンス・プロパティをチャネル要素に追加するようにEPNアセンブリ・ファイルを編集します。例19-2を参照してください。

    例19-2 チャネルeventPartionerのインスタンス・プロパティ

    ...
        <wlevs:channel id="priceStream" event-type="PriceEvent" max-threads="0" >
            <wlevs:instance-property name="eventPartitioner" value="true" />
            <wlevs:listener ref="filterFanoutProcessor1" />
            <wlevs:listener ref="filterFanoutProcessor2" />
            <wlevs:listener ref="filterFanoutProcessor3" />
            <wlevs:source ref="PriceAdapter" />
        </wlevs:channel>
    ...
    
  5. アプリケーションをアセンブルし、デプロイします。

    詳細は、第20章「Oracle CEPアプリケーションのアセンブルおよびデプロイ」を参照してください。

    実行時に、Oracle CEPサーバーは各受信イベントを別のリスナーにディスパッチします。

19.2 ActiveActiveGroupBeanでスケーラビリティの構成

この項では、セレクタで受信JMSイベント・ストリームをパーティションするためにActiveActiveGroupBeanを使用するようにOracle CEPアプリケーションを構成する方法について説明します。次の項が含まれます。

詳細は、18.2.1項「ActiveActiveGroupBean」を参照してください。

19.2.1Oracle CEP高可用性なしのJMSアプリケーションでスケーラビリティを構成する方法

Oracle CEP高可用性を使用しないアプリケーションの場合、マルチサーバー・ドメインでセレクタを使用して受信JMSイベント・ストリームをパーティションするためにActiveActiveGroupBeanを使用できます。

Oracle CEP高可用性アプリケーションでActiveActiveGroupBeanを使用する方法は、19.2.2項「Oracle CEP高可用性を使用するJMSアプリケーションでスケーラビリティを構成する方法」を参照してください。

詳細は、18.2.1.1項「高可用性なしのActiveActiveGroupBeanを使用してOracle CEPアプリケーションのスケーラビリティ」を参照してください。

Oracle CEP高可用性なしのJMSアプリケーションのスケーラビリティを構成するために次の手順を実行します。

  1. マルチサーバー・ドメインを作成します。

    詳細は、『Oracle CEP管理者ガイド』のマルチサーバー・ドメインの概要を参照してください。

    この例では、デプロイメント・グループの名前は、MyDeploymentGroupです。

  2. 適切なActiveActiveGroupBean通知グループをcluster要素のgroups子要素に追加するように各Oracle CEPサーバーのOracle CEPサーバー構成ファイルを構成します。

    Oracle CEPサーバー構成ファイルのconfig.xmlは、DOMAIN_DIR/servername/configディレクトリにあります。DOMAIN_DIRは、メイン・ドメイン・ディレクトリを示し、servernameは、特定のサーバー・インスタンスを示します。

    たとえば、表19-2では、ocep-server-1ocep-server-2ocep-server-3およびocep-server-4のOracle CEPサーバーのcluster要素を示します。デプロイメント・グループはMyDeploymentGroupであり、通知グループがデフォルトのActiveActiveGroupBean通知グループ・ネーミングを使用して定義されます。

    オプションで、19.2.3項「ActiveActiveGroupBeanグループ・パターン一致の構成方法」の説明に従って、独自のグループ命名式を定義できます。

    表19-1 Oracle CEPサーバー構成ファイル・グループ要素構成

    パーティション cluster要素

    ocep-server-1

    <cluster>
        <server-name>ocep-server-1</server-name>
        ...
        <enabled>coherence</enabled>
        ...
        <groups>MyDeploymentGroup, ActiveActiveGroupBean_group1</groups>
    </cluster>
    

    ocep-server-2

    <cluster>
        <server-name>ocep-server-2</server-name>
        ...
        <enabled>coherence</enabled>
        ...
        <groups>MyDeploymentGroup, ActiveActiveGroupBean_group2</groups>
    </cluster>
    

    ocep-server-3

    <cluster>
        <server-name>ocep-server-3</server-name>
        ...
        <enabled>coherence</enabled>
        ...
        <groups>MyDeploymentGroup, ActiveActiveGroupBean_group3</groups>
    </cluster>
    

    ocep-server-4

    <cluster>
        <server-name>ocep-server-4</server-name>
        ...
        <enabled>coherence</enabled>
        ...
        <groups>MyDeploymentGroup, ActiveActiveGroupBean_group4</groups>
    </cluster>
    

  3. Oracle CEPアプリケーションを作成します。

  4. 例19-7に示すように、ActiveActiveGroupBean要素を追加するために、EPNアセンブリ・ファイルを構成します。

    例19-3 ActiveActiveGroupBeanのbean要素

    <bean id="clusterAdapter" class="com.oracle.cep.cluster.hagroups.ActiveActiveGroupBean">
    </bean>
    
  5. JMSインバウンド・アダプタのjms-adapter要素にパラメータ化されたmessage-selectorを定義します。

    JMSインバウンド・アダプタのjms-adapter要素にgroup-binding子要素を追加するために、コンポーネント構成ファイルを編集します。

    例19-9示すように、各可能JMSメッセージ・セレクタ値に対して1つのgroup-binding要素を追加します。

    例19-4 ocep-server-1用のjms-adapterセレクタ定義

    <jms-adapter>
        <name>JMSInboundAdapter</name>
        <event-type>StockTick</event-type>
        <jndi-provider-url>t3://ppurich-pc:7001</jndi-provider-url>
        <destination-jndi-name>./Topic1</destination-jndi-name>
        <user>weblogic</user>
        <password>weblogic1</password>
        <work-manager>JettyWorkManager</work-manager>
        <concurrent-consumers>1</concurrent-consumers>
        <session-transacted>true</session-transacted>
        <message-selector>${CONDITION}</message-selector>
        <bindings>
            <group-binding group-id="ActiveActiveGroupBean_group1">
                <param id="CONDITION">acctid > 400</param>
            </group-binding>
            <group-binding group-id="ActiveActiveGroupBean_group2">
                <param id="CONDITION">acctid BETWEEN 301 AND 400</param>
            </group-binding>
            <group-binding group-id="ActiveActiveGroupBean_group3">
                <param id="CONDITION">acctid BETWEEN 201 AND 300</param>
            </group-binding>
            <group-binding group-id="ActiveActiveGroupBean_group4">
                <param id="CONDITION">acctid <= 200</param>
            </group-binding>
         </bindings>
    </jms-adapter>
    

    この構成では、ActiveActiveGroupBean_group1を含むcluster要素、groups子要素でアプリケーションをOracle CEPサーバーにデプロイすると、CONDITIONパラメータがacctid > 400と定義され、acctidプロパティが400以上であるイベントがアプリケーションにより処理されます。


    注意:

    各インバウンドJMSアダプタは異なるトピックをリスニングする必要があります。

    詳細は、第6章「JMSアダプタの構成」を参照してください。


  6. マルチサーバー・ドメインのデプロイメント・グループにアプリケーションをデプロイします。

    詳細は、第20章「Oracle CEPアプリケーションのアセンブルおよびデプロイ」を参照してください。

    実行時に、各Oracle CEPサーバーがActiveActiveGroupBean通知グループに対するmessage-selectorにアプリケーションのインスタンスを構成します。アプリケーションの各インスタンスがメッセージ総数のサブセットを並行して処理するようにJMSトピックをパーティションします。

19.2.2 Oracle CEP高可用性を使用してJMSアプリケーションでスケーラビリティを構成する方法

ActiveActiveGroupBeanを使用して、Oracle CEP高可用性のマルチサーバー・ドメインで受信JMSイベント・ストリームをパーティションできます。

この手順では、図19-1に示すサンプルEPN、例19-5に示す対応するEPNアセンブリ・ファイルおよび例19-6に示す対応するコンポーネント構成ファイルを含む17.1.4項「JMSで精度の高いリカバリを構成する方法」のサンプル・アプリケーションを使用します。

図19-1 JMS EPNを使用して精度の高いリカバリ

図19-1の説明が続きます
「図19-1 JMS EPNを使用して精度の高いリカバリ」の説明

例19-5 JMS EPNアセンブリ・ファイルを使用して精度の高いリカバリ

<?xml version="1.0" encoding="UTF-8"?>
<beans ... >

    <wlevs:event-type-repository>
        <wlevs:event-type type-name="StockTick">
            <wlevs:properties>
                <wlevs:property name="lastPrice" type="double" />
                <wlevs:property name="symbol" type="char" />
            </wlevs:properties>
        </wlevs:event-type>
    </wlevs:event-type-repository>

    <wlevs:adapter id="JMSInboundAdapter" provider="jms-inbound">
        <wlevs:listener ref="myHaInputAdapter"/>
    </wlevs:adapter>

    <wlevs:adapter id="myHaInputAdapter" provider="ha-inbound" >
        <wlevs:instance-property name="keyProperties" value="sequenceNo"/>
        <wlevs:instance-property name="timeProperty" value="inboundTime"/>
    </wlevs:adapter>

    <wlevs:channel id="channel1" event-type="StockTick">
        <wlevs:listener ref="processor1" />
        <wlevs:source ref="myHaInputAdapter"/>
        <wlevs:application-timestamped>
            <wlevs:expression>inboundTime</wlevs:expression>
        </wlevs:application-timestamped>
    </wlevs:channel>

    <wlevs:processor id="processor1">
        <wlevs:listener ref="channel2" />
    </wlevs:processor>

    <wlevs:channel id="channel2" event-type="StockTick">
        <wlevs:listener ref="myHaCorrelatingAdapter" />
    </wlevs:channel>

    <wlevs:adapter id="myHaCorrelatingAdapter" provider="ha-correlating" >
        <wlevs:instance-property name="correlatedSource" ref="clusterCorrelatingOutstream"/> 
        <wlevs:instance-property name="failOverDelay" value="2000"/> 
        <wlevs:listener ref="JMSOutboundAdapter"/>
    </wlevs:adapter>

    <wlevs:adapter id="JMSOutboundAdapter" provider="jms-outbound">
    </wlevs:adapter>

    <wlevs:adapter id="JMSInboundAdapter2" provider="jms-inbound">
    </wlevs:adapter>

    <wlevs:channel id="clusterCorrelatingOutstream" event-type="StockTick" advertise="true">
        <wlevs:source ref="JMSInboundAdapter2"/>
    </wlevs:channel> 
</beans>

例19-6 JMSコンポーネント構成アセンブリ・ファイルを使用して精度の高いリカバリ

<?xml version="1.0" encoding="UTF-8"?>
<wlevs:config 
        xmlns:wlevs="http://www.bea.com/ns/wlevs/config/application"
        xmlns:ha="http://www.oracle.com/ns/cep/config/cluster">
    <processor>
        <name>processor1</name>
        <rules>
            <query id="helloworldRule">
                <![CDATA[ select * from channel1 [Now] ]]>
            </query>
        </rules>
    </processor>
    <jms-adapter>
        <name>JMSInboundAdapter</name>
        <event-type>StockTick</event-type>
        <jndi-provider-url>t3://ppurich-pc:7001</jndi-provider-url>
        <destination-jndi-name>./Topic1</destination-jndi-name>
        <session-transacted>true</session-transacted>
    ...
    </jms-adapter>
    <jms-adapter>
        <name>JMSInboundAdapter2</name>
        <event-type>StockTick</event-type>
        <jndi-provider-url>t3://ppurich-pc:7001</jndi-provider-url>
        <destination-jndi-name>./Topic2</destination-jndi-name>
        <session-transacted>true</session-transacted>
    ...
    </jms-adapter>
    <jms-adapter>
        <name>JMSOutboundAdapter</name>
        <event-type>StockTick</event-type>
        <jndi-provider-url>t3://ppurich-pc:7001</jndi-provider-url>
        <destination-jndi-name>./Topic2</destination-jndi-name>
        <session-transacted>true</session-transacted>
    ...
    </jms-adapter>
</wlevs:config>

図19-2に示すように、この手順実行の結果、Oracle CEP高可用性構成が作成されます。

図19-2 高可用性のあるOracle CEP ActiveActiveGroupBean

図19-2の説明が続きます
「図19-2 高可用性のあるOracle CEP ActiveActiveGroupBean」の説明

詳細は、18.2.1.2項「高可用性のあるActiveActiveGroupBeanを使用してOracle CEPアプリケーションのスケーラビリティ」を参照してください。

Oracle CEP高可用性のあるJMSアプリケーションのスケーラビリティを構成するために次の手順を実行します。

  1. マルチサーバー・ドメインを作成します。

    詳細は、『Oracle CEP管理者ガイド』のマルチサーバー・ドメインの概要を参照してください。

    この例では、デプロイメント・グループの名前は、MyDeploymentGroupです。

  2. 適切なActiveActiveGroupBean通知グループをcluster要素のgroups子要素に追加するように各Oracle CEPサーバーのOracle CEPサーバー構成ファイルを構成します。

    Oracle CEPサーバー構成ファイルのconfig.xmlは、DOMAIN_DIR/servername/configディレクトリにあります。DOMAIN_DIRは、メイン・ドメイン・ディレクトリを示し、servernameは、特定のサーバー・インスタンスを示します。

    たとえば、表19-2では、ocep-server-1ocep-server-2ocep-server-3およびocep-server-4のOracle CEPサーバーのcluster要素を示します。デプロイメント・グループはMyDeploymentGroupであり、通知グループはデフォルトのActiveActiveGroupBean通知グループ・ネーミングを使用して定義します。

    ocep-server-1ocep-server-2は同一の通知グループ名前(ActiveActiveGroupBean_group1)を使用し、ocep-server-3ocep-server-4は同一の通知グループ名前(ActiveActiveGroupBean_group2)を使用します。

    オプションで、19.2.3項「ActiveActiveGroupBeanグループ・パターン一致の構成方法」の説明に従って、独自のグループ命名式を定義できます。

    表19-2 Oracle CEPサーバー構成ファイル・グループ要素構成

    パーティション クラスタ要素

    ocep-server-1

    <cluster>
        <server-name>ocep-server-1</server-name>
        ...
        <enabled>coherence</enabled>
        ...
        <groups>MyDeploymentGroup, ActiveActiveGroupBean_group1</groups>
    </cluster>
    

    ocep-server-2

    <cluster>
        <server-name>ocep-server-2</server-name>
        ...
        <enabled>coherence</enabled>
        ...
        <groups>MyDeploymentGroup, ActiveActiveGroupBean_group1</groups>
    </cluster>
    

    ocep-server-3

    <cluster>
        <server-name>ocep-server-3</server-name>
        ...
        <enabled>coherence</enabled>
        ...
        <groups>MyDeploymentGroup, ActiveActiveGroupBean_group2</groups>
    </cluster>
    

    ocep-server-4

    <cluster>
        <server-name>ocep-server-4</server-name>
        ...
        <enabled>coherence</enabled>
        ...
        <groups>MyDeploymentGroup, ActiveActiveGroupBean_group2</groups>
    </cluster>
    

  3. Oracle CEP高可用性アプリケーションを作成します。

    詳細は、第17章「高可用性の構成」を参照してください。

  4. 例19-7に示すように、ActiveActiveGroupBean要素を追加するために、EPNアセンブリ・ファイルを構成します。

    例19-7 ActiveActiveGroupBeanのbean要素

    <bean id="clusterAdapter" class="com.oracle.cep.cluster.hagroups.ActiveActiveGroupBean">
    </bean>
    
  5. 例19-8に示すように、インバウンドJMSアダプタ用のjms-adapter要素を構成するために、コンポーネント構成ファイルを編集します。

    • 各インバウンドJMSアダプタは異なるトピックをリスニングする必要があります。

    • session-transactedtrueに設定します。

    例19-8 インバウンドJMSアダプタ用のjms-adapter要素

    <?xml version="1.0" encoding="UTF-8"?>
    <wlevs:config 
            xmlns:wlevs="http://www.bea.com/ns/wlevs/config/application"
            xmlns:ha="http://www.oracle.com/ns/cep/config/cluster">
        ...
        <jms-adapter>
            <name>JMSInboundAdapter</name>
            <event-type>StockTick</event-type>
            <jndi-provider-url>t3://ppurich-pc:7001</jndi-provider-url>
            <destination-jndi-name>./Topic1</destination-jndi-name>
            <session-transacted>true</session-transacted>
        ...    </jms-adapter>
        <jms-adapter>
            <name>JMSInboundAdapter2</name>
            <event-type>StockTick</event-type>
            <jndi-provider-url>t3://ppurich-pc:7001</jndi-provider-url>
            <destination-jndi-name>./Topic2</destination-jndi-name>
            <session-transacted>true</session-transacted>
        ...    </jms-adapter>
    </wlevs:config>
    

    詳細は、第6章「JMSアダプタの構成」を参照してください。

  6. 各JMSインバウンド・アダプタのjms-adapter要素にパラメータ化されたmessage-selectorを定義します。

    JMSインバウンド・アダプタのjms-adapter要素にgroup-binding子要素を追加するために、コンポーネント構成ファイルを編集します。

    例19-9示すように、各可能JMS message-selector値に対して1つのgroup-binding要素を追加します。

    例19-9 ocep-server-1用のjms-adapterセレクタ定義

    <jms-adapter>
        <name>JMSInboundAdapter</name>
        <event-type>StockTick</event-type>
        <jndi-provider-url>t3://ppurich-pc:7001</jndi-provider-url>
        <destination-jndi-name>./Topic1</destination-jndi-name>
        <session-transacted>true</session-transacted>
        <message-selector>${CONDITION}</message-selector>
        <bindings>
            <group-binding group-id="ActiveActiveGroupBean_group1">
                <param id="CONDITION">acctid <= 1000</param>
            </group-binding>
            <group-binding group-id="ActiveActiveGroupBean_group2">
                <param id="CONDITION">acctid > 1000</param>
            </group-binding>
         </bindings>
    </jms-adapter>
    

    この構成では、ActiveActiveGroupBean_group1を含むcluster要素、groups子要素を持つアプリケーションをOracle CEPサーバーにデプロイすると、CONDITIONパラメータがacctid <= 1000と定義され、acctidプロパティが1000以下であるイベントがアプリケーションにより処理されます。同様に、ActiveActiveGroupBean_group2を含むcluster要素、groups子要素を持つアプリケーションをOracle CEPサーバーにデプロイすると、CONDITIONパラメータがacctid > 1000と定義され、acctidプロパティが1000以上であるイベントがアプリケーションにより処理されます。

  7. 例19-10に示すように、アウトバウンドJMSアダプタ用のjms-adapter要素を構成するために、コンポーネント構成ファイルを編集します。

    • 対応するインバウンド・アダプタ(この例では、JMSInboundAdapter2: ./Topic2)と同一トピックでアウトバウンドJMSアダプタを構成します。

    • session-transactedtrueに設定します。

    例19-10 アウトバウンドJMSアダプタ用のjms-adapter要素

    <?xml version="1.0" encoding="UTF-8"?>
    <wlevs:config 
            xmlns:wlevs="http://www.bea.com/ns/wlevs/config/application"
            xmlns:ha="http://www.oracle.com/ns/cep/config/cluster">
        ...
        <jms-adapter>
            <name>JMSInboundAdapter</name>
            <event-type>StockTick</event-type>
            <jndi-provider-url>t3://ppurich-pc:7001</jndi-provider-url>
            <destination-jndi-name>./Topic1</destination-jndi-name>
            <session-transacted>true</session-transacted>
        ...    </jms-adapter>
        <jms-adapter>
            <name>JMSInboundAdapter2</name>
            <event-type>StockTick</event-type>
            <jndi-provider-url>t3://ppurich-pc:7001</jndi-provider-url>
            <destination-jndi-name>./Topic2</destination-jndi-name>
            <session-transacted>true</session-transacted>
        ...    </jms-adapter>
        <jms-adapter>
            <name>JMSOutboundAdapter</name>
            <event-type>StockTick</event-type>
            <jndi-provider-url>t3://ppurich-pc:7001</jndi-provider-url>
            <destination-jndi-name>./Topic2</destination-jndi-name>
            <session-transacted>true</session-transacted>
        ...    </jms-adapter>
    </wlevs:config>
    

    詳細は、第6章「JMSアダプタの構成」を参照してください。

  8. マルチサーバー・ドメインのデプロイメント・グループにアプリケーションをデプロイします。

    詳細は、第20章「Oracle CEPアプリケーションのアセンブルおよびデプロイ」を参照してください。

    実行時に、各Oracle CEPサーバーがActiveActiveGroupBean通知グループに対するmessage-selectorでアプリケーションのインスタンスを構成します。これにより、アプリケーションの各インスタンスがメッセージ総数のサブセットを並行して処理するようにJMSトピックがパーティションされます。

    ActiveActiveGroupBeanグループの有効のOracle CEPサーバーが停止すると、ActiveActiveGroupBeanグループでのスタンバイOracle CEPサーバーに対しOracle CEPサーバーがOracle CEP高可用性フェイルオーバーを実行します。

19.2.3 ActiveActiveGroupBeanグループ・パターン一致の構成方法

デフォルトでは、ActiveActiveGroupBeanは次の名前の通知グループを作成します。

ActiveActiveGroupBean_X

Xは文字列です。

実行時に、ActiveActiveGroupBeanは、Oracle CEPサーバーに定義された既存のグループをスキャンし、次のデフォルトのパターン一致を適用します。

ActiveActiveGroupBean_\\w+

一致が見つかったら、その名前の通知グループを作成します。

オプションで、別の通知グループ・ネーミング・パターンを指定するために独自のグループ・パターンを定義できます。

ActiveActiveGroupBeanグループ・パターン一致の構成方法

  1. 例19-11に示すように、ActiveActiveGroupBean要素にgroupPattern属性を追加するためにEPNアセンブリ・ファイルを構成します。

    例19-11 groupPattern属性を持つActiveActiveGroupBeanのbean要素

    <bean id="clusterAdapter" class="com.oracle.cep.cluster.hagroups.ActiveActiveGroupBean">
        <property name="groupPattern" value="MyNotificationGroupPattern*"/>
    </bean>
    
  2. 通知グループに対し使用するクラスタ・グループ・ネーミング・ルールに一致するgroupPattern属性の値を指定します。