|
このトピックでは、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 = TDOMAINDOMAINID = "BA.CENTRAL01"DMTLOGDEV = "/usr/apps/bank/DMTLOG"DMTLOGNAME = "DMTLG_C01"
c02 GWGRP = bankg2TYPE = OSITPDOMAINID = "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
|