Skip to main content

 

 

 

 
Language:

 

 

 

 
 
OutSystems

OutSystemsプラットフォームの接続プール

OutSystemsプラットフォームは接続プールを使用することで、アプリケーションの拡張に応じて、そのパフォーマンスを十分に確保します。接続プールでは、アプリケーションがデータベース接続を開いたり閉じたりしません。代わりに、アプリケーションは接続をリクエストし、完了したら接続をプールに返します。

これにより、データベース接続の開閉に伴うパフォーマンスのオーバーヘッドが回避されます。こうすることで、プールに利用できる接続がない場合にのみ新しい接続が開かれます。接続は、一定期間アイドルになった後に閉じられます。

データベースサーバーまたはスキーマに定義するデータベース接続ごとに、OutSystemsは接続プールを作成して接続を管理します。

Platform Serverでは、すべてのタイプのアプリケーション(従来のWeb、モバイル、リアクティブ)に対して同じメカニズムと原理が使用されます。

接続プーリングの内部

プラットフォームでは、標準的な接続プーリングメカニズムを使用しています。

接続数の管理

プールで利用できる接続の最小数と最大数を微調整できます。

.NETスタック

Configuration Toolでは、実行時にアプリケーションで使用される接続文字列をカスタマイズできます。そのためには、[Database]タブに移動し、[Advanced]を選択します。接続文字列で送信できるパラメータについては、データベースサーバーのドキュメントをご覧ください。

Javaスタック

Configuration Toolでは、[Advanced Configurations]で接続数を管理できます。

角括弧内の値は、その設定のデフォルトです。

実行時に使用される最小接続数

.NETスタック

.NETスタックでは、各データベースサーバー各アプリケーションモジュールあたり1つの接続プールが存在します。実行時には、通常は以下のようになります。

(構成された最小接続数)×(アプリケーションモジュール数)×(フロントエンドサーバー数)

以下に例を示します。

  • デフォルトで構成された接続数: 1
  • デプロイされたアプリケーションモジュール数: 10
  • フロントエンドサーバー数: 2

通常はメインデータベースへの接続数が20、セッションデータベースへの接続数が20になります。OutSystems 11以降、さらにログデータベースへの接続数が20追加されます。

Javaスタック

Javaスタックでは、すべてのアプリケーションモジュールに対して1つの接続プールが存在します。そのため、通常は以下のようになります。

(構成された最小接続数)×(フロントエンドサーバー数)

以下に例を示します。

  • デフォルトで構成された接続数: 10
  • デプロイされたアプリケーションモジュール数: 10
  • フロントエンドサーバー数: 2

通常はメインデータベースへの接続数が20、セッションデータベースへの接続数が20になります。

実行時に使用される最大接続数

負荷が高い状態でもアプリケーションがスムーズに動作するように、OutSystemsプラットフォームでは使用するデータベース接続数を増やします。最大接続数は上記と同様に計算できます。このとき、最小接続数を最大接続数に置き換えます。

実際の例

OutSystemsがデータベース接続を処理する方法について理解を深めるために、以下のような構成の標準的な本番環境での動作を分析します。接続プールには、デフォルト値を使用します。また、セッションデータベーススキーマとメインデータベーススキーマは同じデータベースインスタンスに保存されていることを前提とします。

.NET JAVA
フロントエンドサーバー 2 2
アプリケーションモジュール 200 200
最小接続数 1 10
最大接続数 100 100

.NETスタック

.NETスタックでは、アプリケーションモジュールは自動的に読み込まれません。代わりに、最初のアクセスで読み込まれます。つまり、最初は一部のアプリケーションモジュールのみが読み込まれるため、データベース接続数はごくわずかしかありません。

最終的にアプリケーションモジュールがすべて読み込まれると仮定します。

  • 各フロントエンドには、200個のアプリケーションモジュールが存在します。

  • 各アプリケーションモジュールには、アプリケーションモジュールの接続先となるデータベースごとに1個の接続が存在します。OutSystems 10までは、少なくともOutSystemsのセッションデータベースとメインデータベースに接続します。OutSystems 11以降、さらにログデータベースへの接続が追加されます。

このため、OutSystems 10までの接続数は合計で800となり、OutSystems 11の接続数は合計で1200となります。

以下の例の数は、OutSystems 11に基づくものです。

需要の高いシナリオとして、各フロントエンドのあるアプリケーションモジュールに50ユーザーが同時にアクセスするとします。

同時ユーザー数が50の場合、概算で以下の接続が必要です。

  • セッションデータベースへの接続が50個
  • メインデータベースへの接続が50個

注記:

  • ログデータベースの接続数は、同時ユーザーアクセス数に比例しません。同時に書き込む必要があるログの種類の数に基づいてのみ増加します。

  • 数値は概算です。これは、1つのユーザーセッションで複数のデータベース接続が必要になる場合があるためです。プラットフォームでは最適化が実行されるため、アクションフローで複数の接続が使用される可能性があります。

各フロントエンドでデータベースごとに1つの接続がすでに確立されているため、セッションデータベースとメインデータベースのフロントエンドあたり49個の接続が必要となります。このため、接続数は合計で1396となります。

アイドル接続数1200 + (各フロントエンドあたりの接続数49 x フロントエンド数2 x 各フロントエンドあたりのデータベース接続数2)

このアプリケーションモジュールの人気が高まり、現在は各フロントエンドで150件の同時リクエストを受信しているとします。

  • この値は、構成された最大接続数を超えています。
  • 最初の100件のリクエストにのみ同時に応答します。
  • 各フロントエンドサーバーの残りの50件のリクエストは、接続が利用可能になるまで待機する必要があります。この待機に時間がかかりすぎると、リクエストがタイムアウトになります。

こうしたピーク状態では、データベースは以下のようになります。

  • 最小で1200個の接続が開きます。
  • セッションデータベースとメインデータベースのフロントエンドサーバーあたり99個の接続があるため、接続数は合わせて396個となります。 このため、接続数は合計で1596となります。

Javaスタック

JBossとWebLogicのどちらのアプリケーションサーバーでも、アプリケーションサーバーの起動時にすべてのアプリケーションモジュールが読み込まれます。初期化後、各データベース各フロントエンドあたり10個の接続が存在します。少なくともセッションデータベースとメインデータベースがあります。このため、データベースの接続数は合計で40となります。

需要の高いシナリオとして、あるアプリケーションモジュールが各フロントエンドで50件の同時リクエストを受信するとします。

  • セッションデータベースとメインデータベースに対する各接続プールは、すべてのアプリケーションモジュールで共有されます。10個の接続のうち一部は、他のアプリケーションモジュールで使用されている可能性があります。

  • そうした接続のうち5個のみが空いている場合、各データベース各フロントエンドあたり45個の接続が必要となります。

このため、接続数は合計で220となります。

このアプリケーションモジュールの人気が高まり、現在は各フロントエンドで150件の同時リクエストを受信しているとします。

  • まだ5個の空き接続があると仮定します。

  • 構成された最大数に達する前に、さらに95個の接続を作成できます。このため、各フロントエンドサーバーあたり合計で190個の接続が作成されます。

  • 残りの55件のリクエストは接続可能になるまで待機する必要があります。

このように使用頻度の高いピーク時の接続数は、合計で400となります。

  • Was this article helpful?