K NIOを使用したエンドポイント・スケーラビリティの拡張
この付録では、Java New I/O (NIO) APIを使用して多数のエンドポイントのリニア・スケーラビリティを達成する方法について説明します。
この付録の内容は次のとおりです。
K.1 NIOを使用する理由
古いJava IO APIを使用している場合、スレッド管理に関連する問題のため、サーバーを数千のユーザーに拡大することができませんでした。Java New IO (NIO)フレームワークは、Java NIO APIを活用してスケーラブルで堅牢なサーバーを構築できるように設計されたものです。
Javaベースのソケット実装を使用して古いIOシステムでエンドポイントを管理すると、Oracle SOA Suite for healthcare integrationのスケーラビリティの問題が発生します。この問題を解決するために、Oracle SOA Suite for healthcare integrationではNIOベースのトランスポート実装を使用しています。NIOフレームワークは、TCP/IPやUDP/IPなどの各種トランスポートを介する抽象的なイベントドリブンの非同期APIを提供します。
ノート:
否定確認および汎用TCPがサポートされる場合、NIOはサポートされません。
K.2 NIOフレームワークの使用方法
Oracle SOA Suite for healthcare integrationでは、NIOサポートを使用してMLLPメッセージを交換し、待機時間の改善、スケーラビリティの改善、スループットの最大化およびパフォーマンスの最大化を行います。
Oracle SOA Suite for healthcare integrationでは、既存のソケットベースのIO実装に影響を与えることなく、現在のアーキテクチャでNIOの機能をシームレスに使用します。NIOベースのトランスポートに切り替えるには、次の操作を実行する必要があります。
Oracle Fusion Middleware Enterprise Manager Controlコンソールで、b2b.nio
サーバー・プロパティをtrue
に設定します。
ノート:
プロパティを有効にするには、サーバーを再起動する必要があります。
このプロパティが設定されていない場合、デフォルトの動作として既存のソケットベースのトランスポートが使用されます。
ノート:
実行時に両方のトランスポート実装(ソケットIO実装とNIO実装)を一緒に使用することはできません。つまり、あるエンドポイントでNIOベースのトランスポートを使用し、別のエンドポイントでソケットベースのIOトランスポートを使用することはできません。
NIOベースのフレームワークは、MLLP 1.0ベースのメッセージ交換に対して次のサポートを提供します。
-
サーバー・タイプおよびクライアント・タイプのソケット
-
通信の同期モードおよび非同期モード
-
一時接続および永続接続
-
メッセージ交換の再試行およびタイムアウトのポリシー
-
エンドポイントの作成
-
エンドポイントの有効化と無効化
-
エンドポイントの更新
ノート:
NIOフレームワークを使用してダッシュボードから1000個のエンドポイントを有効化または無効化すると、時間がかかります。この機能は、1回に最大100個のエンドポイントで試行することをお薦めします。
K.3 ワーカー・プール・サイズおよびセレクタ・プール・サイズの指定
NIOフレームワークでは、ワーカー・スレッド・プール・モデルに基づく自身のスレッド・プール・デフォルトが使用されます。ただし、Oracle SOA Suite for healthcare integrationでは、ワーカー・スレッド・プール・サイズを指定できます。
ワーカー・プール・サイズを指定するには、Oracle Fusion Middleware Enterprise Manager Controlコンソールで次のプロパティを設定します。
b2b.nio.minWorkerPoolSize
= n (デフォルトは3
)
b2b.nio.maxWorkerPoolSize
= n (デフォルトは5
)
ここで、nはスレッド・プール・サイズです。
Oracle SOA Suite for healthcare integrationランタイムでは、セレクタ・カウントの値がサーバーのCPUの使用可能なコア数と等しい値に自動的に設定されます。セレクタ・プール・サイズの最小値と最大値を構成するには、Oracle Fusion Middleware Enterprise Manager Controlコンソールで次のプロパティを設定します。
-
b2b.nio.minSelectorPoolSize
-
b2b.nio.maxSelectorPoolSize
ノート:
プロパティを有効にするには、サーバーを再起動する必要があります。