2.6.3 適切なサーバー・グループで学生の登録が発生するようにする方法
レプリケート・サーバー・グループを使用する、主なスケーラビリティ上の利点は、複数のマシンに処理を分散できることです。しかし、Universityサンプル・アプリケーションの場合のように、アプリケーションがデータベースと対話する場合は、これら複数のサーバー・グループがデータベースとの対話に与える影響を考慮することが重要です。
多くの場合、デプロイされている各マシンに1つのデータベースが関連付けられます。サーバー・アプリケーションが複数台のマシンに分散されている場合は、データベースをどのようにセットアップするかを検討する必要があります。
この章で説明しているように、Productionサンプル・アプリケーションでは、2つのデータベースを使用します。しかし、このアプリケーションは、簡単にそれ以上のデータベースに対応できるよう構成できます。使用するデータベースの数は、システム管理者が決定できます。
Productionサンプル・アプリケーションでは、学生および口座の情報は、2つのデータベース間に分割されますが、コース情報は同一です。コース情報は、コース登録用途では読取り専用となっているため、両方のデータベースのコース情報が同一であることは問題にはなりません。一方で、学生情報および口座情報については読書きが行われます。複数のデータベースが学生および口座についても同一のデータを格納するとしたら(つまり、データベースが分割されていない場合)、アプリケーションでは、学生情報または口座情報が変更されるたびにデータベース全体にわたって学生および口座の情報の更新を同期する処理のオーバーヘッドに対処する必要が生じるでしょう。
Productionサンプル・アプリケーションは、ファクトリ・ベース・ルーティングを使用して、1セットのリクエストを1つのマシンに送信し、別のセットを別のマシンに送信します。RegistrarFactoryオブジェクトでファクトリ・ベース・ルーティングがどのように実装されるかは、Registrarオブジェクトへの参照がどのように作成されるかによって変わります。
たとえば、クライアント・アプリケーションがRegistrarFactoryオブジェクトにリクエストを送信して、Registrarオブジェクトのオブジェクト参照を取得する場合、クライアント・アプリケーションはそのリクエストに学生IDを含めます。ファクトリによって返されたオブジェクト参照はグループ固有のものであるため、クライアント・アプリケーションは、RegistrarFactoryオブジェクトが返すオブジェクト参照を使用して、その後のRegistrarオブジェクトへのすべての呼出しを、特定の学生のために行う必要があります。したがって、たとえばクライアント・アプリケーションがその後、Registrarオブジェクトに対してget_student_details()操作を呼び出すと、クライアント・アプリケーションでは、Registrarオブジェクトが、その学生のデータを格納しているデータベースと関連付けられたサーバー・グループにおいて、確実にアクティブ化されます。
この機能を示すために、Productionサンプル・アプリケーションに実装されている以下の実行シナリオを検討してみます。
- クライアント・アプリケーションは、
RegistrarFactoryオブジェクトのfind_registrar()操作を呼び出します。この呼出しには学生ID1000003が含まれます。 - Oracle Tuxedo CORBAは、クライアント・リクエストを任意の
RegistrarFactoryオブジェクトにルーティングします。 RegistrarFactoryオブジェクトは、学生IDを使用し、UBBCONFIGファイルのルーティング情報に基づいて、ORA_GRP1内のRegistrarオブジェクトへのオブジェクト参照を作成し、そのオブジェクト参照をクライアント・アプリケーションに返します。- クライアント・アプリケーションは、
Registrarオブジェクトのregister_for_courses()操作を呼び出します。 - Oracle Tuxedo CORBAはクライアント・リクエストを受け取り、それをオブジェクト参照で指定されたサーバー・グループにルーティングします。この場合、クライアント・リクエストは、Productionマシン1の
ORA_GRP1内のUniversityサーバー・プロセスに送られます。 - Universityサーバー・プロセスは、
Registrarオブジェクトをインスタンス化し、それにクライアント呼出しを送信します。
前述の説明のRegistrarFactoryオブジェクトは、クライアント・アプリケーションに、Productionマシン1上で実行され、100001から100005までのIDを持つ学生の学生データを格納したデータベースが含まれる、ORA_GRP1内でのみインスタンス化が可能なRegistrarオブジェクトへの一意の参照を返します。したがって、クライアント・アプリケーションが所定の学生のために、その後のリクエストをこのRegistrarオブジェクトに送信すると、Registrarオブジェクトは適正なデータベースと対話を行います。
親トピック: 設計に関するその他の考慮事項