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

ノート:

プロパティを有効にするには、サーバーを再起動する必要があります。

K.4 MLLP 1.0トランスポート・プロトコルのサポート

NIOフレームワークは、現在、MLLP 1.0トランスポート・プロトコルに対するサポートを提供しています。

次のことがサポートされます。

  • 即時確認のサポート

  • 破棄確認のサポート

  • 永続確認のサポート

  • デリバリ・チャネルによるTPの識別

  • 順序付けモード:

    • なし

    • OnetoOne

    • OnetoOneMapping

  • インタフェース順序付け

  • SSL/TLS