グローバルリソースとは
グローバルリソースとは、データベースやメールサーバ、FTPサーバなどのデータリソースへの接続設定です。すべてのプロジェクト・スクリプトから使用できます。
グローバルリソースはコントロールパネルの「グローバルリソースの設定」から登録・変更・削除などの管理を行うことができます。
グローバルリソースには以下のような利点があります。
- 物理設定と論理設定の分離
ビジネスロジックを定義するスクリプトでは、グローバルリソース名を指定することで、接続先のデータリソースを定義します。ホスト名やIPアドレスなどの実際の物理的な接続設定はグローバルリソースの設定となり、スクリプトから隠蔽されます。
スクリプトではグローバルリソース名のみを保持し、接続設定はスクリプト実行時にグローバルリソース名をキーにして取得します。
接続先のデータリソースホスト名やIPアドレスが変更された場合、スクリプトの変更は一切不要で、変更箇所を最小限にとどめることができます。
-
接続設定の一元管理
データベースへの接続などは誰でも変更できるようにはしたくありません。「グローバルリソース設定」では、管理者および作成者のみ編集・削除が可能です。管理者は現在どれくらいの接続(グローバルリソース)があるのか、またその設定がどのようになっているのかなどが一目で分かります。
グローバルリソースは多くの場合、データリソースへ接続するための実際のコネクションを持っています。コネクションの生成は一般的にコストの高い処理といわれています。そのため、一度生成したコネクションをプール(ためる)し、必要となった際にコネクションを再使用することで生成コストを低く抑えます。
このように実際のコネクションをプールする仕組みのことを「コンポーネントプール」と呼びます。
SkyOnDemandでは、「グローバルリソースの設定」で、コンポーネントプールの設定を行うことができます。
設定できる項目は以下の通りです。
- コンポーネントプールの有効/無効
- プールされるコネクションの初期値および上限値
- プールされるコネクションの生存期間
各項目の詳細は以下の通りです。
コンポーネントプールを有効にすると、対象となるデータリソースに実際に接続されたコネクションがプールされることになります。
対象となるデータリソースを管理する上で、使用後すぐにコネクションを解放したい場合もあります。そのような場合にはコンポーネントプールを無効にします。
コンポーネントプールを無効にした場合、データリソースに接続するたびに実際のコネクションの生成が行われるため、パフォーマンスが低下する可能性があります。
プールされるコネクションの初期値には、SkyOnDemand Server起動時にプールされるコネクション数を設定します。
トランザクション数が多く、常時一定数以上のコネクションが必要な場合に、初期値に最低限のコネクション数を設定することを検討してください。
また、初期値に大きな値を設定すると、SkyOnDemand Serverの起動に時間がかかるほか、対象となるデータリソースへ使用されないコネクションが張られることになります。
プールされるコネクションの上限値には、対象となるデータリソースへのコネクションの最大数を設定します。
この値を超えて対象となるデータリソースに接続することはありません。対象のデータリソースのリソース管理を行いたくない場合に、最大値を設定することを検討してください。
最大値が小さすぎると、多くのスクリプトがコネクション使用待ち状態になり、システム全体のパフォーマンスが低下します。逆に大きすぎると、対象のデータリソースがリソース枯渇に陥る可能性があるため、リソース管理という観点からも推奨できません。
対象となるデータリソースへの不可、スクリプトのパフォーマンスのバランスを考慮し、初期値および上限値を設定してください。
プールされるコネクションは接続の生存期間を過ぎた場合、次の「コンポーネントプールGC」が実行されたタイミングで破棄されます。
コンポーネントプールGCとは、プールに格納されたコネクションを定期的にチェックし、ある条件を満たしたコネクションを破棄する機構です。
以下で、グローバルリソースが破棄されるタイミングを説明します。
()内の番号は「コンポーネントプールGC図」の番号を表します。
- (1)と(2)の間のタイミングでグローバルリソースが生成されます。
→生存期間のタイマーがカウントダウンし始めます。
- (2)と(3)の間のタイミングでグローバルリソースが使用されます。
→生存期間のタイマーがリセットされ、プールに戻されたタイミングからカウントダウンし始めます。
- (4)と(5)の間のタイミングでグローバルリソースの生存期間が超過します。
→このタイミングではまだグローバルリソースはプールから破棄されません。
- (5)のタイミングで、グローバルリソースが破棄されます。
|
コンポーネントプールGC図 |
コントロールパネルなどからコンポーネントプールのリセットを行うことができます。
リセット時の動作は以下の通りです。
- 使用していないデータリソースコンポーネントを破棄します。使用している場合は、スクリプト終了後に破棄されます。
- 初期接続数分のデータリソースコンポーネントを作成します。
各グローバルリソースがサポートする接続先のバージョンについて
各グローバルリソースは、[接続タイプ]または[種類]に表示のバージョンのみをサポートします。
[接続タイプ]または[種類]に接続先のバージョン表記がない場合は、各アダプタの「稼働環境」のページでサポートバージョンを確認してください。
たとえば、データベースアダプタなどで接続先のデータベースのバージョンが変更になった場合には、必ずそのバージョンをサポートするグローバルリソースへの変更を行ってください。
グローバルリソース名について
各コンポーネントでは接続先に設定されたグローバルリソースの接続情報の取得を「グローバルリソース名」で行います。
グローバルリソース名を登録する際には、同一SkyOnDemand Server上のほかのコンポーネントで参照していない一意な名前を付けてください。
また、以下のような設定を行うこともできます。
- あるコンポーネントで使用しているグローバルリソース名を変更
- 新規にグローバルリソースを作成し、上記1.で変更する前の名前を指定
こうすることで、スクリプトの変更を行わずに別のグローバルリソースに変更することができます。たとえば、データベースアダプタなどで接続先のデータベースのバージョンが変更になった場合、簡易に対応することができます。
同一コンポーネントのグローバルリソースを使用すること、接続先データベースにスクリプトレベルで変更が必要となる相違点がないこと(テーブル名やカラム名、型情報など)が前提になります。