特許第6296632号(P6296632)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インテル・コーポレーションの特許一覧

特許6296632マルチスレッドアプリケーションのためのセッションをリマッピングするための技術
<>
  • 特許6296632-マルチスレッドアプリケーションのためのセッションをリマッピングするための技術 図000002
  • 特許6296632-マルチスレッドアプリケーションのためのセッションをリマッピングするための技術 図000003
  • 特許6296632-マルチスレッドアプリケーションのためのセッションをリマッピングするための技術 図000004
  • 特許6296632-マルチスレッドアプリケーションのためのセッションをリマッピングするための技術 図000005
  • 特許6296632-マルチスレッドアプリケーションのためのセッションをリマッピングするための技術 図000006
  • 特許6296632-マルチスレッドアプリケーションのためのセッションをリマッピングするための技術 図000007
  • 特許6296632-マルチスレッドアプリケーションのためのセッションをリマッピングするための技術 図000008
  • 特許6296632-マルチスレッドアプリケーションのためのセッションをリマッピングするための技術 図000009
  • 特許6296632-マルチスレッドアプリケーションのためのセッションをリマッピングするための技術 図000010
  • 特許6296632-マルチスレッドアプリケーションのためのセッションをリマッピングするための技術 図000011
  • 特許6296632-マルチスレッドアプリケーションのためのセッションをリマッピングするための技術 図000012
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6296632
(24)【登録日】2018年3月2日
(45)【発行日】2018年3月20日
(54)【発明の名称】マルチスレッドアプリケーションのためのセッションをリマッピングするための技術
(51)【国際特許分類】
   G06F 11/20 20060101AFI20180312BHJP
   G06F 9/46 20060101ALI20180312BHJP
   G06F 15/00 20060101ALI20180312BHJP
   G06F 13/00 20060101ALI20180312BHJP
【FI】
   G06F11/20 648
   G06F9/46 350
   G06F15/00 420C
   G06F13/00 353C
【請求項の数】8
【全頁数】28
(21)【出願番号】特願2017-44276(P2017-44276)
(22)【出願日】2017年3月8日
(62)【分割の表示】特願2015-151039(P2015-151039)の分割
【原出願日】2015年7月30日
(65)【公開番号】特開2017-130223(P2017-130223A)
(43)【公開日】2017年7月27日
【審査請求日】2017年3月8日
(31)【優先権主張番号】14/486,270
(32)【優先日】2014年9月15日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】龍華国際特許業務法人
(72)【発明者】
【氏名】ドン、ヤオ ズ
(72)【発明者】
【氏名】ティアン、クン
【審査官】 井上 宏一
(56)【参考文献】
【文献】 特開2011− 18106(JP,A)
【文献】 特開2003−179905(JP,A)
【文献】 米国特許出願公開第2014/0040487(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/20
G06F 9/46 −9/54
G06F 13/00
G06F 15/00
(57)【特許請求の範囲】
【請求項1】
第1のアプリケーションを別個に実行することが可能な一次仮想マシン(PVM)または二次仮想マシン(SVM)をホスティングするサーバに複数のトランスポート制御プロトコル(TCP)接続を介して結合されるクライアント側の装置であって、
前記装置は、
前記複数のTCP接続のうち別個のTCP接続を介して、前記第1のアプリケーションにより生成された第1のセッションおよび第2のセッションを受信するための、ソフトウェアまたはファームウェア実装された受信コンポーネントと、
前記第1のセッションおよび前記第2のセッションについての識別子情報を有するセッションインデックスを受信するための、ソフトウェアまたはファームウェア実装されたインデックスコンポーネントと、
前記セッションインデックスに基づいて、前記第1のセッションおよび前記第2のセッションを前記複数のTCP接続のうち同一のTCP接続に再グループ化するための、ソフトウェアまたはファームウェア実装された再グループ化コンポーネントと、
前記同一のTCP接続を介して、前記第1のセッションおよび前記第2のセッションを、第2のアプリケーションの第1のソケットアプリケーションインターフェースおよび第2のソケットアプリケーションインターフェース(API)のそれぞれに転送するための、ソフトウェアまたはファームウェア実装された転送コンポーネントと
実行する回路を備え
前記第1のセッションおよび前記第2のセッションは、クライアントにおける前記第2のアプリケーションによって前記第1のアプリケーションにすでに送信された要求に応答して生成される
装置。
【請求項2】
前記識別子情報は、前記第1のアプリケーションに対する前記第1のセッションを生成するべく用いられる第1のスレッドに割り当てられた第1のスレッド名もしくは識別子と、前記第1のアプリケーションに対する前記第2のセッションを生成するべく用いられる第2のスレッドに割り当てられた第2のスレッド名もしくは識別子とを含む、請求項1に記載の装置。
【請求項3】
前記識別子情報は、前記第1のセッションの生成に関連する第1のインターネットプロトコル(IP)アドレスを含む第1のプロトコルスタックパターンと、前記第2のセッションの生成に関連する第2のIPアドレスを含む第2のプロトコルスタックパターンとを含む、請求項1に記載の装置。
【請求項4】
前記回路に接続され、ユーザインターフェース表示を提示するデジタルディスプレイを備える請求項1に記載の装置。
【請求項5】
複数のトランスポート制御プロトコル(TCP)接続を介してサーバに結合されるクライアントの装置であって、
前記複数のTCP接続のうち別個のTCP接続を介して第1のセッションおよび第2のセッションを受信する手段と、
前記第1のセッションおよび前記第2のセッションについての識別子情報を有するセッションインデックスを受信する手段と、
前記セッションインデックスに基づいて、前記第1のセッションおよび前記第2のセッションを前記複数のTCP接続のうち同一のTCP接続に再グループ化する手段と、
前記同一のTCP接続を介して、前記第1のセッションおよび前記第2のセッションを、第2のアプリケーションの第1のソケットアプリケーションインターフェースおよび第2のソケットアプリケーションインターフェース(API)のそれぞれに転送する手段と
を備え、
前記第1のセッションおよび前記第2のセッションは、前記サーバによりホスティングされる一次仮想マシンまたは二次仮想マシンにより実行される第1のアプリケーションにより生成され、前記別個のTCP接続を介して前記サーバから出力され、
前記第1のセッションおよび前記第2のセッションは、クライアントにおける前記第2のアプリケーションによって前記第1のアプリケーションにすでに送信された要求に応答して生成される
装置。
【請求項6】
前記識別子情報は、前記第1のアプリケーションに対する前記第1のセッションを生成するべく用いられる第1のスレッドに割り当てられた第1のスレッド名もしくは識別子と、前記第1のアプリケーションに対する前記第2のセッションを生成するべく用いられる第2のスレッドに割り当てられた第2のスレッド名もしくは識別子とを含む、請求項5に記載の装置。
【請求項7】
前記識別子情報は、前記第1のセッションの生成に関連する第1のインターネットプロトコル(IP)アドレスを含む第1のプロトコルスタックパターンと、前記第2のセッションの生成に関連する第2のIPアドレスを含む第2のプロトコルスタックパターンとを含む、請求項5に記載の装置。
【請求項8】
前記第1のセッションおよび前記第2のセッションを前記同一のTCP接続に再グループ化する前記手段は、前記サーバにおいて用いられるのと同一のラウンドロビンポリシを用いて、前記サーバにおける前記同一のTCP接続からの前記第1のセッションおよび前記第2のセッションを、前記別個のTCP接続にリマッピングする手段を含む、請求項5に記載の装置。
【発明の詳細な説明】
【技術分野】
【0001】
本明細書において説明される例は、概ね、サーバとクライアントとの間のマルチスレッドプログラムにより生成されたデータをルーティングすることに関する。
【背景技術】
【0002】
複数のクライアントコンピューティングデバイスに結合された複数のネットワークサーバは、単一のコンピューティングプラットフォームによりサポートされる複数のオペレーティングシステムおよび/またはアプリケーションを可能とする仮想マシン(VM)をサポートまたはホスティングするべくますます構成されるようになっている。また、複数のVMをホスティングするサーバに高い利用可能性が所望である場合に、一次VM(PVM)および二次VM(SVM)は各々、別個の複数のサーバまたはノード(例えば、データセンタ内)においてホスティングされることがあり、それらの状態が再現され得る。複数の状態のこの再現は、「ノンストップサービス」のためのアプリケーションアグノスティックな、ソフトウェア実装されたハードウェアのフォールトトレンランスソリューションを提供し得る。フォールトトレンランスソリューションは、PVMをホスティングするサーバがハードウェア障害を被り、および/またはPVMが障害状態に陥った場合に、SVMが引き継ぐ(フェールオーバ)ことを可能にし得る。
【0003】
ロックステッピングは、1つの命令毎に複数のVM状態を再現し得るフォールトトレンランスソリューションである。例えば、PVMおよびSVMは、複数の決定論的命令においては並行して、実行されるが、複数の決定論的命令についてはロックステップする。しかし、各メモリアクセスが非決定論的であり得る複数のマルチプロセッサ(MP)実装を扱う場合に、ロックステッピングは、非常に大きなオーバヘッドを被り得る。
【0004】
チェックポイントは、複数の周期的エポックでSVMに対してPVM状態を再現する別のフォールトトレランスソリューションである。チェックポイントにおいては、好結果のフェールオーバを保証するべく、全ての出力パケットは、好結果のチェックポイントが完了するまでバッファリングされる必要があり得る。VM環境における好結果のチェックポイントに至るまでバッファリングすることは、出力パケットバッファリングおよび頻繁なチェックポイントに起因して更なるネットワークのレーテンシおよびオーバヘッドをもたらし得る。
【0005】
コースグレインのロックステッピング(COLO)は、クライアントからの同一の要求/データ(入力)ネットワークパケットを提供されるPVMおよびSVMの双方を有する、別のフォールトトレランスソリューションである。COLOをサポートするロジックは、PVMおよびSVMの複数の出力応答をモニタリングすることが可能であり、SVMにより生成されたネットワーク応答(出力)がPVMのものと一致する限り、SVMの状態をPVMの状態の有効なレプリカとみなし得る。所与のネットワーク応答が一致しない場合、クライアントへのネットワーク応答の送信は、PVM状態がSVM状態に同期される(新しいチェックポイントを強制する)まで保留される。従って、COLOは、フォールトトレンラントなシステムがSVMに対するフェールオーバにより高度に利用可能であることを保証し得る。SVMの内部状態がPVMのものと異なることを非決定論が意味したとしても、高い利用可能性は、存在し得、SVMは、同様に有効であり、外部のオブサーバの視点から見て、COLOを実装するフォールトトレンラントなシステムと依然として一致する。従って、COLOは、純粋なロックステップ、またはチェックポイントによるフォールトトレランスソリューションに対する複数の利点を有し得る。
【0006】
複数のCOLOフォールトトレンランスソリューションは、トランスポート制御プロトコル(TCP)スタックに関連するものとして、そのような複数のプロトコルを利用し得る。TCPスタックは、1つの接続毎に状態を有するように構成され得、パケット損失および/またはパケット再配列から回復することが可能となり得る。COLOは、TCP接続毎の応答パケット比較を用いることを含み得る。PVMから出力された各TCP接続の複数の応答パケットがSVMから出力された各TCP接続の複数の応答パケットに一致する場合に、TCP接続毎の応答パケット比較は、SVM状態を有効なレプリカとみなし得る。この一致は、複数のTCP接続全体における可能なパケット配列とは関係ない。
【図面の簡単な説明】
【0007】
図1】例示的な第1のシステムを図示する。
図2】複数の例示的なプログラミングモデルを図示する。
図3】例示的な第2のシステムを図示する。
図4】例示的な第3のシステムを図示する。
図5】例示的なTCPフローを図示する。
図6】装置の例示的なブロック図を図示する。
図7】第1のロジックフローの一例を図示する。
図8】第2のロジックフローの一例を図示する。
図9】第3のロジックフローの一例を図示する。
図10】ストレージ媒体の一例を図示する。
図11】例示的なコンピューティングプラットフォームを図示する。
【発明を実施するための形態】
【0008】
本開示において企図されるように、COLOは、純粋なロックステップ、またはチェックポイントによるフォールトトレランスソリューションに対する複数の利点を有し得る。COLOは、PVMおよびSVMをホスティングする複数のサーバを用いることにより、高度に利用可能なフォールトトレンラントなシステムの性能を大きく向上させ得る。しかし、COLOの性能は、各TCP接続の出力の類似性に依存する。例えば、TCP接続毎のPVMおよびSVMの同一の出力パケットの数が生成され得、あるいはPVMおよびSVMの持続時間は、全てのTCP接続に対する一致する出力パケットを生成し得る。
【0009】
出力の類似性に対する潜在的に大きな影響は、PVMまたはSVMにより実行される複数のマルチスレッドアプリケーションにより実装されたプログラミングモデルであり得る。例えば、国際標準化機構(ISO)の1996年6月に刊行された刊行物ISO/IEC7498−1により説明される開放型システム間相互接続(OSI)モデルのレイヤ5、6または7等のより高い複数のレベルのレイヤに対するプログラミングモデルである。TCP接続毎の応答パケットを生成するべく、専用のスレッドが用いられる場合、出力は、PVMおよびSVMの間で一致する可能性が高い。これは、シングルセッションプログラミングモデルと呼ばれる。一方、より高い複数のOSIレイヤのためのプログラミングモデルが単一のTCP接続にマージされる複数のスレッド(マルチセッションプログラミング)を用いる場合、出力の類似性が問題となる。出力の類似性は、マルチセッションプログラミングにおける各スレッドの実行時間がPVMとSVMとの間で異なり得るので問題となることがある。本明細書において説明される複数の例が必要とされるのは、この問題に関してである。
【0010】
いくつかの第1の例によれば、マルチスレッドアプリケーションのための複数のセッションをリマッピングするための技術は、アプリケーションを別個に実行することが可能なPVMまたはSVMをホスティングするように構成されたサーバ用の回路において、アプリケーションから行われた第1および第2のソケットAPIの呼び出しを傍受することを含み得る。これらの第1の例においては、第1および第2のソケットAPIは、第1および第2のセッションのそれぞれを、サーバのクライアントに結合された複数のTCP接続のうち同一のTCP接続を介した予期される出力にルーティングするように構成され得る。第1および第2のセッションは、クライアントから受信されたデータに応答して、アプリケーションにより生成され得る。複数の技術は、第1および第2のセッションについての第1および第2の識別子情報のそれぞれを用いてセッションインデックスを生成し、次いで第1および第2のセッションを複数のTCP接続のうち別個の複数のTCP接続を介した実際の出力にリマッピングすることも含み得る。第1および第2のセッションは、リマッピングされ、セッションインデックスは、第1および第2のセッションを同一のTCP接続と再度組み合わせるべく、クライアントにおいて用いられることが可能である。
【0011】
いくつかの第2の例において、マルチスレッドアプリケーションのための複数のセッションをリマッピングするための技術は、複数のTCP接続を介してサーバに結合されたクライアント用の回路において、複数のTCP接続のうち別個の複数のTCP接続を介して、第1および第2のセッションを受信することを含み得る。これらの第2の例においては、第1および第2のセッションは、サーバによりホスティングされるPVMまたはSVMにより実行される第1のアプリケーションにより生成され、別個の複数のTCP接続を介してサーバから出力され得る。第1および第2のセッションは、クライアントにおける第2のアプリケーションにより第1のアプリケーションにすでに送信された要求に応答して生成され得る。複数の技術は、第1および第2のセッションについての識別子情報を有するセッションインデックスを受信し、セッションインデックスに基づいて複数のTCP接続のうち同一のTCP接続に対して第1および第2のセッションを再グループ化することも含み得る。複数の技術は、同一のTCP接続を介して、第2のアプリケーションに対する第1および第2のソケットAPIそれぞれに第1および第2のセッションを転送することも含み得る。
【0012】
図1は、例示的な第1のシステムを図示する。いくつかの例において、図1に示されるように、第1の例示的システムは、システム100を含む。システム100は、内部ネットワーク130を介して二次ノード/サーバ120に結合された一次ノード/サーバ110を有するデータセンタ105を含む。また、図1に示されるように、一次ノード110または二次ノード120は、ネットワーク140によりルーティングされるネットワーク(NW)通信チャネル142を介してクライアント150に結合され得る。
【0013】
いくつかの例によれば、一次ノード110および二次ノード120は、フォールトトレンランスシステムの一部として構成され得る。これらの例において、一次ノード110は、PVM112をホスティングするように構成され得、二次ノード120は、SVM122をホスティングするように構成され得る。PVM112およびSVM122の双方は、同一のアプリケーション101を別個に実行することが可能であり得る。いくつかの例において、アプリケーション101は、複数のセッションを同一のTCP接続にルーティングするマルチセッションプログラミングモデルを使用し得る。このタイプのマルチセッションプログラミングモデルは、より詳細に以下に説明される。
【0014】
いくつかの例において、一次ノード110および二次ノード120は各々、それぞれのハートビート115および125を保持して、PVM112およびSVM122についての正常ステータスを通信し得る。例えば、ハートビート115は、PVM112についての正常ステータス情報を中継し、PVMが障害を起こし、または応答不能になり、従ってSVM122に、フェールオーバし、クライアント150からの複数の要求を提供または処理するPVMになるように要求しているか否かを二次ノード120が判断することを可能にし得る。同様に、ハートビート125は、SVM122についての正常ステータス情報を中継し、一次ノード110に、SVMが障害を起こし、または応答不能になり、従って別のSVMに、PVM112に対するフォールトトレンランスを提供するように構成されることを要求しているか否かを判断することを可能にし得る。
【0015】
いくつかの例によれば、PVM112およびSVM122は、クライアント150におけるアプリケーション152から受信された複数の要求を処理するための同一のネットワークドメイン0内で動作し得る。これらの例において、複数の要求は、一次ノード110における外部NWインターフェース118を介して、NW通信チャネル142経由で受信され得る。その後、複数の要求は、PVM112およびSVM122の双方において実行されるアプリケーション101に同時にルーティングされ得る。一次ノード110およびCOLOマネージャ124におけるCOLOマネージャ114は、アプリケーション101により生成された複数の出力/応答をモニタリングし得る。COLOマネージャ114および124は、複数の出力/応答が一致しない場合に複数の出力/応答を留保し、それぞれのストレージ116および126に保留された複数の出力/応答を少なくとも一時的に格納し得る。次いで、COLOマネージャ114および124は、新しいチェックポイント(例えば、VMチェックポイント113および123)に強制して、SVM122がSVM112と同期されるようにし得る。
【0016】
いくつかの例において、マルチセッションプログラミングによりPVM112およびSVM122において別個に実行されるアプリケーション101の間の可能性のある出力の不均衡を減少させ得る、複数の技術が実行され得る。以下に更に説明されるように、これらの技術は、これらのセッションを実際に出力する異なる複数のTCPセッションにリマッピングすることにより、同一のTCP接続を介して予期される出力に対する複数のセッションを切断することが可能なロジックおよび/または複数の特徴(図1において示されない)を含み得る。次いで、リマッピングされた複数のTCPセッションに対する実際の複数の出力/応答は、COLOマネージャ114および124により比較され、PVM112およびSVM122が同期された状態にあるか否かを判断し得る。COLOマネージャ114および124によるこの比較は、典型的に、TCP毎の接続に依存する。クライアント150における類似の切断ロジックおよび/または複数の特徴は、アプリケーション101がこれらの出力/応答をルーティングすることを最初に想定していたという複数の出力/応答を、同一のTCP接続を介してクライアント150におけるアプリケーション152に提供する前に、複数のセッションを再グループ化することが可能であり得る。従って、アプリケーション101およびアプリケーション152の双方は、この切断を認識していないことがある。
【0017】
図1は、ネイティブデバイスドライバを起動し、他の複数のゲストを管理するべく、ドメイン0等の特権を付与されたゲストのオペレーティングシステムが用いられ得る、1タイプのハイブリッド仮想マシンマネージャ(VMM)のモデルを図示する。他の複数の例において、ハイパーバイザモデルまたはホストベースのモデル等、複数のタイプのVMモデルが、データセンタ105に類似するデータセンタにおいて実装され得る。これらの他の例においては、ハイパーバイザモデルまたはホストベースのモデルは、タイプIIのVMMモデルであってもよい。一方、図1に示されるハイブリッドVMモデルは、タイプIのVMMモデルであり得る。複数の例は、タイプIまたはタイプIIのVMMモデルのみに限定されない。マルチスレッドアプリケーションのための複数のセッションをリマッピングするための複数の例は、双方のタイプのVMモデルに等しく適用され得る。
【0018】
図2は、複数の例示的なプログラミングモデル200を図示する。いくつかの例において、図2に示されるように、シングルセッションプログラミング210は、アプリケーションレイヤ212、プレゼンテーションレイヤ214、およびセッションレイヤ216のためのより高いレベルのレイヤのスタック処理にシングルスレッドを用いることを含み得る。このシングルスレッドからの複数の出力は、TCPレイヤ218におけるTCP接続215を介して、ソケットアプリケーションインターフェース(API)217においてルーティングされ得る。これらの例において、TCPパケット219は、次にTCPパケット219の生成をもたらす要求のソースに最後の提供を行うべく、OSIプロトコルスタックの複数のより低いレイヤ(例えば、ネットワーク、データリンク、または物理的レイヤ)に送信または出力され得る。PVMまたはSVMにより実行されるアプリケーションにより実行される場合にシングルセッションプログラミング210を用いると、TCPパケット219の類似の複数の出力をもたらす可能性が高くなり得る。従って、COLOのフォールトトレランススキームは、このタイプのシングルセッションプログラミングと良好に機能し得る。
【0019】
いくつかの例によれば、図2に示されるように、マルチセッションプログラミング220は、複数のスレッドT1、T2、T3、およびTnを用いることを含み得、「n」は、3より大きい任意の正の全ての整数であり得る。これらの例において、スレッドT1〜Tnは、アプリケーションレイヤ222、プレゼンテーションレイヤ224、およびセッションレイヤ226のためのより高いレベルのレイヤのスタック処理に用いられ得る。次いで、スレッドT1〜Tnに対する複数の出力は、TCPレイヤ228におけるTCP接続225を介してソケットAPI227においてルーティングされ得る。TCPパケット229は、次にTCPパケット219の生成をもたらす要求のソースに最後の提供を行うべく、OSIプロトコルスタックの複数のより低いレイヤに送信または出力され得る。シングルセッションプログラミング210と対照的に、PVMまたはSVMにより実行されるアプリケーションにより実行される場合にマルチセッションプログラミング220を用いると、複数のTCPパケット219の異なる複数の出力をもたらす可能性が高くなり得る。すでに言及されたように、この相違は、各スレッド間の実行時間における変更に起因することがある。マルチセッションプログラミング220に用いられるスレッドの数が増加するので、これらの変更は、増加する可能性が高い。PVMとSVMとの間のTCPパケット219に対する複数の出力の変更は、COLOのフォールトトレランススキームの性能に対する問題となり得る。
【0020】
図3は、例示的な第2のシステムを図示する。図3に示されるように、例示的な第2のシステムは、システム300を含む。いくつかの例において、システム300は、ノードまたはサーバによりホスティングされるPVMまたはSVMにより実行され得るアプリケーション310を含み得る。ノードまたはサーバは、例えば、図1に示されるデータセンタ105等のデータセンタに位置し得る。また、アプリケーション310は、図1において示されるクライアント150等のサーバに結合されたクライアントにおいて実行され得る。いくつかの例によれば、アプリケーション310は、それぞれのスレッド1、2、3、およびnにより実行されるセッション312―1、312―2、312―3、および312―nを含み得るマルチセッションプログラミングモデルを用いるように構成され得る。これらの例において、アプリケーション310は、元のソケットAPI315を呼び出し、同一のTCP接続311を介して予期される出力に対するセッション312―1〜312―nをルーティングし得る。複数の出力は、受信された要求(例えば、クライアントからサーバに、または逆にサーバからクライアントに)関連または関係し得る。
【0021】
いくつかの例において、図3に示されるように、システム300は、アプリケーション310およびTCPレイヤ330に対する複数のセッション出力の間に位置するTCPデカップラ320も含み得る。これらの例において、TCPデカップラ320は、リマッピング/再グループ化ロジック322を含み得る。リマッピング/再グループ化ロジック322は、TCP接続311を介して出力するべく、セッション312―1〜312―nをルーティングするように構成された複数の元のソケットAPI315を傍受することが可能であり得る。また、リマッピング/再グループ化ロジック322は、セッション312―1〜312―nについての識別子情報を取得することが可能であり、セッションインデックス324を生成し、その次にTCPレイヤ330において別個の複数のTCP接続332―1〜332―nを介する実際に出力するためにセッション312―1〜312―nをリマッピングし得る。リマッピング/再グループ化ロジック322は、例えば、新しい複数のソケットAPI325を呼び出し、TCP接続332―1〜332―nを介した実際の複数の出力のためにセッション312―1〜312―nをルーティングし、TCPパケット334がこれらの異なるTCP接続を介して出力されるようにし得る。
【0022】
いくつかの例によれば、セッションインデックス324は、セッション312―1〜312―nがアプリケーション310から出力されるようにした要求アプリケーションを生じたサーバまたはクライアントに通信し得る。この点で、セッションインデックス324は、サーバまたはクライアントにおいて用いられることが可能であり、要求アプリケーションに提供する前にセッション312―1〜312―nをTCP接続311と再度組み合わせることができる。いくつかの例において、識別子情報は、(例えば、アプリケーション310により)スレッド1〜nの各々に別個に割り当てられた複数のスレッド名または識別子を含み得る。いくつかの他の例において、識別子情報は、それぞれのセッション312―1〜312―nを生成するためのプロトコルスタックパターンを実行することに関連するコードパターン(例えば、インターネットプロトコル(IP)アドレスを含む)の組み合わせ等、セッション312―1〜312―nと関連する複数のプロトコルスタックパターンを含み得る。
【0023】
いくつかの例において、アプリケーション310は、複数のソケットAPIのダイナミックリンクライブラリ(図示せず)を使用して、TCP接続311を含む複数のTCP接続を介して予期される出力に対するセッション312―1〜312―nをルーティングし得る。これらの例においては、リマッピング/再グループ化ロジック322は、ダイナミックリンクライブラリをTCPデカップルリンクライブラリ(図示せず)で代用することにより元の複数のソケットAPI315を傍受することが可能であり得る。次に、代用されるTCPデカップルリンクライブラリは、TCP接続322―1〜322―nを介して実際の出力のためにセッション312―1〜312―nをリマッピングするべく、用いられ得る。デカップルリンクライブラリは、セッションインデックス124と通信し、要求アプリケーションに提供する前に、要求元クライアントまたはサーバがセッション312―1〜312―nをTCP接続311と再度組み合わせることを可能にし得る。
【0024】
図3には示されていないが、いくつかの例によれば、アプリケーション310とTCPレイヤ330との間のTCPデカップラ320をむしろ展開する。TCPデカップラ320は、TCPレイヤ330に含まれ得る、組み込まれたインサイダレイヤ4(TCP)ソフトウェアであってもよい。例えば、カーネルTCP/IPスタックに組み込まれる。
【0025】
いくつかの例によれば、要求元クライアントは、ラウンドロビンポリシを含むが、これに限定されない再グループ化ポリシを用いてTCP接続311にセッション312―1〜312―nを再グループ化することが可能であり得る。また、一次ノードの障害(例えば、ハードウェア障害)に起因するフェールオーバの場合に、複数の内部TCPエラー制御メカニズムは、SVMを用いて障害を起したPVMのTCP状態を回復するべく使用され、TCP接続毎ベースで複数の応答パケットを更に提供し得、次いで応答パケットは、再グループ化ポリシにより再グループ化され得る。
【0026】
いくつかの例において、セッション312―1〜312―nのリマッピングは、モニタリングされる複数の出力が複数のマルチセッションプログラミングモデルを用いるアプリケーションに対するものである場合、PVMまたはSVMをホスティングするように構成された一次または二次ノードにおいて、COLOマネージャに対する1つのTCP出力毎の類似性を向上させ得る。また、いくつかの例において、セッション312―1〜312―nは、図3に示された1:1のマッピングではなく複数のセットのTCP接続にマッピングされ得る。例えば、TCP接続311からリマッピングすることは、m:1の比に応じてリマッピングすることを含み得、「m」は、1よりも大きい任意の正の全整数値であり、セッション312―1〜312―n以外のmのセッションは、マッピングされ、TCP接続332―1〜332―n以外の単一のTCP接続を共有し得る。TCP接続311からリマッピングすることは、m:oの比に応じてリマッピングすることも含み得、「o」は、mよりも大きい任意の正の全整数値である。m:oの比については、セッション312―1〜312―n以外のmのセッションは、TCP接続332―1〜332―nのうち複数のoTCP接続にマッピングされ得る。1:1、m:1、またはm:oのこれらの比は、これらのリマッピングスキームを使用し得るシステムの必要性に基づいて柔軟に確立され得る。例えば、複数のTCP接続は、所与のシステムにおいて限定され、または豊富であり、所与のシステムの要求に基づいて変動もし得る。従って、所与のシステムの必要性に適合する比は、それに応じて調整され得る。
【0027】
図4は、例示的な第3のシステムを図示する。図4に示されるように、例示的な第3のシステムは、システム400を含む。いくつかの例において、図4に示されるように、システム400は、NW通信チャネル430を介してサーバ420に結合されたクライアント410を含む。これらの例において、クライアント410は、アプリケーション412、TCPデカップラ414、およびオペレーティングシステム(OS)のTCPスタック416を含み得る。また、サーバ420は、アプリケーション422、TCPデカップラ424、およびOS TCPスタック426を含み得る。サーバ420は、例えば、アプリケーション422を実行することが可能であり得るPVMまたはSVM(図示せず)をホスティングするように構成され得る。
【0028】
いくつかの例によれば、アプリケーション412および422の双方は、App_Socket411および421のそれぞれを呼び出し、同一のTCP接続を介して複数のセッションをルーティングするマルチセッションプログラミングモデルを使用する、少なくとも1つのアプリケーションを含み得る。図3について上に説明されたTCPデカップラ320と同様に、TCPデカップラ414および424は、複数の異なるTCP接続を介して、それぞれのOS_Socket415に実際に出力する複数のセッションをリマッピングすることが可能であり得る。例えば、TCPデカップラ424のリマッピング/再グループ化ロジック423は、これらのセッションを傍受し、識別子情報を得、セッションインデックス405を生成し、次いでOS TCPスタック426における異なるか、または別個の複数のTCP接続を介してOS_Socket425に対する出力の複数のセッションをリマッピングし得る。次に、OS TCPスタック426は、NW通信チャネル430を介して複数の応答TCPパケットをクライアント410へとルーティングし得る。次に、TCPデカップラ414のロジック413を再グループ化すると、複数の異なるTCP接続にリマッピングされた複数のセッションは、アプリケーション422がこれらのセッションを最初にマッピングしたのと同一のTCP接続と再グループ化され得る。セッションインデックス405は、TCPデカップラ414により用いられ、アプリケーション412に提供するべく、複数のセッションを同一のTCP接続と再グループ化し得る。
【0029】
いくつかの例において、リマッピング/再グループ化ロジック423は、アプリケーション422により生成された複数のセッションを選択的に傍受し、再度ルーティングすることが可能であり得る。例えば、アプリケーション422は、シングルセッションプログラミングモデルを実行する第1のアプリケーションと、マルチセッションプログラミングモデルを実行する第2のアプリケーションとを含み得る。リマッピング/再グループ化ロジック423は、リマッピングする第2のアプリケーションのみを選択的に傍受し得る。シングルセッションプログラミングは、複数のスレッドを用いるマルチセッションプログラミングの場合に生じる可能性が高い、ありうる異なる複数の出力による損害がないので、リマッピング/再グループ化ロジック423は、第1のアプリケーションを選択しないことがある。従って、サーバ420によりホスティングされるPVMとSVMとの間の出力の類似性を向上させるのに、シングルセッションプログラミングについては、リマッピングは必要とされないことがある。
【0030】
いくつかの他の例において、アプリケーション422は、複数のTCP接続を用いてもよく、これらの複数のTCP接続の一部のみがリマッピング/再グループ化ロジック423により傍受およびリマッピングされ得る。例えば、1つのTCP接続は、シングルセッションプログラミングモデルと共に用いられるが、他のTCP接続は、マルチセッションプログラミングモデルと共に用いられる。これらの他の例において、マルチセッションプログラミングモデルと共に用いられた他のTCP接続のみが、傍受され得る。
【0031】
図5は、例示的なTCPフロー500を図示する。いくつかの例において、TCPフロー500は、TCPプログラミングインターフェースのパラダイムであってもよく、TCPクライアント510とTCPサーバ520との間の通信のフローを図示し得る。図5に示されるように、TCPフロー500は、TCP接続設定505、データ交換515、およびTCPテアダウン525を含むTCPプログラミングのための様々なフェーズまたはステージを含み得る。いくつかの例によれば、TCPデカップラ320またはTCPデカップラ413/423等のTCPデカップラは、同一のTCP接続に対する出力のための複数のセッションをルーティングするように構成された複数のソケットAPIを傍受するべく、APIエミュレーションが可能であり得る。当該APIエミュレーションは、様々なフェーズのどれが当該APIエミュレーションが対象とされるTCP接続設定505、データ交換515、またはTCPテアダウン525を含むかに基づいて行われ得る。
【0032】
いくつかの例によれば、TCP接続設定505におけるAPIエミュレーションについては、TCPデカップラは、複数のセッションのためのソケットAPI(図5においてsocket()として示される)を傍受し、これらの傍受されたソケットAPIに対して即時に複数のOS_socket APIを生成し得る。例えば、os_socket_x(x=1,2,3,...n)であれば、app_socket_1を有するアプリケーションを返す。これらの例において、app_socket_1は、TCPデカップラのみにおいて有効であってもよい。アプリケーションは、複数の他のapp_socket_x(x=2,3...)も同様に生成し得る。同一のポリシは、os_socket_x(x=1,2,...,n)に対するOS_socketレイヤのbind()、listen()、connect()、およびaccept()のオペレーションにより、app_socket_1のbind()、listen()、connect()、およびaccept()API accessに適用され得る。
【0033】
いくつかの例において、TCP接続設定505におけるAPIエミュレーションは、os_socketレイヤアクセスを即時に含むことなく、複数の内部ソフトウェア状態を純粋に伴うsocket()、bind()、listen()、connect()、およびaccept()APIをエミュレートするデカップラも含み得る。これに代えて、TCP接続設定505が完了(例えば、TCP3―wayハンドシェークが完了)したことを検出すると、TCPデカップラがos_socketレイヤの複数の接続os_socket_x(x=1,2,3,...n)を設定し、そして、os_socket layer socket()、bind()、listen()、connect()、およびaccept()APIを用いて、socket()で返されるsocket_1で返されるapp_socket_1とマッピングする。いくつかの例において、TCPデカップラは、次にTCPテアダウン525において、TCPクライアント510から送信されたTCPサーバ520において読み取られたファイル終了(EOF)メッセージに応答して、os_socket_xにマッピングされた複数のセッションを除去し得る。
【0034】
いくつかの例によれば、データ交換515におけるAPIエミュレーションは、複数のアウトバウンドデータセッションに対して、一意なセッションインデックスとして、現在の所与のスレッドの識別子および/または所与のスレッドの名前および/またはコール関数IPアドレスを用いるTCPデカップラを含み得る。TCPデカップラは、os_socket_x接続IDの場合に、固定マッピングテーブル(リニアテーブル等)をアドレス指定するべくセッションインデックスを用い、あるいはセッションからos_socketにマッピングするコリジョンチェーンを有するハッシュテーブルを用い得る。これらの例においては、ゲストOSタスクマネージメントコンポーネントは、各スレッドに対しても同様に一意な識別子を提供するべくフックされ得る。os_socket_xが選択されると、TCPデカップラは、os_socket_xのwrite()APIを用いてセッションデータ(例えば、セッションインデックス)を送信し得る。一方、クライアント510は、複数のTCP接続からのread()APIを用いてセッションデータを受信すると、それらを互いに組み合わせ、再グループ化された複数のセッションをクライアント510におけるセッションレイヤに提供し得る。
【0035】
図6は、装置600の例示的なブロック図を図示する。図6に示されるように、第1の装置は、装置600を含む。図6に示す装置600は一定のトポロジにおいて限定された数の要素を有するが、装置600は、所与の実装のために所望の代替のトポロジにおいて、より多いか、またはより少ない要素を含んでもよいことを理解されたい。
【0036】
装置600は、サーバまたはクライアントコンピューティングデバイスにおいて保持された回路620によりサポートされ得る。回路620は、1または複数のソフトウェアもしくはファームウェア実装されたモジュールまたはコンポーネント622―aを実行するように構成され得る。本明細書で用いられる「a」、「b」、および「c」、ならびに類似の標記は、任意の正の整数を表す変数であることが意図されていることは留意に値する。従って、例えば、実装がa=6の値を設定する場合、コンポーネント622―aに対するソフトウェアまたはファームウェアの完全なセットは、コンポーネント622―1、622―2、622―3、622―4、622―5、または622−6を含み得る。提示される複数の例は、この文脈において限定されず、終始用いられる異なる複数の変数は、同一または異なる整数値を表し得る。また、これらの「コンポーネント」は、コンピュータ可読媒体内に格納されたソフトウェア/ファームウェアであってもよく、複数のコンポーネントは、図6において複数の離散的ボックスとして示されているが、これは、別個の複数のコンピュータ可読媒体コンポーネント(例えば、別個のメモリ等)に格納するこれらのコンポーネントを限定するものではない。
【0037】
いくつかの例によれば、回路620は、プロセッサまたはプロセッサ回路を含み得る。回路620は、複数の処理コアまたは要素を含み得るサーバまたはクライアント(例えば、一次ノード/サーバ110、二次ノード/サーバ120、サーバ420、またはクライアント410)における回路の一部であってもよい。1または複数の処理コアを含む回路としては、AMD(登録商標)のアスロン(登録商標)、デュロン(登録商標)、およびオプテロン(登録商標)のプロセッサ、ARM(登録商標)のアプリケーション、エンベデッドおよびセキュアプロセッサ、IBM(登録商標)、モトローラ(登録商標)のドラゴンボール(登録商標)およびPowerPC(登録商標)プロセッサ、IBMおよびソニー(登録商標)のセルプロセッサ、インテル(登録商標)のアトム(登録商標)、セレロン(登録商標)、コア(2)デュオ(登録商標)、コアi3、コアi5、コアi7、アイテニアム(登録商標)、ペンティアム(登録商標)、ジーオン(登録商標)、ジーオンPhi(登録商標)、およびエックススケール(登録商標)プロセッサ、および類似のプロセッサを含むが、これらに限定されない様々な市販のプロセッサのいずれであってもよい。いくつかの例によれば、回路620は、特定用途向け集積回路(ASIC)も含み得、少なくともいくつかのコンポーネント622―aは、ASICの複数のハードウェア要素として実装され得る。
【0038】
いくつかの第1の例によれば、装置600は、複数のTCP接続615を介してクライアントに結合されたサーバに存在し得、サーバは、第1のアプリケーションを別個に実行することが可能なPVMまたはSVMをホスティングするように構成され得る。これらの第1の例において、装置600は、傍受コンポーネント622―1を含み得る。傍受コンポーネント622―1は、回路620により実行され、第1のアプリケーションから行われた第1および第2のソケットAPI呼び出を傍受し得る。いくつかの例において、第1および第2のソケットAPIは、複数のソケットAPI605に含まれ得る。ソケットAPI605は、第1のアプリケーションにより生成された複数のセッションを、複数のTCP接続615のうち同一のTCP接続にルーティングするように構成され得る。複数のセッションは、クライアントにおける第2のアプリケーションから受信された要求に応答して生成され得る。
【0039】
いくつかの第1の例によれば、装置600は、インデックスコンポーネント622―2も含み得る。インデックスコンポーネント622―2は、回路620により実行され、第1のアプリケーションにより生成された複数のセッションについての識別子情報を用いてセッションインデックスを生成する。これらの例において、インデックスコンポーネント622―2は、セッションインデックス624―aを含むデータ構造体(例えば、ルックアップテーブル(LUT)内に生成済みのセッションインデックスを保持または格納し得る。また、生成済みのセッションインデックスは、セッションインデックス610を介してクライアントに通信され得る。
【0040】
第1の複数の例において、装置600は、リマッピングコンポーネント622―3も含み得る。リマッピングコンポーネント622―3は、回路620により実行され、複数のTCP接続615のうち別個の複数のTCP接続を介して実際の出力のための第1のアプリケーションにより生成された複数のセッションをリマッピングし得る。これらの例において、複数のセッションは、セッションインデックス610がクライアントにおいて用いられ、クライアントにおける第2のアプリケーションに提供するべく、第1および第2のセッションを同一のTCP接続と再度組み合わせ得るように、リマッピングされ得る。いくつかの例において、リマッピングコンポーネント622―3は、デカップルリンクライブラリ625―b(例えば、LUT内に保持される)を用いて、複数のセッションを別個の複数のTCP接続にリマッピングすることが可能であり得る。
【0041】
いくつかの第2の例によれば、装置600は、複数のTCP接続615を介してサーバに結合されたクライアントに存在し得る。第1の複数の例と同様に、サーバは、第1のアプリケーションを別個に実行することが可能なPVMまたはSVMをホスティングするように構成され得る。これらの第2の複数の例において、装置600は、受信コンポーネント622―4も含み得る。受信コンポーネント622―4は、回路620により実行され、複数のTCP接続615のうち別個の複数のTCP接続を介して第1のアプリケーションにより生成された第1および第2のセッションを受信し得る。第1および第2のセッションは、クライアントにおける第2のアプリケーションにより第1のアプリケーションにすでに送信された要求に応答して生成され得る。
【0042】
いくつかの第2の例によれば、クライアントにおける装置600は、第1の複数の例について上で言及されたインデックスコンポーネント622―2も含み得る。これらの第2の例におけるインデックスコンポーネント622―2は、第1および第2のセッションについての識別子情報を有するセッションインデックス610を受信し得る。例えば、インデックスコンポーネント622―2は、セッションインデックス624―aを含むLUT等のデータ構造体内に受信済みのセッションインデックス610を保持または格納し得る。
【0043】
いくつかの第2の例によれば、装置600は、再グループ化コンポーネント622―5も含み得る。再グループ化コンポーネント622―5は、回路620により実行され、セッションインデックス624―aにおいて格納または保持されたセッションインデックスに基づいて、複数のTCP接続615のうち同一のTCP接続に第1および第2のセッションを再グループ化し得る。
【0044】
いくつかの第2の例によれば、装置600は、転送コンポーネント622―6も含み得る。転送コンポーネント622―6は、回路620により実行され、同一のTCP接続を介して、クライアントにおける第2のアプリケーションの第1および第2のソケットAPIのそれぞれに第1および第2のセッションを転送し得る。
【0045】
開示されるアーキテクチャの新規な複数の態様を実行する例示的な複数の方法論を表すロジックフローのセットが、本明細書に含まれる。簡明な説明の目的のために言えば、本明細書に示される1または複数の方法論は、連続する動作として示され、説明されるが、当業者は、本方法論が動作の順序によって限定されないことを理解するであろう。それによれば、いくつかの動作は、異なる順序および/または本明細書に示され、説明されるもの以外の複数の動作と同時に行われ得る。例えば、当業者は、別法では方法論を状態図等に連続する相互に関連した状態または事象として表すことができることを理解するであろう。更に、ある方法論において例示される動作全てが新規な実装に要求されないことがある。
【0046】
ロジックフローは、ソフトウェア、ファームウェア、および/またはハードウェアで実装され得る。ソフトウェアおよびファームウェアの実施形態において、ロジックフローは、光、磁気、または半導体ストレージ等の少なくとも1つの非一時的コンピュータ可読媒体または機械可読媒体上に格納された複数のコンピュータ実行可能命令によって実装することができる。実施形態は、この文脈において限定されない。
【0047】
図7は、第1のロジックフローの一例を図示する。図7に示されるように、第1のロジックフローは、ロジックフロー700を含む。ロジックフロー700は、1もしくは複数のロジック、特徴、または装置600等、本明細書において説明される複数のデバイスにより実行されたいくつか、または全てのオペレーションを表し得る。より具体的には、ロジックフロー700は、少なくとも傍受コンポーネント622―1、インデックスコンポーネント622―2、またはリマッピングコンポーネント622―3により実装され得る。
【0048】
いくつかの例によれば、ブロック702におけるロジックフロー700は、アプリケーションを別個に実行することが可能な一次または二次VMをホスティングするように構成されたサーバ用の回路において、アプリケーションから行われた第1および第2のソケットAPI呼び出しを傍受し得る。第1および第2のソケットAPIは、サーバのクライアントに結合された複数のTCP接続のうち同一のTCP接続を介して、予期される出力に対する第1および第2のセッションのそれぞれをルーティングするように構成され得る。第1および第2のセッションは、クライアントから受信されたデータに応答して、アプリケーションにより生成される。これらの例において、傍受コンポーネント622―1は、第1および第2のソケットAPIを傍受し得る。
【0049】
いくつかの例において、ブロック704におけるロジックフロー700は、第1および第2のセッションについての第1および第2の識別子情報のそれぞれを用いてセッションインデックスを生成し得る。これらの例において、インデックスコンポーネント622―2は、セッションインデックスを生成し得る。
【0050】
いくつかの例によれば、ブロック706におけるロジックフロー700は、セッションインデックスがクライアントにおいて用いられ、第1および第2のセッションを同一のTCP接続と再度組み合わせることが可能となるように、複数のTCP接続のうち別個の複数のTCP接続を介して実際に出力する第1および第2のセッションをリマッピングし得る。これらの例において、リマッピングコンポーネント622―3は、第1および第2のセッションをリマッピングし得る。
【0051】
図8は、第2のロジックフローの一例を図示する。図8に示されるように、第2のロジックフローは、ロジックフロー800を含む。ロジックフロー800は、1もしくは複数のロジック、特徴、または装置600等、本明細書において説明される複数のデバイスにより実行されたいくつか、または全てのオペレーションを表し得る。より具体的には、ロジックフロー800は、少なくとも受信コンポーネント622―4、インデックスコンポーネント622―2、再グループ化コンポーネント622―5、または転送コンポーネント622―6により実装され得る。
【0052】
いくつかの例によれば、ブロック802におけるロジックフロー800は、アプリケーションを別個に実行することが可能な一次または二次VMをホスティングするように構成されたサーバにおいて、クライアントとの別個の複数のTCP接続を介して第1および第2のセッションを受信し得る。第1および第2のセッションは、第1のアプリケーションから第2のアプリケーションへとすでに送信された要求に応答して、クライアントにおける第2のアプリケーションにより生成され得る。これらの例においては、受信コンポーネント622―4は、第1および第2のセッションを受信し得る。
【0053】
いくつかの例において、ブロック804におけるロジックフロー800は、第1および第2のセッションについての識別子情報を有するセッションインデックスを受信し得る。これらの例において、インデックスコンポーネント622―2は、セッションインデックスを受信し得る。
【0054】
いくつかの例によれば、ブロック806におけるロジックフロー800は、セッションインデックスに基づいて、同一のTCP接続に第1および第2のセッションを再グループ化し得る。これらの例においては、再グループ化コンポーネント622―5は、第1および第2のセッションを再グループ化し得る。
【0055】
いくつかの例において、ブロック808におけるロジックフロー800は、同一のTCP接続を介して、第1のアプリケーションに対する第1および第2のソケットAPIのそれぞれに第1および第2のセッションを転送し得る。これらの例において、転送コンポーネント622―6は、第1および第2のセッションを、サーバにおける第1のアプリケーションに転送し得る。
【0056】
図9は、第3のロジックフローの一例を図示する。図10に示されるように、第3のロジックフローは、ロジックフロー900を含む。ロジックフロー900は、1もしくは複数のロジック、特徴、または装置600等、本明細書において説明される複数のデバイスにより実行されたいくつか、または全てのオペレーションを表し得る。より具体的には、ロジックフロー900は、少なくとも受信コンポーネント622―4、インデックスコンポーネント622―2、再グループ化コンポーネント622―5、または転送コンポーネント622―6により実装され得る。
【0057】
いくつかの例によれば、ブロック902におけるロジックフロー900は、複数のTCP接続を介してサーバに結合されたクライアント用の回路において、複数のTCP接続のうち別個の複数のTCP接続を介して、第1および第2のセッションを受信し得る。第1および第2のセッションは、サーバによりホスティングされた一次または二次仮想マシンにより実行される第1のアプリケーションにより生成され、別個の複数のTCP接続を介してサーバから出力され得る。第1および第2のセッションは、クライアントにおける第2のアプリケーションにより第1のアプリケーションにすでに送信された要求に応答して生成され得る。これらの例においては、受信コンポーネント622―4は、第1および第2のセッションを受信し得る。
【0058】
いくつかの例において、ブロック904におけるロジックフロー900は、第1および第2のセッションについての識別子情報を有するセッションインデックスを受信し得る。これらの例において、インデックスコンポーネント622―2は、セッションインデックスを受信し得る。
【0059】
いくつかの例によれば、ブロック906におけるロジックフロー900は、セッションインデックスに基づいて、同一のTCP接続に第1および第2のセッションを再グループ化し得る。これらの例においては、再グループ化コンポーネント622―5は、第1および第2のセッションを再グループ化し得る。
【0060】
いくつかの例において、ブロック908におけるロジックフロー900は、同一のTCP接続を介して、第2のアプリケーションに対する第1および第2のソケットAPIのそれぞれに第1および第2のセッションを転送し得る。これらの例において、転送コンポーネント622―6は、第1および第2のセッションを、クライアントにおける第2のアプリケーションに転送し得る。
【0061】
図10は、第1のストレージ媒体の一例を図示する。図11に示されるように、第1のストレージ媒体は、ストレージ媒体1000を含む。ストレージ媒体1000は、製造物品を備え得る。いくつかの例において、ストレージ媒体1000は、光、磁気、または半導体ストレージ等、任意の非一時的コンピュータ可読媒体または機械可読媒体を含み得る。ストレージ媒体1000は、ロジックフロー700、800、または900を実装する複数の命令等、様々なタイプのコンピュータ実行可能命令を格納し得る。コンピュータ可読または機械可読ストレージ媒体の例としては、揮発性メモリもしくは不揮発性メモリ、リムーバブルメモリもしくはノンリムーバブルメモリ、消去可能メモリもしくは消去不可能メモリ、ライタブルメモリもしくはリライタブルメモリ等を含む、電子データを格納することが可能な任意の有形媒体が挙げられ得る。コンピュータ実行可能命令の複数の例としては、ソースコード、コンパイラ型コード、インタープリタ型コード、実行可能コード、スタティックコード、ダイナミックコード、オブジェクト指向コード、視覚コード等、任意の好適なタイプのコードが挙げられ得る。例は、この文脈において限定されない。
【0062】
図11は、例示的なコンピューティングプラットフォーム1100を図示する。いくつかの例において、図11に示されるように、コンピューティングプラットフォーム1100は、処理コンポーネント1140、他の複数のプラットフォームコンポーネント1150、または通信インターフェース1160を含み得る。いくつかの例によれば、コンピューティングプラットフォーム1100は、NW通信チャネルを介して結合することが可能なサーバまたはクライアントコンピューティングデバイス内に実装され得る。
【0063】
いくつかの例によれば、処理コンポーネント1140は、装置600および/またはストレージ媒体1000のための複数の処理オペレーションまたはロジックを実行し得る。処理コンポーネント1140は、様々なハードウェア要素、ソフトウェア要素、または双方の組み合わせを含んでもよい。ハードウェア要素の複数の例としては、デバイス、論理デバイス、コンポーネント、プロセッサ、マイクロプロセッサ、回路、プロセッサ回路、回路素子(例えば、トランジスタ、抵抗器、コンデンサ、インダクタ等)、集積回路、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、デジタル信号プロセッサ(DSP)、フィールドプログラマブルゲートアレイ(FPGA)、メモリユニット、論理ゲート、レジスタ、半導体デバイス、チップ、マイクロチップ、チップセット等が挙げられ得る。ソフトウェア要素の例としては、ソフトウェアコンポーネント、プログラム、アプリケーション、コンピュータプログラム、アプリケーションプログラム、デバイスドライバ、システムプログラム、ソフトウェア開発プログラム、マシンプログラム、オペレーティングシステムソフトウェア、ミドルウェア、ファームウェア、ソフトウェアモジュール、ルーチン、サブルーチン、関数、方法、プロシージャ、ソフトウェアインターフェース、アプリケーションプログラムインタフェース(API)、命令セット、コンピューティングコード、コンピュータコード、コードセグメント、コンピュータコードセグメント、ワード、値、シンボル、またはそれらの任意の組み合わせが挙げられ得る。複数のハードウェア要素および/またはソフトウェア要素を用いて、例が実装されているか否かを判断する段階は、所望の計算レート、電力レベル、耐熱性、処理サイクル予算、入力データレート、出力データレート、メモリリソース、データバスの速度、および他の設計もしくは性能の制約等、所与の例に所望の任意の数の複数の要因により異なることがある。
【0064】
いくつかの例において、他のプラットフォームコンポーネント1150は、1もしくは複数のプロセッサ、マルチコアプロセッサ、コプロセッサ、メモリユニット、チップセット、制御器、周辺機器、インターフェース、発振器、タイミングデバイス、ビデオカード、オーディオカード、マルチメディア入力/出力(I/O)コンポーネント(例えばデジタルディスプレイ)、電力供給等の共通のコンピューティング要素を含み得る。メモリユニットの複数の例としては、読み取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、ダイナミックRAM(DRAM)、ダブルデータレートDRAM(DDRAM)、シンクロナスDRAM(SDRAM)、スタティックRAM(SRAM)、プログラマブルROM(PROM)、消去式プログラマブルROM(EPROM)、電気的消去式プログラマブルROM(EEPROM)、フラッシュメモリ、強誘電体ポリマーメモリ、オボニックメモリ、相変化または強誘電体メモリ等のポリマーメモリ、シリコン‐酸化物‐窒化物‐酸化物‐シリコン(SONOS)メモリ、磁気または光学カード、独立ディスクのリダンダントアレイ(RAID)デバイス等のデバイスのアレイ、ソリッドステートメモリデバイス(例えばUSBメモリ)、ソリッドステートドライブ(SSD)、および情報を格納するのに好適なその他のタイプのストレージ媒体等、1または複数の高速メモリユニットの形態の様々なタイプのコンピュータ可読および機械可読ストレージ媒体が挙げられ得るが、これらに限定されない。
【0065】
いくつかの例において、通信インターフェース1160は、通信インターフェースをサポートするロジックおよび/または複数の特徴を含み得る。これらの例において、通信インターフェース1160は、様々な通信プロトコルまたは規格により動作し、直接のリンクまたはネットワーク通信リンクを経由して通信する1または複数の通信インターフェースを含み得る。複数の直接通信は、PCIe仕様に関連するもの等の1または複数の産業規格(後継および変形を含む)において説明される複数の通信プロトコルまたは標準の使用により行われ得る。ネットワーク通信は、IEEEにより公表された1または複数のイーサネット(登録商標)規格において説明されるもの等、複数の通信プロトコルまたは標準の使用により行われ得る。例えば、1つのそのようなイーサネット(登録商標)規格としては、IEEE802.3.が挙げられ得る。また、ネットワーク通信は、OpenFlowハードウェア抽象化API仕様等の1または複数のOpenFlow仕様により行われ得る。
【0066】
上で言及されたように、コンピューティングプラットフォーム1100は、サーバまたはクライアントコンピューティングデバイス内に実装され得る。従って、本明細書において説明されるコンピューティングプラットフォーム1100の複数の機能および/または特定の構成は、サーバまたはクライアントコンピューティングデバイスについて適宜に所望されるコンピューティングプラットフォーム1100の様々な実施形態において、含まれ、または省略され得る。
【0067】
コンピューティングプラットフォーム1100の複数のコンポーネントおよび特徴は、ディスクリート回路、複数の特定用途向け集積回路(ASIC)、論理ゲート、および/またはシングルチップアーキテクチャの任意の組み合わせを用いて実装され得る。更に、コンピューティングプラットフォーム1100複数の特徴は、複数のマイクロコントローラ、プログラマブルロジックアレイ、および/もしくはマイクロプロセッサ、または好適な場合に、上述の任意の組み合わせを用いて実装され得る。ハードウェア、ファームウェア、および/または複数のソフトウェア要素は、本明細書において、集合的または個別的に「ロジック」または「回路」と呼ばれる場合があることに留意されたい。
【0068】
図11のブロック図に示される例示的なコンピューティングプラットフォーム1100は、多くの潜在的実装の機能を記述する一例を表し得ることを理解されたい。従って、添付の図面に図示するブロックの機能を分割、省略、または含んでも、複数のハードウェアコンポーネント、回路、ソフトウェア、および/またはこれらの機能を実装する複数の要素が、複数の実施形態において必ず分割され、省略され、または含まれることを暗示するものではない。
【0069】
少なくとも一例の1または複数の態様は、機械により読み取られると、コンピューティングデバイスまたはシステムが機械、コンピューティングデバイス、またはシステムにロジックを作成させ、本明細書において説明される複数の技術を実行させるプロセッサ内で様々なロジックを表す、少なくとも1つの機械可読媒体上に格納された代表的な複数の命令により実装され得る。「IPコア」として知られるそのような表現は、実際にロジックまたはプロセッサを製造する複数の製造機械にロードするべく、有形の機械可読媒体上に格納され、様々な顧客または製造施設に供給され得る。
【0070】
様々な例は、複数のハードウェア要素、ソフトウェア要素、または双方の組み合わせを用いて実装され得る。いくつかの例において、複数のハードウェア要素としては、デバイス、コンポーネント、プロセッサ、マイクロプロセッサ、回路、回路素子(例えばトランジスタ、抵抗器、コンデンサ、インダクタなど)、集積回路、特定用途向け集積回路(ASIC)、プログラムマブル論理デバイス(PLD)、デジタル信号プロセッサ(DSP)、フィールドプログラマブルゲートアレイ(FPGA)、メモリユニット、論理ゲート、レジスタ、半導体デバイス、チップ、マイクロチップ、チップセット等が挙げられ得る。いくつかの例において、ソフトウェア要素としては、ソフトウェアコンポーネント、プログラム、アプリケーション、コンピュータプログラム、アプリケーションプログラム、システムプログラム、マシンプログラム、オペレーティングシステムソフトウェア、ミドルウェア、ファームウェア、ソフトウェアモジュール、ルーチン、サブルーチン、関数、方法、プロシージャ、ソフトウェアインターフェース、アプリケーションプログラムインターフェース(API)、命令セット、計算コード、コンピュータコード、コードセグメント、コンピュータコードセグメント、ワード、値、記号、またはこれらの任意の組み合わせが挙げられ得る。複数のハードウェア要素および/またはソフトウェア要素を用いて、例が実装されているか否かを判断する段階は、所望の計算レート、電力レベル、耐熱性、処理サイクル予算、入力データレート、出力データレート、メモリリソース、データバスの速度、および他の設計もしくは性能の制約等、所与の実装に所望の任意の数の複数の要因により異なることがある。
【0071】
いくつかの例は、製造物品または少なくとも1つのコンピュータ可読媒体を含み得る。コンピュータ可読媒体は、ロジックを格納する非一時的記憶媒体を含み得る。いくつかの例において、非一時的記憶媒体としては、揮発性メモリもしくは不揮発性メモリ、リムーバブルもしくはノンリムーバブルメモリ、消去可能もしくは消去不可能メモリ、ライタブルもしくはリライタブルメモリ等を含む、電子データを格納することが可能な1または複数のタイプのコンピュータ可読ストレージ媒体が挙げられ得る。いくつかの例において、ロジックは、ソフトウェアコンポーネント、プログラム、アプリケーション、コンピュータプログラム、アプリケーションプログラム、システムプログラム、マシンプログラム、オペレーティングシステムソフトウェア、ミドルウェア、ファームウェア、ソフトウェアモジュール、ルーチン、サブルーチン、関数、方法、プロシージャ、ソフトウェアインターフェース、API、命令セット、コンピューティングコード、コンピュータコード、コードセグメント、コンピュータコードセグメント、ワード、値、記号、またはこれらの任意の組み合わせ等、様々なソフトウェア要素を含み得る。
【0072】
いくつかの例によれば、コンピュータ可読媒体としては、機械により実行されると、コンピューティングデバイスまたはシステムが機械、コンピューティングデバイス、またはシステムに説明された複数の例に従って複数の方法および/またはオペレーションを実行させる複数の命令を格納または保持する非一時的記憶媒体が挙げられ得る。複数の命令としては、ソースコード、コンパイラ型コード、インタープリタ型コード、実行可能コード、スタティックコード、ダイナミックコード等、任意の好適なタイプのコードが挙げられ得る。複数の命令は、機械、コンピューティングデバイス、またはシステムに一定の機能を実行するように命令するための予め規定されたコンピュータ言語、態様または構文により実装され得る。複数の命令は、任意の好適なハイレベル、ローレベル、オブジェクト指向、視覚的、コンパイル型、および/またはインタープリタ型プログラミング言語を用いて実装され得る。
【0073】
いくつかの例は、複数の派生物と共に、表現「一例において」または「一例」を用いて説明され得る。これらの用語は、例と関して説明された特定の特徴、構造、または特性が少なくとも一例に含まれることを意味する。本明細書全体の様々な箇所で「一例において」の文言が現れても、全てが必ずしも同一の例を指している訳ではない。
【0074】
いくつかの例は、その派生物と共に、「結合され(coupled)」および「接続され(connected)」という表現を用いて説明され得る。これらの用語は、必ずしも互いに同義語として意図されない。例えば、用語「接続され」および/または「結合され」を用いる説明は、2またはそれより多い要素が互いに直接的に物理的または電気的に接触していることを示し得る。しかし、「結合され」という用語は、2またはそれより多い要素が互いに直接的には接触していないが、依然として協働または互いに相互作用していることも意味し得る。
【0075】
以下の複数の例は、本明細書において開示される複数の技術の更なる例に関する。
【0076】
例1。例示的な装置は、複数のTCP接続を介してクライアントに結合されたサーバにおける回路を含み得る。これらの例においては、サーバは、第1のアプリケーションを別個に実行することが可能な一次または二次VMをホスティングするように構成され得る。装置は、第1のアプリケーションから行われた第1および第2のソケットAPI呼び出しを傍受するべく、回路により実行するための傍受コンポーネントも含み得る。第1および第2のソケットAPIは、第1および第2のセッションのそれぞれを、複数のTCP接続のうち同一のTCP接続を介した予期される出力にルーティングするように構成され得る。第1および第2のセッションは、クライアントにおける第2のアプリケーションから受信された要求に応答して、第1のアプリケーションにより生成され得る。装置は、第1および第2のセッションに対する第1および第2の識別子情報のそれぞれを用いてセッションインデックスを生成するべく、回路により実行するためのインデックスコンポーネントも含み得る。装置は、クライアントにおいて第2のアプリケーションへの送達のために第1のセッションおよび第2のセッションを同一のTCP接続に再度組み合わせるためにセッションインデクスを用いることができるように、第1のセッションおよび第2のセッションを、複数のTCP接続のうち別個のTCP接続を介した実際の出力にリマッピングする、回路により実行するためのリマッピングコンポーネントも含み得る。
【0077】
例2。また、例1の装置は、アプリケーションが複数のセッションをクライアントへの複数のTCP接続を介した予期される出力にルーティングするために用いられる複数のソケットAPIのダイナミックリンクライブラリを代用することにより、第1および第2のソケットAPIを傍受する傍受コンポーネントを含み得る。これらに例においては、ダイナミックリンクライブラリは、TCPデカップルリンクライブラリで代用され得る。装置は、TCPデカップルリンクライブラリを用いて、第1および第2のセッションを、別個の複数のTCP接続を介してクライアントに実際に出力させることをことにより、第1および第2のセッションをリマッピングするリマッピングコンポーネントも含み得る。
【0078】
例3。例1の装置において、傍受コンポーネントは、クライアントとのTCP接続設定またはクライアントとのTCPデータ交換のうち1つに基づいて、第1および第2のソケットAPIをエミュレートする傍受コンポーネントにより、第1および第2のソケットAPIを傍受し得る。
【0079】
例4。例3の装置は、TCP接続設定に基づいて、第1および第2のソケットAPIをエミュレートする傍受コンポーネントも含み得る。これらの例においては、傍受コンポーネントは、第1および第2のソケットAPIのための複数のOSソケットAPIを生成し、複数のOSソケットAPIを別個の複数のTCP接続に割り当て得る。例3の装置は、複数のOSソケットAPIを用いるべく第1および第2のセッションをリマッピングし、第1および第2のセッションを、別個の複数のTCP接続を介してクライアントに実際に出力させるリマッピングコンポーネントも含み得る。
【0080】
例5。また、例4の装置は、クライアントとのTCPテアダウンのEOFメッセージに応答して、第1および第2のソケットAPIに対する複数のOSソケットAPIを除去する傍受コンポーネントを含み得る。
【0081】
例6。例3の装置は、TCPデータ交換に基づいて、第1および第2のソケットAPIをエミュレートし、別個の複数のTCP接続に割り当てられた複数のOSソケットAPIに、第1および第2のセッションをマッピングする固定マッピングテーブルをアドレス指定するセッションインデックスを用いる傍受コンポーネントも含み得る。例3の装置は、固定マッピングテーブルに基づいて、第1および第2のセッションをリマッピングし、第1および第2のセッションを、別個の複数のTCP接続を介してクライアントに実際に出力させるリマッピングコンポーネント含み得る。
【0082】
例7。例1の装置において、傍受コンポーネントは、傍受に対して選択的に選択されたアプリケーションに基づいて、第1および第2のソケットAPIを傍受し得るが、一次または二次VMにより実行されることが可能な別のアプリケーションは、傍受のために選択されない。
【0083】
例8。例1の装置において、第1および第2の識別子情報は、第1のセッションを生成するべく用いられる第1のスレッドに割り当てられた第1のスレッド名もしくは識別子と、第2のセッションを生成するべく用いられる第2のスレッドに割り当てられた第2のスレッド名もしくは識別子とを含み得る。
【0084】
例9。例1の装置において、第1および第2の識別子情報は、第1のセッションの生成に関連する第1のIPアドレスを含む第1のプロトコルスタックパターンと、第2のセッションの生成に関連する第2のIPアドレスを含む第2のプロトコルスタックパターンとを含み得る。
【0085】
例10。例1の装置は、ユーザインターフェース表示を提示する回路に結合されたデジタルディスプレイも含み得る。
【0086】
例11。例示的な方法は、アプリケーションを別個に実行することが可能な一次または二次VMをホスティングするように構成されたサーバ用の回路において、アプリケーションから行われた第1および第2のソケットAPI呼び出しを傍受する段階を備え得る。これらの例において、第1および第2のソケットAPIは、サーバのクライアントに結合された複数のTCP接続のうち同一のTCP接続を介して、予期される出力に対する第1および第2のセッションのそれぞれをルーティングするように構成され得る。第1および第2のセッションは、クライアントから受信されたデータに応答して、アプリケーションにより生成され得る。方法は、第1および第2のセッションに対する第1および第2の識別子情報のそれぞれを用いてセッションインデックスを生成する段階も備え得る。方法は、セッションインデックスがクライアントにおいて用いられ、第1および第2のセッションを同一のTCP接続と再度組み合わることが可能となるように、複数のTCP接続のうち別個の複数のTCP接続を介して、実際に出力する第1および第2のセッションをリマッピングする段階も備え得る。
【0087】
例12。例11の方法において、第1および第2のソケットAPIを傍受する段階は、複数のTCP接続を介してクライアントに予期される出力に対する複数のセッションをルーティングするアプリケーションにより用いられる複数のソケットAPIのダイナミックリンクライブラリを代用する段階を有し得る。これらに例においては、ダイナミックリンクライブラリは、TCPデカップルリンクライブラリで代用され得る。また、例11の方法においては、第1および第2のセッションをリマッピングする段階は、TCPデカップルリンクライブラリを用いて、第1および第2のセッションが別個の複数のTCP接続を介してクライアントに実際に出力されるようにする段階を有し得る。
【0088】
例13。例11の方法において、第1および第2のソケットAPIを傍受する段階は、クライアントとのTCP接続設定またはクライアントとのTCPデータ交換のうち1つに基づいて第1および第2のソケットAPIうぃエミュレートする段階を有し得る。
【0089】
例14。例13の方法において、TCP接続設定に基づいて第1および第2のソケットAPIをエミュレートする段階は、第1および第2のソケットAPIに対する複数のOSソケットAPIを生成する段階を有し得る。これらの例においては、複数のOSソケットAPIは、別個の複数のTCP接続に割り当てられ得る。また、例13の方法は、複数のOSソケットAPIを用いることにより第1および第2のセッションが別個の複数のTCP接続を介してクライアントに実際に出力され得るように第1および第2のセッションをリマッピングする段階を有し得る。
【0090】
例15。例14の方法は、クライアントとのTCPテアダウンのEOFメッセージに応答して、第1および第2のソケットAPIに対する複数のOSソケットAPIを除去する段階を備え得る。
【0091】
例16。例13の方法において、TCPデータ交換に基づいて、第1および第2のソケットAPIをエミュレートする段階は、別個の複数のTCP接続に割り当てられた複数のOSソケットAPIに、第1および第2のセッションをマッピングする固定マッピングテーブルをアドレス指定するセッションインデックスを用いる段階を有し得る。例13の方法においては、第1および第2のセッションをリマッピングする段階は、固定マッピングテーブルを用いて、第1および第2のセッションが別個の複数のTCP接続を介してクライアントに実際に出力されるようにする段階を有し得る。
【0092】
例17。例11の方法において、第1および第2のソケットAPIを傍受する段階は、傍受に対して選択的に選択されたアプリケーションに基づいて、第1および第2のソケットAPIを傍受し得るが、一次または二次VMにより実行されることが可能な別のアプリケーションが傍受のために選択されない段階を有し得る。
【0093】
例18。例11の方法において、第1および第2の識別子情報は、第1のセッションを生成するべく用いられる第1のスレッドに割り当てられた第1のスレッド名もしくは識別子と、第2のセッションを生成するべく用いられる第2のスレッドに割り当てられた第2のスレッド名もしくは識別子とを含み得る。
【0094】
例19。例11の方法において、第1および第2の識別子情報は、第1のセッションの生成に関連する第1のIPアドレスを有する第1のプロトコルスタックパターンと、第2のセッションの生成に関連する第2のIPアドレスを含む第2のプロトコルスタックパターンとを含み得る。
【0095】
例20。少なくとも1つの機械可読媒体は、サーバにおけるシステムにより実行されることに応答して、システムに、例11〜19のうちいずれか1つによる方法を実行させ得る複数の命令を含み得る。
【0096】
例21。装置は、例11〜19のうちいずれか1つの方法を実行するための手段を含み得る。
【0097】
例22。例示的な少なくとも1つの機械可読媒体は、第1のアプリケーションを別個に実行することが可能な一次または二次VMをホスティングするように構成されたサーバにおけるシステムにより、実行されることに応答して、システムに、クライアントとの別個の複数のTCP接続を介して第1および第2のセッションを受信させ得る複数の命令を含み得る。第1および第2のセッションは、第1のアプリケーションから第2のアプリケーションへとすでに送信された要求に応答して、クライアントにおける第2のアプリケーションにより生成され得る。また、複数の命令は、システムに、第1および第2のセッションについての識別子情報を有するセッションインデックスを受信させ得る。また、複数の命令は、システムにセッションインデックスに基づいて、同一のTCP接続に対して第1および第2のセッションを再グループ化させ得る。また、複数の命令は、システムに、同一のTCP接続を介して、第1および第2のセッションを第1のアプリケーションに対する第1および第2のソケットAPIのそれぞれに転送させ得る。
【0098】
例23。例22の少なくとも1つの機械可読媒体において、識別子情報は、第1のアプリケーションに対する第1のセッションを生成するべく用いられる第1のスレッドに割り当てられた第1のスレッド名もしくは識別子と、第1のアプリケーションに対する第2のセッションを生成するべく用いられる第2のスレッドに割り当てられた第2のスレッド名もしくは識別子とを含み得る。
【0099】
例24。例22の少なくとも1つの機械可読媒体において、識別子情報は、第1のセッションの生成に関連する第1のIPアドレスを含む第1のプロトコルスタックパターンと、第2のセッションの生成に関連する第2のIPアドレスを含む第2のプロトコルスタックパターンとを含み得る。
【0100】
例25。例22の少なくとも1つの機械可読媒体において、複数の命令は更に、システムに、サーバにおいて用いられるのと同一のラウンドロビンポリシを用いて、第1および第2のセッションを同一のTCP接続に再グループ化し、サーバにおける同一のTCP接続からの第1および第2のセッションを、別個の複数のTCP接続にリマッピングさせ得る。
【0101】
例26。例示的な装置は、複数のTCP接続を介してサーバに結合されたクライアントにおける回路を含み得る。これらの例においては、サーバは、第1のアプリケーションを別個に実行することが可能な一次または二次VMをホスティングするように構成され得る。また、装置は、複数のTCP接続のうち別個の複数のTCP接続を介して、第1のアプリケーションにより生成された第1および第2のセッションを受信するように回路により実行するための受信コンポーネントを含み得る。第1および第2のセッションは、クライアントにおける第2のアプリケーションにより第1のアプリケーションにすでに送信された要求に応答して生成され得る。また、装置は、第1および第2のセッションについての識別子情報を有するセッションインデックスを受信するべく、回路により実行するためのインデックスコンポーネントを含み得る。装置は、セッションインデックスに基づいて複数のTCP接続のうち同一のTCP接続に対して第1および第2のセッションを再グループ化するべく、回路により実行するための再グループ化コンポーネントも含み得る。装置は、同一のTCP接続を介して、第2のアプリケーションに対する第1および第2のソケットAPIのそれぞれに第1および第2のセッションを転送するべく、回路により実行するための転送コンポーネントも含み得る。
【0102】
例28。例26の装置において、識別子情報は、第1のアプリケーションに対する第1のセッションを生成するべく用いられる第1のスレッドに割り当てられた第1のスレッド名もしくは識別子と、第1のアプリケーションに対する第2のセッションを生成するべく用いられる第2のスレッドに割り当てられた第2のスレッド名もしくは識別子とを含み得る。
【0103】
例29。例26の装置において、識別子情報は、第1のセッションの生成に関連する第1のIPアドレスを含む第1のプロトコルスタックパターンと、第2のセッションの生成に関連する第2のIPアドレスを含む第2のプロトコルスタックパターンとを含み得る。
【0104】
例30。例26の装置は、ユーザインターフェース表示を提示するべくプロセッサ回路に結合されたデジタルディスプレイも含み得る。
【0105】
例31。例示的な方法は、複数のTCP接続を介してサーバに結合されたクライアント用の回路において、複数のTCP接続のうち別個の複数のTCP接続を介して、第1および第2のセッションを受信する段階を備え得る。これらの例においては、第1および第2のセッションは、サーバによりホスティングされた一次または二次仮想マシンにより実行される第1のアプリケーションにより生成され、別個の複数のTCP接続を介してサーバから出力され得る。第1および第2のセッションは、クライアントにおける第2のアプリケーションにより第1のアプリケーションにすでに送信された要求に応答して生成され得る。方法は、第1および第2のセッションに対する識別子情報を有するセッションインデックスを受信する段階も備え得る。方法は、第1および第2のセッションを、セッションインデックスに基づいて複数のTCP接続のうち同一のTCP接続に対して再グループ化する段階も含み得る。方法は、同一のTCP接続を介して、第2のアプリケーションに対する第1および第2のソケットAPIのそれぞれに第1および第2のセッションを転送する段階を備え得る。
【0106】
例32。例31の方法において、識別子情報は、第1のアプリケーションに対する第1のセッションを生成するべく用いられる第1のスレッドに割り当てられた第1のスレッド名もしくは識別子と、第1のアプリケーションに対する第2のセッションを生成するべく用いられる第2のスレッドに割り当てられた第2のスレッド名もしくは識別子とを含む。
【0107】
例33。例31の方法において、識別子情報は、第1のセッションの生成に関連する第1のIPアドレスを含む第1のプロトコルスタックパターンと、第2のセッションの生成に関連する第2のIPアドレスを含む第2のプロトコルスタックパターンとを含み得る。
【0108】
例34。例31の方法において、第1および第2のセッションを同一のTCP接続に再グループ化する段階は、サーバにおいて用いられるのと同一のラウンドロビンポリシを用いて、サーバにおける同一のTCP接続からの第1および第2のセッションを、別個の複数のTCP接続にリマッピングする段階を有し得る。
【0109】
例35。少なくとも1つの機械可読媒体は、サーバに結合されたクライアントにおけるシステムにより実行されることに応答して、システムに、例31〜34のうちいずれか1つによる方法を実行させ得る複数の命令を含み得る。
【0110】
例36。装置は、例31〜34のうちいずれか1つの方法を実行するための手段を含み得る。
【0111】
例37。少なくとも1つの機械可読媒体は、複数のTCP接続を介してサーバに結合されたクライアントにおけるシステムにより実行されることに応答する複数の命令を含み得、サーバは、第1のアプリケーションを別個に実行することが可能な一次または二次VMをホスティングするように構成され得、複数の命令は、システムに、複数のTCP接続のうち別個の複数のTCP接続を介して、第1および第2のセッションを受信させ得る。これらの例においては、第1および第2のセッションは、第1のアプリケーションにより生成され、別個の複数のTCP接続を介してサーバから出力され得る。第1および第2のセッションは、クライアントにおける第2のアプリケーションにより第1のアプリケーションにすでに送信された要求に応答して生成され得る。また、複数の命令は、システムに、第1および第2のセッションについての識別子情報を有するセッションインデックスを受信させ得る。また、複数の命令は、システムにセッションインデックスに基づいて、複数のTCP接続のうち同一のTCP接続に対する第1および第2のセッションを再グループ化させ得る。また、複数の命令は、システムに、同一のTCP接続を介して、第1および第2のセッションを第2のアプリケーションに対する第1および第2のソケットAPIのそれぞれに転送させ得る。
【0112】
例38。例37の少なくとも1つの機械可読媒体において、識別子情報は、第1のアプリケーションに対する第1のセッションを生成するべく用いられる第1のスレッドに割り当てられた第1のスレッド名もしくは識別子と、第1のアプリケーションに対する第2のセッションを生成するべく用いられる第2のスレッドに割り当てられた第2のスレッド名もしくは識別子とを含み得る。
【0113】
例39。例37の少なくとも1つの機械可読媒体において、識別子情報は、第1のセッションの生成に関連する第1のIPアドレスを含む第1のプロトコルスタックパターンと、第2のセッションの生成に関連する第2のIPアドレスを含む第2のプロトコルスタックパターンとを含み得る。
【0114】
例40。例37の少なくとも1つの機械可読媒体において、同一のTCP接続に対して再グループ化された第1および第2のセッションは、サーバにおいて用いられるのと同一のラウンドロビンポリシを用いて、サーバにおける同一のTCP接続からの第1および第2のセッションを、別個の複数のTCP接続にリマッピングさせりことを含み得る。
【0115】
本開示の要約書は、連邦規則法典集第37巻に準拠して提供されることが強調される。セクション1.72(b)は、読者が技術的な開示の性質を確認することを可能とする要約を要求している。要約書は、特許請求の範囲または意味を解釈または限定するべく用いられないとの理解と共に提出される。更に、上述の詳細な説明で、様々な特徴が、本開示を一通り示す目的のために単一の例で一緒にグループ化されていることが見て取られ得る。本開示の方法は、特許請求される複数の例が各請求項において明示的に列挙されるよりも多くの特徴を要求するとの意図を反映するものとして解釈されるものではない。むしろ、以下の特許請求の範囲が反映するように、発明の主題は、1つの開示例の全ての特徴よりも少ない。従って、以下の特許請求の範囲は発明を実施するための詳細な説明に組み込まれ、各請求項は別個の例として独立している。添付の特許請求の範囲において、「含む」および「そこにおいて(in which)」という用語は、「備える」および「そこで(wherein)」という各用語の平易な英語の均等物として、それぞれ用いられる。更に、「第1の」、「第2の」、「第3の」等の用語は、分類としてのみ用いられ、その対象に数字的な要求を課すことは意図されない。
【0116】
主題は、構造的特徴および/または方法論的動作に特有の言語で説明されてきたが、添付の特許請求の範囲において定義された主題は、必ずしも上記の特定の特徴または動作に限定されないことを理解されたい。むしろ、特定の複数の特徴および動作は、特許請求の範囲を実装する例示的形態として上に説明され、開示される。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11