このトピックでは、CORBAアプリケーションを例に、Oracle Tuxedo CORBA環境でのアプリケーションの分散方法を説明します。
注意: | Oracle Tuxedo CORBA JavaクライアントとOracle Tuxedo CORBA JavaクライアントORBはTuxedo 8.1で非推奨になり、今後はサポートされなくなりました。 Oracle Tuxedo CORBA JavaクライアントおよびOracle Tuxedo CORBA JavaクライアントORBのテキスト参照、関連するコード・サンプルはすべてサード・パーティのJava ORBライブラリの実装/実行の簡易化とプログラマによる参照だけに使用する必要があります。 |
注意: | サード・パーティのCORBA Java ORBのテクニカル・サポートは、各ベンダーによって提供されます。 Oracle Tuxedoでは、サード・パーティのCORBA Java ORBに関する技術的なサポートやドキュメントは提供していません。 |
アプリケーションを分散すると、アプリケーションのある部分を選択して論理的にグループ化し、そのグループを実行する場所を選択できます。 アプリケーションの分散は、UBBCONFIG
ファイルのGROUPS
セクションに複数のエントリを作成し、アプリケーションのリソースまたはタスクをグループ間に分割することによって行います。 サーバーのグループを作成することにより、非常に大規模なアプリケーションをコンポーネント・ビジネス・アプリケーションに分割し、これらの各論理コンポーネントを管理可能なサイズで最適な場所に配置できます。
分散アプリケーションの利点には、以下のようなものがあります。
Oracle Tuxedo CORBAシステムでは、ファクトリ・ベース・ルーティングを使用して、特定のCORBAインタフェースを複数のサーバー・グループ(必要な場合は複数のマシン)に分散できます。この機能を使用して処理負荷を分散し、同時に実行されている、リソースの集中するアプリケーション同士が、使用可能なCPU、メモリー、ディスクI/Oおよびネットワーク・リソースをめぐって競合する場合に発生する処理のボトルネックを防ぐことができます。ファクトリ・ベース・ルーティングの使用例は、「ファクトリ・ベース・ルーティングによるスケーリング」を参照してください。
Oracle Tuxedo CORBAのスケーラビリティの特長の詳細は、「Oracle Tuxedo CORBAアプリケーションのスケーリング」を参照してください。
注意: | このトピックは、Oracle Tuxedoサーバーにのみ適用されます。 |
データ依存型ルーティングは、クライアント(またはクライアントとして機能しているサーバー)により、送信されたバッファに含まれるデータ値に基づいて特定のグループ内のサーバーにサービス・リクエストがルーティングされるメカニズムです。サービス・コールの内部コードの中で、Oracle Tuxedoは、データ・フィールドを掲示板の共有メモリー内で検出されるルーティング基準と比較することにより宛先サーバーを選択します。
所定のどのサービスについても、UBBCONFIG
ファイルのSERVICES
セクションでルーティング基準識別子を指定できます。 ルーティング基準識別子(特にサーバー・グループに対するデータ範囲のマッピング)は、ROUTING
セクションで指定します。
表3-1では、クライアント・リクエストがサーバーにルーティングされるしくみを説明します。このサンプルでは、bankapp
と呼ばれる銀行取引アプリケーションでデータ依存型ルーティングが使用されています。bankapp
には、3つのグループ(BANKB1
、BANKB2
、およびBANKB3
)と、2つのルーティング基準(Account_ID
およびBranch_ID
)があります。サービスWITHDRAW
、DEPOSIT
、およびINQUIRY
は、Account_ID
フィールドを使用してルーティングされます。サービスOPEN
およびCLOSE
は、Branch_ID
フィールドを使用してルーティングされます。
リスト3-1は、Oracle Tuxedoシステムでデータ依存型ルーティングを実現するための構成ファイルにおける、GROUPS
、SERVICES
、およびROUTING
の各セクションを含むUBBCONFIG
ファイルの例を示します。
*GROUPS
BANKB1 GRPNO=1
BANKB2 GRPNO=2
BANKB3 GRPNO=3
#
*SERVICES
WITHDRAW ROUTING=ACCOUNT_ID
DEPOSIT ROUTING=ACCOUNT_ID
INQUIRY ROUTING=ACCOUNT_ID
OPEN_ACCT ROUTING=BRANCH_ID
CLOSE_ACCT ROUTING=BRANCH_ID
#
*ROUTING
ACCOUNT_ID FIELD=ACCOUNT_ID BUFTYPE=”FML”
RANGES=”MIN - 9999:*,
10000-49999:BANKB1,
50000-79999:BANKB2,
80000-109999:BANKB3,
*:*”
BRANCH_ID FIELD=BRANCH_ID BUFTYPE=”FML”
RANGES=”MIN - 0:*,
1-4:BANKB1,
5-7:BANKB2,
8-10:BANKB3,
*:*”
UBBCONFIG
ファイルの詳細は、Oracle Tuxedoアプリケーションの設定の構成ファイルの作成に関する項を参照してください。
UBBCONFIG
ファイルには、以下のようなデータ依存型ルーティング(Oracle Tuxedo)またはファクトリ・ベース・ルーティング(Oracle Tuxedo CORBA)の説明が含まれます。
GROUPS
セクションには、システムを分散するために必要な数のサーバー・グループが挿入されます。これにより、システムはリクエストを特定グループのサーバーにルーティングできるようになります。これらのグループは、すべて同じサイトに設定することも(SHM
モード)、ネットワーク化がなされている場合に複数のサイトに分散することも(MP
モード)できます。SERVICES
セクションに、ROUTING
パラメータを使用する各サービスのルーティング基準がリストされている必要があります。注意: | サービスに複数のエントリがあり、それぞれが異なったSRVGRP パラメータを備えている場合、すべてのエントリで、サービスに対する一貫性を確保するために、ROUTING の設定を同じにしなければなりません。 1つのサービスは、1つのフィールドにしかルーティングできず、このフィールドは、同じサービスでは同じものにする必要があります。 |
INTERFACES
セクションに、FACTORYROUTING
パラメータを使用する各CORBAインタフェースのルーティング基準名がリストされている必要があります。 このパラメータは、ROUTING
セクションで定義されたルーティング基準名に設定されます。ROUTING
セクションを追加して、システムがリクエストを特定グループのサーバーに送信できるように、データ範囲とグループ間のマッピングを示します。ROUTING
セクションの各項目には、INTERFACES
セクションで使用される識別子(Oracle Tuxedo ATMIの場合)またはSERVICES
セクションで使用される識別子(Oracle Tuxedoの場合)が含まれます。 GROUPS
セクションのパラメータは、分散トランザクション処理に関する次の2つの重要な側面を実装します。
表3-2は、GROUPS
セクションのパラメータの説明です。
SERVICES
セクションのパラメータは、アプリケーション・サービスの処理方法を制御します。 このセクションのエントリの行は、識別子名によってサービスと関連付けられます。 SRVGRP
パラメータは、1つのサービスを複数のサーバーにリンクするために用意されています。このパラメータは、サービスのインスタンスを示すパラメータを特定のサーバー・グループに関連付けます。
SERVICES
セクションには、特にOracle Tuxedo ATMIサービスを使用するOracle Tuxedo CORBAアプリケーションの分散トランザクション処理(DTP)に関連付けられるパラメータが2つ(AUTOTRAN
とTRANTIME
)あります。
表3-3は、SERVICES
セクションのパラメータの説明です。
リスト3-2に、SERVICESセクションの例を示します。
*SERVICES
# Publish Tuxedo Teller application services
#
DEBIT
AUTOTRAN=Y
CREDIT
AUTOTRAN=Y
CURRBALANCE
AUTOTRAN=Y
INTERFACES
セクションのパラメータは、アプリケーション・インタフェースの処理方法を制御します。 このセクションのエントリの行は、識別子名によってインタフェースと関連付けられます。 SRVGRP
パラメータは、1つのインタフェースを複数のサーバーにリンクするために用意されています。このパラメータは、インタフェースのインスタンスを示すパラメータを特定のサーバー・グループに関連付けます。
INTERFACES
セクションには、特に分散トランザクション処理(DTP)に関連付けられるパラメータが3つ(FACTORYROUTING
、AUTOTRAN
、およびTRANTIME
)あります。
表3-4は、INTERFACES
セクションのパラメータの説明です。
リスト3-3に、INTERFACESセクションの例を示します。
*INTERFACES
"IDL:beasys.com/UniversityP/Registrar:1.0"
FACTORYROUTING = STU_ID
AUTOTRAN=Y
TRANTIME=50
"IDL:beasys.com/BillingP/Teller:1.0"
FACTORYROUTING = ACT_NUM
AUTOTRAN=Y
Oracle Tuxedoのデータ依存型ルーティングまたはOracle Tuxedo CORBAファクトリ・ベース・ルーティングをサポートするROUTING
パラメータの詳細は、Oracle Tuxedoアプリケーションの設定の構成ファイルの作成に関する項を参照してください。
リスト3-4は、Productionサンプル・アプリケーションでファクトリ・ベース・ルーティングに使用されるUBBCONFIG
ファイルのROUTING
セクションを示しています。
*ROUTING
STU_ID
FIELD = "student_id"
TYPE = FACTORY
FIELDTYPE = LONG
RANGES = "100001-100005:ORA_GRP1,100006-100010:ORA_GRP2"
ACT_NUM
FIELD = "account_number"
TYPE = FACTORY
FIELDTYPE = LONG
RANGES = "200010-200014:APP_GRP1,200015-200019:APP_GRP2"
CORBAアプリケーションの場合、複数ドメインにわたってファクトリ・ベース・ルーティングを構成するには、現在の(ローカル)ドメインで使用されているが、別の(リモート)ドメインに存在するファクトリ・オブジェクトを識別するために、factory_finder.ini
ファイルを構成する必要があります。詳細は、『Oracle Tuxedo Domainsコンポーネント』の「Configuring Multiple Domains for CORBA Applications」を参照してください。
この項はOracle Tuxedoのみを対象とし、ルーティングをサポートするためにドメイン・ゲートウェイ構成を変更する方法と、この処理が必要である理由を説明します。ドメイン・ゲートウェイ構成ファイルの詳細は、『Oracle Tuxedo Domainsコンポーネント』の「Configuring Multiple Domains Multiple Domains for CORBA Applications」を参照してください。
ドメイン・ゲートウェイ構成情報は、BDMCONFIG
という名前のバイナリ・ファイルに格納されます。DMCONFIG
ファイル(ASCII)は、任意のテキスト・エディタで作成および編集します。コンパイル済のBDMCONFIG
ファイルは、システムの実行中にdmadmin(1)
コマンドを使用して更新できます。
Domains機能を必要とする各Oracle Tuxedoアプリケーションには、BDMCONFIG
ファイルを1つ作成する必要があります。BDMCONFIG
ファイルへのアクセスは、Domains管理サーバーであるDMADM
(5)から行います。ゲートウェイ・グループが起動されると、ゲートウェイ管理サーバーであるGWADM
(5)は、そのグループに必要な構成のコピーをDMADM
サーバーにリクエストします。また、GWADM
サーバーとDMADM
サーバーは、構成における実行時の変更が、対応するドメイン・ゲートウェイ・グループに反映されるようにします。
注意: | DMCONFIG ファイルの変更の詳細は、『Oracle Tuxedoドメイン・コンポーネントの使い方』のCORBAアプリケーションの複数ドメインの構成に関する項を参照してください。 |
DM_ROUTING
セクションでは、型付きバッファであるFML
、VIEW
、X_C_TYPE
およびX_COMMON
を使用したサービス・リクエストのデータ依存型ルーティングに関する情報を提供します。DM_ROUTING
セクション内の行にはフォームCRITERION_NAME
があり、CRITERION_NAME
はSERVICESセクションに指定されたルーティング・エントリの(識別子の)名前です。CRITERION_NAME
エントリに使用できるのは15文字までです。
表3-5は、DM_ROUTINGセクションのパラメータの説明です。
ルーティング・フィールドには、FML
またはVIEW
でサポートされている任意のデータ型を指定できます。 数値のルーティング・フィールドには、数値による範囲値、文字列のルーティング・フィールドには文字列による範囲値を指定します。
string、carrayおよびcharacterフィールド・タイプの文字列の範囲値は、一重引用符のペアの中に配置する必要があり、前に記号を付けることはできません。shortおよびlong整数値は数値の文字列であり、オプションで前にプラス(+
)またはマイナス(-
)記号を付けることができます。浮動小数点は、Cコンパイラまたはatof()
で使用可能なフォーム(オプションで小数点を含む数値の文字列が続くオプションの記号、およびオプションで記号や空白、整数が続くオプションのe
またはE
)です。
フィールド値が範囲と一致するときに、関連するRDOM
値には、リクエストがルーティングされるリモート・ドメインを指定します。RDOM
値に*
を指定すると、ゲートウェイ・グループが認識する任意のリモート・ドメインにリクエストが送信されることを示します。range/RDOM
の組合せでは、範囲とRDOM
はコロン(:
)で区切られます。
リスト3-5は、5サイトのドメイン構成を定義する構成ファイルを示します。 Central Bank Branchと通信する、4つの銀行支店ドメインがあります。 銀行支店のうち、3つがほかのOracle Tuxedoシステム・ドメイン内で実行されています。 残りの支店は、別のTPドメインの制御下で実行されており、そのドメインとの通信にはOSI-TPが使用されています。 この例では、Central Bankから見たOracle Tuxedoのドメイン・ゲートウェイ構成ファイルを示しています。 DM_TDOMAIN
セクションは、b01
をミラーリングしたゲートウェイを示しています。
# BEA TUXEDO DOMAIN CONFIGURATION FILE FOR THE CENTRAL BANK
#
#
*DM_LOCAL_DOMAINS
# <local domain name> <Gateway Group name> <domain type> <domain id> <log device>
# [<audit log>] [<blocktime>]
# [<log name>] [<log offset>] [<log size>]
# [<maxrdom>] [<maxrdtran>] [<maxtran>]
# [<maxdatalen>] [<security>]
# [<tuxconfig>] [<tuxoffset>]
#
#
DEFAULT: SECURITY = NONE
c01 GWGRP = bankg1TYPE = TDOMAIN
DOMAINID = "BA.CENTRAL01"
DMTLOGDEV = "/usr/apps/bank/DMTLOG"
DMTLOGNAME = "DMTLG_C01"
c02 GWGRP = bankg2TYPE = OSITP
DOMAINID = "BA.CENTRAL01"
DMTLOGDEV = "/usr/apps/bank/DMTLOG"
DMTLOGNAME = "DMTLG_C02"
NWDEVICE = "OSITP"
URCH = "ABCD"
#
*DM_REMOTE_DOMAINS
#<remote domain name> <domain type> <domain id>
#
b01 TYPE = TDOMAINDOMAINID = "BA.BANK01"
b02 TYPE = TDOMAINDOMAINID = "BA.BANK02"
b03 TYPE = TDOMAINDOMAINID = "BA.BANK03"
b04 TYPE = OSITPDOMAINID = "BA.BANK04"
URCH = "ABCD"
#
*DM_TDOMAIN
#
# <local or remote domainname> <network address> [nwdevice]
#
# Local network addresses
c01 NWADDR = "//newyork.acme.com:65432" NWDEVICE ="/dev/tcp"
c02 NWADDR = "//192.76.7.47:65433" NWDEVICE ="/dev/tcp"
# Remote network addresses: second b01 specifies a mirrored gateway
b01 NWADDR = "//192.11.109.5:1025" NWDEVICE = "/dev/tcp"
b01 NWADDR = "//194.12.110.5:1025" NWDEVICE = "/dev/tcp"
b02 NWADDR = "//dallas.acme.com:65432" NWDEVICE = "/dev/tcp"
b03 NWADDR = "//192.11.109.156:4244" NWDEVICE = "/dev/tcp"
#
*DM_OSITP
#
#<local or remote domain name> <apt> <aeq>
# [<aet>] [<acn>] [<apid>] [<aeid>]
# [<profile>]
#
c02 APT = "BA.CENTRAL01"AEQ = "TUXEDO.R.4.2.1"
AET = "{1.3.15.0.3},{1}"
ACN = "XATMI"
b04 APT = "BA.BANK04"AEQ = "TUXEDO.R.4.2.1"
AET = "{1.3.15.0.4},{1}"
ACN = "XATMI"
*DM_LOCAL_SERVICES
#<service_name> [<Local Domain name>] [<access control>] [<exported svcname>]
# [<inbuftype>] [<outbuftype>]
#
open_act ACL = branch
close_act ACL = branch
credit
debit
balance
loan LDOM = c02 ACL = loans
*DM_REMOTE_SERVICES
#<service_name> [<Remote domain name>] [<local domain name>]
# [<remote svcname>] [<routing>] [<conv>]
# [<trantime>] [<inbuftype>] [<outbuftype>]
#
tlr_add LDOM = c01 ROUTING = ACCOUNT
tlr_bal LDOM = c01 ROUTING = ACCOUNT
tlr_add RDOM = b04 LDOM = c02 RNAME ="TPSU002"
tlr_bal RDOM = b04 LDOM = c02 RNAME ="TPSU003"
*DM_ROUTING
# <routing criteria> <field> <typed buffer> <ranges>
#
ACCOUNT FIELD = branchid BUFTYPE ="VIEW:account"
RANGES ="MIN - 1000:b01, 1001-3000:b02, *:b03"
*DM_ACCESS_CONTROL
#<acl name> <Remote domain list>
#
branch ACLIST = b01, b02, b03
loans ACLIST = b04