(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0026】
以下の説明では、説明および非限定の目的のために、説明された技術の理解を提供するために、特定のノード、機能エンティティ、技法、プロトコルなどのような特定の詳細が記載される。以下に記載される特定の詳細とは別に、他の実施形態が実践されてもよいことは、当業者には明らかであろう。他の例では周知の方法、デバイス、技術などの詳細な説明は不必要な詳細で説明を不明瞭にしないように省略される。
【0027】
この詳細な説明では各セクションの一般的な主題に関して読者を向けるためにのみセクションが使用され、以下に見られるように、多くの特徴の説明は複数のセクションにわたり、見出しは任意のセクションに含まれる説明の意味に影響を及ぼすものとして読まれるべきではない。
【0028】
<概要>
本明細書で説明される技術は、とりわけ、複数の処理ステージに分解されたアプリケーションがアプリケーションのそれぞれの処理ステージを互いに非同期にかつ同時に実行することによって実行され得る、公開−加入(パブリッシュ−サブスクライブ)メッセージ・フレームワーク(本明細書では「パブリッシュ−サブスクライブ・フレームワーク」と呼ばれることもある)に関する。処理ステージの非同期および同時実行は、多くの場合、例えば純粋に手続き型のフレームワークなど、別のタイプのフレームワークで実行されている同じアプリケーションと比較して、アプリケーションの完了までの時間を短縮することになる。それぞれの処理ステージ間の通信は、公開−加入実行モデルに排他的に従うことができる。記載されたパブリッシュ−サブスクライブ・フレームワークはマルチプロセッサ/マルチコア処理環境におけるそれぞれの処理リソースへの処理ステージの分散を可能にしながら、マルチプロセスおよび/またはマルチスレッド方式で実行されるべき処理ステージを提供する。
【0029】
本明細書で説明されるシステムおよび技法は、株式および/または他の取引可能な証券を取引するための電子取引所など、取引速度が非常に重要である高取引量のアプリケーションに特によく適し得る。そのようなアプリケーションは、多数のユーザから同時に受信され得る要求に応答して、リアルタイムまたはほぼリアルタイムで実質的な処理を必要とする。例示的な実施形態では、そのようなアプリケーションで必要とされる処理が複数のパイプライン処理ステージに分解することができる処理パイプラインとして特徴付けることができる。各ステージが1つ以上の機能領域のための処理ロジックを有するパイプライン処理ステージはその後、パイプラインステージのグループ間の相互通信を提供するパブリッシュ−サブスクライブ・フレームワークを用いて、互いに対して非同期かつ同時の方法で実行されることができ、それによって、取引活動の実質的な高速化をもたらす。本明細書で説明される電子取引所アプリケーションおよび関連するゲートウェイアプリケーションは例として提供され、実施形態は電子取引所および/またはゲートウェイのアプリケーションに限定されないことが理解されるのであろう。
【0030】
図1は、パブリッシュ−サブスクライブ・フレームワークに従って実施される電子取引所アプリケーションが例えば、ユーザから受け取った注文(オーダ)を含むデータメッセージのようなサービス・クライアント要求を行う実施形態におけるコンピュータ環境を示す。ユーザは実施形態のパブリッシュ−サブスクライブ・フレームワークに従って実装されてもよいゲートウェイに、データメッセージのストリーム、例えば、電子取引所エンジン上で取引するためのオーダを提供してもよい。ゲートウェイは要求を電子取引所アプリケーション(「取引所エンジン」と呼ばれることもある)に転送する前に、クライアント要求を集約および/または前処理することができる。
図2は、
図1の電子取引所アプリケーションまたはゲートウェイアプリケーションのようなアプリケーションプログラムを、各々がそれ自体のイングレス/エグレス・メッセージ・インタフェースのセットを有する複数の処理ステージに分解した例を概略的に示す。また、
図2は処理ステージを同時に非同期的に実行するために、分解された処理ステージをそれぞれの処理コアに分配する例を示す。
図3は
図1の
図4および
図5のようなアプリケーションを実行する際に使用することができるパブリッシュ−サブスクライブ・フレームワーク内のいくつかのオブジェクト、およびオブジェクト間の関係を示し、パブリッシュ−サブスクライブ・フレームワーク内のパブリッシャ、サブスクライバ、およびセッション・構成要素間の例示的なパブリッシュ−サブスクライブ・メッセージ交換を示す。
図6は
図1に示されるゲートウェイアプリケーションのような例示的なゲートウェイアプリケーションにおける例示的なメッセージフローを示す。
図7〜
図10が
図6のゲートウェイアプリケーションの分解された処理ステージの間の様々なメッセージ交換シーケンスを示す。
図11は、
図1のアプリケーションのような例示的な電子取引所アプリケーションにおける例示的なメッセージフローを示す。
図12、
図13は、電子取引所アプリケーションの分解された処理ステージの間の様々な例示的なメッセージ交換シーケンスを示す。
図14は、
図1のクライアントデバイス、ゲートウェイ、またはサーバのいずれかを実施するために使用することができるコンピュータを示す。
【0031】
図1の説明
図1は、特定の例示的な実施形態によるコンピューティング環境を示す。非限定的なコンピューティング環境100は、サーバインフラストラクチャ102内の1つ以上のサーバ、ネットワーク106によってサーバインフラストラクチャに接続された1つ以上のゲートウェイシステム104、およびクライアントデバイス108および110を含むクライアントシステムを含む。サーバインフラストラクチャ102内のサーバはゲートウェイシステム104およびクライアントデバイス108および110と通信することができ、その結果、クライアントデバイス108および110上のユーザは、サーバインフラストラクチャ102内で実行される電子取引所アプリケーション116と相互に作用することができる。
【0032】
例示的なコンピューティング環境100は、サーバインフラストラクチャ102内の電子取引所アプリケーション116を実行することによって、株式、デリバティブ、または他の金融商品もしくは商品の電子取引のための電子取引所を提供する。少なくともいくつかの実施形態では、電子取引所アプリケーション116が少なくともいくつかのタイプの取引可能な商品の取引が進行中のリアルタイムベースで試みられる電子連続取引を提供することができる。例えば、クライアントデバイス108および110および/またはゲートウェイシステム104からの着信クライアント要求のストリーム内のオーダ(例えば、買い注文または売り注文)を含む各データメッセージは、受信時に、オーダブックと照らし合わせて、即座に(例えば、リアルタイムまたはほぼリアルタイムで、非本質的な処理および/またはメモリ/ストレージアクセスアクティビティを介さずに)一致を判定する。例示的な実施形態は大量(例えば、毎秒数百または数千のオーダ、毎秒数十万のオーダ)およびリアルタイム制約(例えば、1秒以内に入ってくるオーダの大部分を処理する、第1の所定数のマイクロ/ナノ秒を超えない、およびオーダのいずれもが第2の所定数のマイクロ/ナノ秒処理時間を超えない平均処理時間を有するようにオーダを処理する、所定の分数秒以内に特定のタイプのすべてのオーダを処理する、など)で複数の同種および/または異種属性を含む取引可能な商品レコードを効率的に処理することができるデータ構造およびマッチング技術などを使用するように構成される。サーバインフラストラクチャ102は在庫(インベントリ)レコードの更新、および実行されたオーダに関する他のシステムへの通知など、他の関連するタスクを実行するように動作することもでき、その結果、配送などを追跡することができる。注文書サーバ、オーダマッチングエンジン(単に「マッチングエンジン」と呼ぶ)、オーダ管理サーバ、ポジション管理サーバ、フルフィルメント管理サーバのうちの1つ以上が、電子取引所アプリケーション116に含まれてもよく、またはこれらと相互作用して、サーバインフラストラクチャ102上で電子取引所の機能を提供してもよい。
【0033】
電子取引所アプリケーション116、またはアプリケーション116の一部であるマッチングエンジン(別個には図示せず)は、各入ってくるオーダを注文書(オーダーブック)データベース(「スタンディングオーダ・データベース」とも呼ばれる)からのオーダとマッチングさせるように動作することができる。例えば、マッチングエンジンは受信した買い注文をオーダーブック・データベースに記憶された1つ以上の売り注文とマッチングさせたり、受信した売り注文をオーダーブック・データベースに記憶された1つ以上の買い注文とマッチングさせたりするように動作してもよい。マッチングは、マッチングルールデータベースからの1つ以上の所定または動的に決定されたマッチングルールに従って実行されてもよい。いくつかの実施形態では、1つ以上のサーバがサーバインフラストラクチャ102内の他のサーバおよび/または外部コンピュータがそれと相互作用するために使用できるインタフェース(たとえば、アプリケーション・プログラミング・インタフェースAPI)を提供してもよい。例えば、リアルタイムオーダマッチング処理で使用されるオーダマッチングエンジンおよびオーダーブック・サーバの一方または両方が、APIを介してサーバインフラストラクチャ102および/または外部コンピュータ内の他のサーバのそれぞれと通信してもよい。
【0034】
マッチング処理がそれぞれのオーダが受信される時間順序を厳密に遵守し、オーダがユーザによって送信された後の最小時間間隔でオーダを処理することに依拠することができるように、入ってくるオーダを高速で処理する(例えば、1秒間に数千または数十万のマッチ)サーバインフラストラクチャ102の能力は非常に重要であり、システム上で行われる取引の正確さおよび有効性を下支えすることができる。
【0035】
サーバインフラストラクチャ102はネットワークおよび/またはポイントツーポイント接続を介して互いに通信可能に接続された1つ以上の物理的サーバコンピュータ(例えば、コンピュータ112および114)を含んでもよい。物理サーバコンピュータは、地理的に併設または分散していてもよい。サーバインフラストラクチャ102内のサーバ間の相互接続はインターネットを介して、または互いにローカル・エリア・ネットワーク、ワイドエリアネットワークまたはポイントツーポイント接続(例えば、接続125)などの他のネットワークを介してもよい。いくつかの実施形態では、複数のサーバが高速ポイントツーポイント接続および/または高速ブロードキャストバスと相互接続される。
【0036】
コンピュータ112および114の各々は少なくとも1つの単一コアまたはマルチコアプロセッサ(例えば、プロセッサ118および122)を有する処理システムを含み、システムソフトウェア(例えば、システムソフトウェア120および124)を含む。いくつかの実施形態では、コンピュータ112および114が対称マルチプロセッサ(SMP)内のそれぞれの処理部とすることができる。いくつかの実施形態では、コンピュータ112および114が高速接続で相互接続されたスタンドアロン・コンピュータとすることができる。
【0037】
システムソフトウェア120はコンピュータ112のためのオペレーティングシステムを含むことができ、システムコールなどを提供することができ、これにより、アプリケーション116などのアプリケーションは、オペレーティングシステムからプロセッサ118および/または周辺装置を制御するサービスを要求することができる。システムソフトウェア120は同じまたは異なるプロセッサ/プロセッサコア上で実行されるプロセスおよび/またはスレッド間のプロセス間通信を提供することもでき、また、1つ以上のネットワークインタフェース上で別々のコンピュータ間の通信を提供することもできる。したがって、システムソフトウェア120はプロセス内、プロセス間、スレッド間、および/またはホスト間通信を必要に応じて実行するために、システムリソース(例えば、プロセッサ、プロセッサコア、メモリ、ストレージ、通信インタフェースなど)にアクセスするための実行カーネル(例えば、アプリケーション116を実行する実行カーネル)を提供する。システムソフトウェア124は、システムソフトウェア120に類似していてもよく、システムソフトウェア120の上述の能力を有してもよい。
【0038】
実施形態によれば、アプリケーション116は、パブリッシュ−サブスクライブ・メッセージ交換フレームワークに基づくパブリッシュ−サブスクライブ実行カーネルを備えるか、またはパブリッシュ−サブスクライブ実行カーネルとして動作する。アプリケーション116はシステムソフトウェア120(および/または124)を使用して、メモリ(
図1には別個には示されていない)およびプロセッサ118および122などのシステムリソースにアクセスまたは制御することができ、その結果、アプリケーション116の個々のコンポーネントを、最適な(または改善された)並列度、速度、および/または信頼性を提供する方法で、特定の処理リソース上に配置することができる。
【0039】
実行カーネル(しばしば単に「カーネル」)が実施形態によるパイプライン化されたデータ駆動アプリケーションアーキテクチャの基礎を形成する。実行カーネルがイベント/メッセージ駆動システムにおけるアプローチのような同様のパラダイムのために意図され、アプリケーションは典型的には待ち行列に入れられる順番で処理される「イベント」の関連する待ち行列を有する「メインループ」を有するように設計されるが、異なるアプリケーションステージを非同期かつ同時に処理する複数のスレッドを有する。これを可能にするために、メッセージベースのパラダイムが実行カーネルによって使用され、スレッド、プロセス、およびホスト間の実行およびメッセージングの受け渡しを可能にする。少なくともいくつかの実施形態では、2つ以上の処理ステージ間のすべての通信がトピックを公開し、トピックに加入するものとして表現される。少なくともいくつかの実施形態では、2つ以上の処理ステージ間のすべての通信がトピックを公開し、加入するものとして表現される。すなわち、特定の例示的な実施形態では、情報が1つの処理ステージから別の処理ステージに交換される唯一の方法がパブリッシュ−サブスクライブ・フレームワークを介するものであり、そのような情報を取得することができるサイドチャネルは存在しない。
【0040】
例示的な実施形態の実行カーネルにおけるメッセージングトポロジは、論理的には複数の加入者(サブスクライバ)が同じメッセージに加入することができるブロードキャストアーキテクチャである。これにより、必要に応じて複数のエンドポイントまたは単一のエンドポイントにメッセージを分岐できる論理的なバスに似たアーキテクチャが可能になる。トポロジは公開エンドポイントおよび加入エンドポイントとして表現されるため、アプリケーションは所望の通信経路を間接的に表現するためにのみ必要な場合があり、加入エンドポイントには公開エンドポイントに関する直接的な知識はない。
【0041】
フレームワーク内のパブリッシャおよびサブスクライバは、部分的な順序付けの要件および損失のない通信の要件の両方をそれらに課している可能性がある。すなわち、少なくともいくつかの実施形態では、メッセージが公開者(パブリッシャ)によって公開される順序が、メッセージがサブスクライバにおいて受信されなければならない順序である。これは、加入エンドポイントでメッセージの確定的な処理を可能にするために必要である。
【0042】
メッセージングトポロジの動的作成を可能にするには、特定の保証が必要である。したがって、セッション、パブリッシャなどの作成は、実行カーネル内で信号の生成を引き起こす可能性がある。すなわち、新規のパブリッシャが作成されると、同じセッションに参加しているすべてのサブスクライバは新しいトピックが存在する(たとえば、各パブリッシャがトピックに関連付けられている)という通知を受信し、通知に応答して、特定のサブスクライバの要件に従ってそのトピックに加入することができる。いくつかの実施形態では、パブリッシャが少なくとも1つのサブスクライバがそのトピックに加入した後にのみ、トピックのためのメッセージを公開することが可能にされる。
【0043】
単一プロセス内でのそのようなメッセージングの使用を含む、パブリッシュ−サブスクライブ・メッセージングを使用するための特定の実施形態におけるアプローチは、高度に効率的なポイントツーポイント伝送として使用されるハードウェアのメモリ・サブシステムを利用することを可能にするSMPベースのシステムにおけるロックフリー・データ・パッシングを利用することによって、いくつかの実施形態において可能となる。適切なロックフリーキューとのポイントツーポイント通信、1つのCPUコアから別のCPUコアへのメッセージの通信はメモリブロックにポインタを渡すときに、パイプライン処理された数個のCPU命令で実行できる。これは、たとえば、同じポインタを複数のCPUコアキューにプッシュすることによって、ブロードキャストバスを表すように拡張できる。受信側CPUコアはポインタを読み取り、送信元CPU が送信したメモリブロックにアクセスする。
【0044】
この基本的な通信モードにより、パブリッシュ−サブスクライブ・メッセージングはプロセス内通信のための高度に効率的な方法で表現でき、共有メモリマッピングを用いたホストローカル通信のためにも表現できる。パブリッシュ−サブスクライブ・フレームワークがメモリブロックの交換を伴う一連の管理されたCPUコア内のキューとして実施されるという事実は、アプリケーションロジックには隠されている。さらに、メモリブロックの管理は、パブリッシュ・サブスクライブを使用するアプリケーションに対して透過的である。
【0045】
アプリケーションは公開と加入の両方のエンドポイント(すなわち、パブリッシャとサブスクライバ)を作成する動作によって、フレームワークと基盤となるインフラストラクチャへの必要な接続性を間接的に表現する。次に、通信インフラストラクチャは、物理通信パスを形成する必要なスレッド間キューを作成する。低レベル・トランスポート・レベルでの結果は、すべての加入エンドポイントと公開エンドポイントとが接続された接続メッシュになる。
【0046】
追加のキューおよび制御実行カーネルを使用するシグナリングは例えば、プロセス、ホストまたはネットワーク通信領域のような通信領域の動的作成を可能にするために使用されてもよい。メッセージ公開のシグナリングおよび順序付けの保証は、特定の実施形態ではデータフローをモデル化するために使用することができる新しい通信セッションの決定論的な作成および立ち上げを可能にするために必要とされる。
【0047】
ゲートウェイ104はサーバインフラストラクチャ102から地理的に遠隔で配置されていてもよいし、サーバインフラストラクチャ102とローカルに配置されていてもよい。ゲートウェイ104は、少なくとも1つの単一又はマルチコアプロセッサ128及びシステムソフトウェア130を含むことができる。プロセッサ128およびシステムソフトウェア130は、少なくともいくつかの実施形態ではコンピュータ112に関連して説明されるプロセッサ118およびシステムソフトウェア120にそれぞれ類似していてもよい。ゲートウェイ104は、クライアント要求がサーバインフラストラクチャ102に送信される前に、クライアント要求を集約および/または事前に処理するために動作するゲートウェイアプリケーション126を実行することができる。集約には、サーバインフラストラクチャへの1つのメッセージに、ユーザが開始した2つ以上の注文をバンドルすることが含まれる場合がある。前処理には、ヘッダの変更、認証、および/または暗号化が含まれる場合がある。いくつかの実施形態によれば、ゲートウェイアプリケーション126は、パブリッシュ−サブスクライブ実行カーネルとして実装される。
【0048】
上述のアプリケーションのいずれも、ユーザ認証を管理するためのエンタープライズ・サービス・アプリケーション(別個には図示せず)と、入ってくるオーダを受信し、オーダ/取引確認を送信するためのクライアント108および110と、処理に使用されるための、またはオーダ、取引およびポジション、ならびに市場統計に関する情報を報告するための情報を取得するためのデータベース管理システムおよび/または外部サーバと相互に作用することができる。サーバ102上の任意のアプリケーションなどのアプリケーションは、1つ以上のクライアント側コンポーネントと、1つ以上のサーバ側コンポーネントとを備えることができる。アプリケーションのクライアント側コンポーネントはユーザインタフェースデバイス上で情報の提示(例えば、表示)を実行すること、ユーザ入力を受信することなどによって、ユーザインタフェースを処理することを提供するように動作することができる。サーバ側コンポーネントは、受信されたユーザ入力に従ってユーザに提示される情報を認証、サービスメータリング、生成、または取得することを提供することができる。
【0049】
例のクライアントデバイス108および110は、それぞれ、同一または異なるクライアントアプリケーション132および134を実行するように構成することができる。クライアントデバイスアプリケーションは、電子取引所アプリケーションのクライアント側部分を含むことができる。
図1に示す例ではクライアントデバイス108が取引アプリケーションを実行しており(例えば、クライアントアプリケーション132は電子取引所と相互に作用するためのクライアント側取引アプリケーションである)、その取引アプリケーションを介して買い注文を送信する。クライアントデバイス110は同じ又は異なる取引アプリケーションを実行することができ、売り注文をサーバ102に送信することができる。クライアントデバイス108および110は、パーソナルコンピュータ、モバイルコンピュータ、タブレット、スマートフォン、および他の電子デバイスのいずれかを含むことができる。ある実施形態では、少なくともディスプレイ、ユーザ入力のための入力装置、およびサーバデバイスと通信するための通信インタフェースを含む任意の電子計算デバイスがクライアントデバイスとして動作してもよい。2つのクライアントシステムが示されているが、任意の数のクライアントシステムがサーバインフラストラクチャ102と相互に作用することができる。クライアントリクエストは、人間のユーザインタラクションおよび/またはコンピュータプログラムによって生成されてもよい。
【0050】
図1に示すソフトウェアモジュールはハードウェアコンポーネント(プロセッサやメモリなど)に格納されて実行されることが理解されるべきであり、ソフトウェアモジュールが説明を容易にするためにのみ実行される何らかのアクションを実行することが本明細書に記載されているときはいつでも、そのアクションは、実際にはソフトウェアモジュールを構成する命令およびデータに従って基盤となるハードウェアによって実行されるものであることが理解されるべきである。本明細書で説明される特徴を実装するために使用され得る例示的なハードウェア構成要素に関するさらなる詳細は、
図14を参照して、ならびに本明細書の他の場所で以下に提供される。
【0051】
図1の上記説明を含むがこれに限定されない、本明細書の多くの箇所では、ソフトウェアモジュールおよびソフトウェアモジュールによって実行されるアクションが説明される。これは説明を容易にするために行われる。ソフトウェアモジュールが何らかのアクションを実行することが本文書に記載されているときはいつでも、そのアクションはソフトウェアモジュールを構成する命令に従って、基盤となるハードウェア要素(プロセッサやメモリデバイスなど)によって実行される実際のものであることが理解されるべきである。これに関するさらなる詳細は、他の場所の中でも、
図14の説明において以下に提供される。
【0052】
図2の説明
図2は、いくつかの実施形態による、アプリケーションのためのプログラムコード、
図1に示されるような処理環境で使用するための複数の処理ステージへのアプリケーションプログラムコードの分解、およびマルチコアおよび/またはマルチプロセッサ処理環境で展開される処理ステージを示す高レベルフローを示す。
【0053】
特定のアプリケーションのための実行カーネルフレームワークの使用は最初に、非同期かつ同時に実行可能な分離可能な処理段階の設定を発見することを含む。これは各機能が潜在的な候補である機能基底で実行することができるが、より高い効率を達成するために、分解を機能領域の周りに向けることができる。機能領域は、参照データに対する静的検証、ロジック処理、出力生成などのようなものとすることができる。アプリケーションを複数の処理ステージに分解するための例示的なガイド原理は再利用可能な機能、または他のものと重複しない機能を、好ましくはそれ自体の処理ステージに分離すべきであることであり得る。
【0054】
いくつかの処理ステージが分解されるべきであると特定されるとき、それらのステージのそれぞれのメッセージAPIは、イングレスとエグレスの両方で定義される可能性がある。次いで、メッセージの名前は、分解によって得られた個々のコンポーネントにおいてパブリッシャおよびサブスクライバを作成するときにトピックとして使用することができる。このアプローチは分離され自己宣言されたコンポーネントを生成し、クラシックな垂直手続き呼び出しをとり、それらを、水平パイプラインを形成するメッセージに変換するものと考えることができる。
【0055】
例示的な実施形態では、例えば、
図1に示されるゲートウェイアプリケーション126または電子取引所アプリケーション116などのアプリケーションのためのプログラムコード202は複数のコンポーネントまたはモジュール204(例えば、モジュール−1 204a、モジュール−2 204b、・・・、モジュール−n 204n)に分解され得る。プログラムコード202はセットからの1つ以上のプログラミング言語またはスクリプト言語を使用して指定することができ、1つ以上の入力、処理ロジック命令、および1つ以上の出力を指定することができる。プログラムコード202内の処理ロジック命令は、プロシージャコールを有する少なくとも一部の命令を含む命令のシーケンスとして指定することができる。少なくともいくつかの実施形態によれば、分解は完全に宣言的に指定されたプログラムコード202などのプログラムコードを入力として受け取り、メッセージを交換することによってパブリッシュ−サブスクライブ・パラダイム内で完全に相互作用する処理ステージのセットを出力する。
【0056】
プログラムコード202の分解は自動的に、手動で、またはそれらの組み合わせによって実行されてもよい。(例えば、分解プログラム218によって)自動的に実行される分解の任意の部分について、分解プロセスは、1つ以上のユーザ構成可能構成パラメータ220に従って制御され得る。部分分解は例えば、処理のメタレベル記述のより多くが記述される高レベルドメイン固有言語(DSL)に基づくことができる。これは、このDSLのコンパイラへの入力であり、結果としてパブリッシュ−サブスクライブ・モジュールの構成を生成することができる。コンパイラは各機能の複雑さの記述に基づいて決定を行い、関数が単純な場合には手続き呼び出しを作成し、複雑さが高い場合にはパブリッシュ−サブスクライブリンクを作成することを選択することができる。また、非同期処理を利用するために、1つの関数の出力が複数の他の関数への入力として使用される場合、必要なトポロジに基づいて決定することもできる。
【0057】
いくつかの実施形態によれば、分解はプログラムコード202内の別個の関数(例えば、プログラムコードのいくつかの部分によって使用されるモジュールなど)を識別することと、その識別された別個の関数のすべて(または実質的にすべて)のインスタンスをプログラムコード202から抽出することと、抽出された部分とプログラムコード202の残りの部分との間のメッセージインタフェースを定義することとを含む。コード202の様々な機能は、関数/クラス名、クラス属性名、関数/クラス内から行われる呼び出しなどの特性に従ってグループ化することができる。
【0058】
自動分解プロセスを制御することができるユーザ構成可能な設定パラメータは抽出されるモジュールの1つ以上の識別情報(例えば、機能、プロシージャまたはクラスの名前)、許容される分解されたモジュールの最大個数、モジュールを分散させることができるプロセッサの数、モジュールを分散させることができるプロセッサコアの数などを含むことができる。
【0059】
次いで、モジュール204は1つ以上の性能特性および/または性能メトリックが改善されるように、複数のプロセッサおよび/または処理コアに分散される。
図2に示す例示的な実施形態では、モジュール204がコンピュータ208の処理コア210(210a、210b、および210c)の間で分散される。いくつかの実施形態では、分散が実質的に等しい数のモジュールを各プロセッサまたは処理コアに分散すること(またはワークロードの実質的に均一な分散を達成しようと試みる方法で)を含むことができる。モジュールを分散させる際に、データを共有する可能性および/または頻繁な対話を有する可能性がある場合、2つ以上のモジュールを特定の処理コア上に配置することができる。共有データのレベル、またはコロケーションされるモジュールを限定する頻繁な相互作用のレベル(例えば、2つのモジュールのエグレス/イングレスAPI間のマッチ、期待されるメッセージ数/メッセージ頻度)に対する閾値は構成可能である可能性がある。
【0060】
図示の実施形態ではコンピュータ208がそれぞれのコアがそれ自身のローカルメモリを有するSMPコンピュータであってもよく、すべてのコア210a〜210cは共有メモリ214、およびオプションとしてメモリデバイス216へのアクセスを有する通信バス複合体(通信インフラストラクチャ)212に接続されている。それぞれのコア上に配置されたモジュール204は、バス複合体212を介して共有メモリ214および/またはメッセージ交換を介して互いに通信することができる。同じコア上に配置されたモジュール204は、そのコアのローカルメモリ(またはローカルキャッシュ)を介して相互作用することもできる。例えば、上述したように、共有メモリ内のロックフリーキュー(例えば、異なるコア上の処理ステージ間、および/または、同一コア上で実行される処理ステージまたは関連スレッド間で情報を交換するためのコアのローカルメモリ内の情報を交換するための共有メモリ214内)がそれぞれの処理ステージ間で情報を使用してもよい。図示の実施形態では、分解されたモジュール1〜nがモジュール1、2、およびnがコア210aに配置され、モジュール4およびn−2がコア210bに配置され、モジュール3およびn−1がコア210cに配置されるように、コンピュータ208の処理コアに分散される。メモリデバイス216には、分解器(デコンポーザ)218、プログラムコードを分解するためのロジック202、および設定パラメータ220も記憶されている。
【0061】
図3の説明
図3は、いくつかの例示的な実施形態によるパブリッシュ−サブスクライブ・フレームワークを実装するためのあるプリミティブに対応するオブジェクトと、パブリッシュ−サブスクライブ・フレームワークに従ってアプリケーションを実行する実行カーネル内のオブジェクト間の関係との概略図を示す。
【0062】
図3は、特定の実施形態による実行カーネル内のオブジェクトの階層関係を示す。「カーネル」または「カーネルオブジェクト」302は他のすべてのプリミティブに関する知識を有する中央の断片であり、他のプリミティブを作成するためのルートである。実行カーネルオブジェクト302は、マルチスレッド、マルチコア、マルチプロセス、およびマルチホストアプリケーションの構築を容易にするパブリッシュ−サブスクライブ・フレームワークをインスタンス化することができる。実行カーネルは、マルチプロセッシング・アプリケーションのための同期の実装を容易にする。
【0063】
セッションオブジェクト304はメッセージのストリームを記述し、関連メッセージのグループ化を制御するためにアプリケーションに提供する。実行カーネルオブジェクト302は、マルチスレッド、マルチコア、マルチプロセス、およびマルチホストアプリケーションの構築を容易にするパブリッシュ−サブスクライブ・フレームワークをインスタンス化することができる。パブリッシャとサブスクライバが特定のセッションに結び付けられると、新しいセッションを作成し、新しいセッションで同じパブリッシャとサブスクライバのセットを作成すると、同じパイプラインの新しいインスタンスが作成され、他のインスタンスから分離されたメッセージフローが生成される。メッセージトランスポートの異なるドメイン、例えば、プロセスドメイン、ホストドメイン、ネットワークドメインに対して、セッションオブジェクトの異なる実装が存在する可能性がある。
図2の説明はプロセス領域内のユーザセッションによって容易にされる同一プロセス通信領域内の複数の処理コアに関するものであるのに対し、ホスト領域およびネットワーク領域内のユーザチャネルをインスタンス化する能力は、複数のプロセッサおよびネットワークを介した複数のホストへのパイプライン処理ステージの分散を可能にする。ホストローカルドメインの場合、同じまたは類似の共有メモリモデルを使用して、ホストメモリサブシステムを使用して同じホスト上の異なるプロセス間の通信を可能にするメッセージングプリミティブを定式化することができる。主な違いは、実行カーネルのオーケストレーションおよびシグナリングが複数のプロセス間のこの相互作用を容易にするために、アウト・オブ・プロセス・デーモンとして実装されることを必要とし得ることであり得る。ネットワーク領域においては、いくつかの実施形態において、米国特許第9,712,606号(その内容は本文書全体に盛り込まれている)に記述されているような、信頼できる順序付けられたストリームが各セッションに対して使用される場合の実施形態に類似する実施が用いられるのであろう。セッションオブジェクトは、名前属性346によって識別されてもよい。セッションオブジェクトはセッション参加者に、セッションに参加する新しいパブリッシャおよび/または新しいサブスクライバなどのイベントを通知するようにシグナリングするための方法348を含むことができる。
【0064】
コンテキストオブジェクト(例えば、実行コンテキスト306および308)はアプリケーションがメッセージの受信および送信を制御し、拡張によってアプリケーションの実行を制御することを可能にする。コンテキストオブジェクト306および308は、実行スレッドを記述する。各コンテキストオブジェクトは、個々のオブジェクトについて読取り可能および書込み可能なステータスを監視することができるマルチプレクサ・オブジェクト(セレクタ)でもある。各クライアントが特定のコンテキストにバインドされ、公開および加入が特定のクライアントにバインドされると、クライアントのメッセージの受信および送信は、アプリケーション定義のコンテキスト内になる。各コンテキストは、それぞれの実行スレッドにマップすることができるので、アプリケーションはどのコンテキストを特定のクライアントに使用するかを選択することができ、したがって、個々の処理ステージがどのスレッド上でそれが実行されるか、および他のコンポーネントとどのように通信するかに関する特定の知識を有する必要なく、処理ステージのスレッド化を制御することができる。
【0065】
例えば、クライアントオブジェクト310および316のいずれかのような「クライアント」または「クライアントオブジェクト」は、セッションへの参加を表記する。クライアントは、メッセージのパブリッシュとサブスクライブの両方に使用される。各クライアントオブジェクトは、パブリッシャオブジェクトとサブスクライバオブジェクトをインスタンス化できる。createPublisher 322およびcreateSubscriber 324などの方法は、それぞれ、パブリッシャおよびサブスクライバの作成に使用することができる。メッセージの順序はクライアントごとに保持される。メッセージの順序はクライアントごとに保持される。つまり、1つ以上のサブスクライビングクライアントは、対応するパブリッシングクライアントによって公開されたのと同じ順序でメッセージを受信する。ただし、2つの異なるパブリッシングクライアントの順序は定義されていない場合がある。メッセージの順序付けは、msgOrdering 326 などの方法を使用して処理できる。順序付けは、公開されたメッセージをエンキューイングし、公開されたメッセージのキュー内の順序に従ってのみメッセージを各サブスクライバに配布することによって処理することができる。メッセージの損失のない(ロスレス)送信は、losslessTransmit328のような方法によってクライアントに対して処理されてもよい。ロスレス送信は、各公開されたメッセージに関連付けられた肯定応答および/または再試行メカニズムを実装することによって実行され得る。
【0066】
例えば、パブリッシャオブジェクト312および318のような「パブリッシャ」または「パブリッシャオブジェクト」は送信されるメッセージのタイプを記述し、すなわち、パブリッシャは、その特定のパブリッシャの「トピック」である名前で作成される。メッセージが(例えば、送信方法330を使用して)パブリッシャと一緒に送信されるときはいつでも、それはその特定のトピックとして送信される。
【0067】
「サブスクライバ」または「サブスクライバオブジェクト」(例えば、サブスクライバオブジェクト314および320のいずれか)は受信されているメッセージのタイプを記述し、すなわち、サブスクライバは、その特定のサブスクライバの「トピック」である名前で作成される。メッセージがサブスクライバに対して(例えば、受信方法340を使用して)受信されているときはいつでも、それはその特定のトピックのものである。
【0068】
一実施形態によれば、電子取引所アプリケーション実行カーネル116は、カーネルオブジェクト302のインスタンス化であってもよく、プロセスに対応してもよい。セッションオブジェクト304は、パブリッシュ−サブスクライブ・フレームワークを調整するためにスレッドとしてインスタンス化されてもよい。一実施形態では、セッションオブジェクトがユーザから受信した各オーダリクエストに対してインスタンス化されてもよい。アプリケーション116の分解された処理ステージのそれぞれは、クライアントオブジェクト(例えば、クライアントオブジェクト310または316など)の別個のインスタンス化であってもよく、電子取引所アプリケーション116に対応するプロセスの他のスレッドと非同期かつ同時に実行するそれぞれのスレッドに対応してもよい。各クライアントオブジェクトは対応するサブスクライバオブジェクト(例えば、クライアントオブジェクト310のサブスクライバオブジェクト314)をインスタンス化することによって、そのイングレスメッセージAPIをインスタンス化し、対応するパブリッシャオブジェクト(例えば、クライアントオブジェクト310のパブリッシャオブジェクト312)をインスタンス化することによって、そのエグレスメッセージAPIをインスタンス化する。上述したように、各パブリッシャおよびサブスクライバは、公開または加入される特定のメッセージを識別する少なくとも1つのトピックに関連付けられる。特定のトピックに対する公開および加入は、処理ステージ間の通信のためのロジックトポロジを定義する。特定の実施形態では、実行カーネルが利用可能な処理リソース上の処理ステージの配置を決定し、異なる処理ステージ間の通信を効率的に容易にするために論理通信インフラストラクチャをセットアップする。分散および論理通信インフラストラクチャは所定のパフォーマンスメトリック(たとえば、オーダを処理するための平均時間などのアプリケーション速度、または所定の時間制約内で処理されることが可能な同時オーダの数などの同時ボリューム)を改善するように構成され得る。決定された分散および論理通信インフラストラクチャに従って、カーネルはシステムソフトウェア(例えば、システムソフトウェア120または124)に、識別された処理リソース上で特定のスレッドを実行し、共有メモリ内に1つ以上のメッセージキューを作成するように要求してもよい。
【0069】
図4の説明
図4は、いくつかの例示的な実施形態による、実行カーネルにおける公開および加入を表す例示的なアクティビティフロー400を示す。
【0070】
セッションスレッド404、パブリッシャスレッド402、およびサブスクライバスレッド406および408の間のアクティビティフロー400に示すように、特定の「トピック」のメッセージを受信することを所望サブスクライバは、その「トピック」にサブスクライブする。サブスクライバ(または対応するサブスクライバ−クライアントオブジェクト)406および408がセッションオブジェクト404に「トピック」を指定するサブスクリプションメッセージ410および412を送信することによって、それぞれのサブスクリプションを登録する。
【0071】
パブリッシャクライアント402は、メッセージ414をセッションオブジェクト404に送信することによって、「トピック」内のメッセージを公開する。次に、公開されたメッセージは、セッションオブジェクト404によって、メッセージ416および418によって、加入しているクライアントに提供される。
【0072】
図5の説明
図5は、いくつかの例示的な実施形態による、セッションへの新しいパブリッシャの追加を表す例示的なアクティビティフロー500を示す。
【0073】
「トピック」を有する新しいパブリッシャがセッションに参加したことをセッションオブジェクト504に通知するメッセージ508を送信するパブリッシャまたは対応するクライアントオブジェクト502によって、新しいパブリッシャが追加される。セッションオブジェクト504は、新しい「トピック」がサブスクリプションに利用可能であることを各クライアントに通知する。セッションオブジェクト504が「トピック」を各クライアントに通知するそれぞれのメッセージ510を各クライアント506に送信することができる。
【0074】
次いで、1つ以上のクライアントはサブスクライバをインスタンス化し、セッションオブジェクトにメッセージ512を送信することによって「トピック」に加入することを通知することができ、セッションオブジェクトはメッセージ516によって、「トピック」に公開することが可能であることをパブリッシャに通知する。少なくとも1つのクライアントによって「トピック」に加入した後、パブリッシャは
図4に示すように「トピック」を公開することができる。
【0075】
具体的には、サブスクリプションはクライアントのコンテキストで作成される。クライアントは、セッションへのアタッチを表す。サブスクリプションが作成されると、クライアントはセッションオブジェクトにメッセージを送信して、トピックへの関心を通知する。その後、セッションは公開するクライアント実装に、受信者エンドポイントが公開されるメッセージに関心があるというメッセージを送信する。クライアント(またはより正確にはアプリケーションロジック)が必要なサブスクリプションを作成したとき、クライアントは必要なサブスクリプション(およびパブリッシャの作成など)のすべてを完了したことをセッションに肯定応答する。特定のセッションに参加するすべてのクライアントがトピック(パブリッシャ)の作成を承認すると、クライアントは特定のトピックのメッセージを公開できるようになる。たとえば、516はセッションオブジェクトから受信される。たとえば、516はセッションオブジェクトから受信される。要約すると、クライアント上のパブリッシャの作成は510をトリガすることができ、それは512のうちの1つ以上をトリガし、これはアプリケーション要件に応じて、複数の514をもたらす可能性があり、512のすべては(例えば、セッションオブジェクトへのメッセージ(図に示されていない)を介して)肯定応答されることを必要とする可能性があり、すべてのメッセージ512が肯定応答されると、メッセージ516が送信される。
【0076】
図4に関連して説明したように、パブリッシャ(および/または対応するクライアント)、セッション、およびサブスクライバ(および/または対応するクライアント)は、それぞれのスレッドとして実装することができる。
【0077】
図6の説明
図6はいくつかの例示的な実施形態による、例えば、
図1に示されるゲートウェイアプリケーション126のような、パブリッシュ−サブスクライブ・フレームワークにおいて実装される例示的なアプリケーションを示す。
【0078】
ゲートウェイアプリケーション116(例えば、NasdaqのOUCH Gateway(商標))は、実行カーネル602において実行されるいくつかのパイプライン処理ステージに分解されてもよい。分解の例は、クライアント接続、クライアントメッセージフレーミング、インバウンドメッセージロジック、アウトバウンドメッセージロジック、バックエンドメッセージフレーミング、バックエンド接続、ユーザ認証および認可のような機能領域のためのそれぞれの処理段階を含む処理段階をもたらすことがある。
図6は、異なる処理コアにおける各処理ステージの配置例を示す図である。
【0079】
分解から生じる処理ステージのそれぞれは、オブジェクト310(またはオブジェクト316)などのそれぞれのクライアントオブジェクトとしてインスタンス化され得る。各クライアントはそれ自体のコンテキスト(例えば、実行コンテキストオブジェクト306または308のいずれか)を有することができ、実行カーネル(例えば、オブジェクト302)内の別個のスレッドとしてインスタンス化することができる。
【0080】
したがって、クライアントI/O TCP/UDPサービス634、SOUP(登録商標)サーバサービス632、OUCH(登録商標)イングレスサービス636、OUCH(登録商標)Geniumイングレスサービス638、モードUSコアサービス640、Genium Inet(登録商標)プロトコルサービス642、OUCH(登録商標)エグレスサービス646、OUCH(登録商標)Genium(登録商標)エグレスサービス648、およびRegNMS USサービス650はそれぞれ、それ自体のコンテキスト内でそれぞれのクライアントオブジェクトとしてインスタンス化される。
【0081】
ユーザ650、652、および654のそれぞれのための処理パイプラインに含まれるメッセージ交換は、処理ステージ間パブリッシュ−サブスクライブ交換のシーケンスによって表すことができる。ユーザ650、652、654ごとに個別のセッションが作成され、各ユーザのセッションは、パブリッシュ−サブスクライブ・シーケンスで、そのユーザの異なるパイプライン処理ステージを結び付ける。ユーザ650のパブリッシュ−サブスクライブ・シーケンスは、メッセージ交換604〜606〜608(イングレス)および610〜612〜614(エグレス)、ユーザ652、616〜618〜620(イングレス)および626〜628〜630(エグレス)、ならびにユーザ654、616〜618〜622〜624(イングレス)および626〜628〜630(エグレス)によって表すことができる。
【0082】
図6に示されている他のすべての処理ステージがユーザセッションに関連付けられるのに対し、ステージ640および642はさらに、バックエンド取引サーバへの接続を表すセッションに加入している。したがって、ステージ640および642は、ユーザセッションのためのクライアントおよびバックエンドセッションのためのクライアントを、各クライアント上のサブスクライバおよびパブリッシャと共にインスタンス化する。次いで、ステージ640および642は、ユーザセッションとバックエンドセッションとの間のルーティングを実行する。
【0083】
ゲートウェイアプリケーション126に関連した重要な観点は、ゲートウェイは、新しいユーザが接続を確立するときに、典型的には既にユーザが接続されている(したがって、セッションが確立されている)ことである。これは、処理パイプライン内のすべての処理ステージが新しいユーザに関連付けられたメッセージを受け入れて処理することができ、また、新しいユーザを他のユーザから区別することができることを要求される可能性があるため、困難な同期問題をもたらす可能性がある。
【0084】
したがって、新しいユーザ接続のセットアップは、分散パイプラインが適切なサブスクリプションを発見し登録することを可能にする実行カーネルアナウンス(シグナリング)メカニズムを使用することによって達成することができる。アナウンスメカニズムはユーザ固有のパイプラインを確立するために、複数のレベルで使用されてもよい。
【0085】
オーダを含むデータメッセージなどのユーザからのリクエストを受信すると、クライアントI/Oサービス634は、ユーザのための新しい実行カーネルセッションを作成する。これにより、すべての実行カーネルコンテキストへのアナウンスが生成され、新しく作成されたセッションでクライアントを開くことができる。そして、クライアントI/Oサービス634は新しい実行カーネルセッション上に新しい実行クライアントを作成してもよく、実行カーネルクライアントのための新しい実行カーネルパブリッシャも作成する。これにより、実行カーネルセッションに登録されているすべての実行カーネルクライアントへのアナウンスが発生する。パイプライン内の各サービスは新しく作成されたパブリッシャに関する知識を使用して、一致する実行カーネルサブスクライバを作成し、公開されたメッセージをリッスンする。
【0086】
すべての実行カーネルクライアントがパブリッシャの作成を確認したら、クライアントI/O 634内のパブリッシャを使用してメッセージを公開することができる。
【0087】
図7の説明
図7は、いくつかの例示的な実施形態による、セッションの初期接続および許可のための動作の例示的なシーケンス700を示す。ユーザセッションの初期作成のための操作は、パイプライン処理ステージ間のパブリッシュ−サブスクライブ・メッセージ交換のシーケンスとして示される。
【0088】
ゲートウェイ(例えば、ゲートウェイ104)が立ち上がる際に、いくつかの新しいセッションが開始されうる。制御セッションが作成され、そこにすべての処理ステージが加入される。ユーザ(例えば、ユーザ650、652、または654のいずれか1つ)が例えば、ゲートウェイにオーダを提出すること(702)によってコネクションを開始すると、クライアントI/Oサービス634は、最初にリクエストを受信することができる。パイプライン処理ステージ634は、I/O接続サービス704およびI/Oソケットサービス706のためのそれぞれのスレッドを含むことができる。I/O接続サービス704は接続要求を受信し、制御セッション上の新規ユーザリクエストについて信号を送る。その後、I/Oソケットサービスはユーザとハンドシェイクを実行し、ユーザのための新規セッションの作成を開始する。リクエストがI/Oサービス704〜706によって処理された後、当該リクエストは、新規セッションのためのサブスクライバを作成することによってSOUPフレーミングサービス708によって処理される。フレーミングサービス708は、認証処理ステージ710で認証リクエストを提出してもよい。認証パイプラインステージ710で認証が成功すると、フレーミングサービス708に通知され、ユーザセッションが操作712で作成され、実行カーネル内の対応するセッションアナウンスが進行する。
【0089】
図8の説明
図8は、いくつかの例示的な実施形態による、
図6に示されるゲートウェイアプリケーションにおけるユーザセッション確立のための操作800の例示的なシーケンスを示す。操作800は、
図7に示されるユーザセッションアナウンスメントに応答して、パイプラインの残りの部分におけるシグナリングおよびセッションアタッチメントを示す。パイプライン処理ステージは、新しいセッションが作成されたことを示すシグナリングをリッスンする。パイプラインステージはイングレスメッセージの適切なサブスクライバ、エグレスメッセージのパブリッシャをセットアップし、これが行われると、構成要素はユーザセッションの作成を確認する。例えば、セッションが確立されると、712、OUCH(登録商標)デコード802、イングレスビジネスロジック804、バックエンドストリームエグレス806、バックエンドストリームイングレス808、エグレスビジネスロジック810、およびOUCH(登録商標)エンコード812処理ステージは、必要に応じて、対応するクライアントオブジェクトおよび/または対応するサブスクライバおよびパブリッシャをインスタンス化することによってセットアップされ得る。パイプラインが完全にセットアップされると、ユーザに関連するメッセージの処理をI/Oサービスで送信できる。
【0090】
図9の説明
図9は、いくつかの例示的な実施形態に従って、
図6に示されるゲートウェイアプリケーションにおけるゲートウェイ取引イングレスパイプラインのための動作シーケンス900の一例を示す。いくつかの例示的な実施形態による完了インバウンド(および
図10のアウトバウンド)パイプラインは、フロー900および
図6に詳述されている。パイプラインは、特定のユーザ特異性およびバックエンド特異性に依存する多数のバリエーションを示す。任意の所与の構成およびユーザに対して、直線的な流れのみが使用されてもよい。例えば、第1のユーザの場合、ストレートフローは、パイプライン処理ステージI/Oソケットサービス902、SOUP(登録商標)フレーミングサービス904、OUCH(登録商標)プロトコル・デコード・サービス906、ビジネス・ロジック・イングレス・サービス908、およびストリームサービス910〜914のいずれか1つのシーケンスを含むことができる。第2のユーザの場合、ストレートフローは、I/Oソケットサービス902、FIX(登録商標)セッションサービス916、FIX(登録商標)プロトコル・デコード・サービス918、ビジネス・ロジック・イングレス・サービス908、およびストリームサービス910〜914のいずれか1つを含むことができる。SOUPフレーミングサービス904は、ユーザ毎に状態を維持する。イングレスビジネスロジックは、特定のリスク等を低減するように指示されてもよく、特定の順序に応じて変化してもよい。処理レベルでは、パイプラインのすべての組合せを同時にアクティブにすることができ、異なるユーザ固有プロトコルおよびバックエンドプロトコルを同時に使用することができる。
【0091】
図10の説明
図10は、いくつかの例示的な実施形態による、
図6に示されるゲートウェイアプリケーションにおけるゲートウェイ取引エグレスパイプラインのための操作1000の例示的なシーケンスを示す。任意のフロー1000は、フロー900と共通の1つ以上の処理ステージインスタンスを有することができる。
図9に関連して上述した第1のユーザのためのエグレス・ストレート・フローは、ストリームサービス1002〜1006、ビジネス・ロジック・エグレス・サービス1008、OUCH(登録商標)プロトコル・デコード・サービス1010、SOUP(登録商標)フレーミングサービス1012、およびI/Oソケットサービス1014のうちの任意の1つのパイプライン処理ステージのシーケンスを含むことができる。第2のユーザの場合、エグレス・ストレート・フローは、ストリームサービス1002〜1006、ビジネス・ロジック・エグレス・サービス1008、FIX(登録商標)プロトコル・エンコード・サービス1016、FIX(登録商標)セッションサービス1018、およびI/Oソケットサービス1014のうちの任意の1つを含むことができる。ゲートウェイは、バックエンド・サーバ・インフラストラクチャへの単一の接続しか持たない可能性があるので、すべてのユーザのためにバックエンドへの発信ユーザ・トラフィックを処理するI/Oソケットサービス1014の単一のインスタンスが存在する可能性がある。SOUPフレーミングサービス1012はユーザ毎にバッファリングとフレーミングを実行し、SOUPフレーミングサービス904とユーザ毎に(ユーザ毎のイングレスとエグレスとの間の状態を維持するために)同じインスタンスであってもよい。
【0092】
図11の説明
図11は、いくつかの例示的な実施形態による、パブリッシュ−サブスクライブ・フレームワークにおいて実行される、
図1に示される電子取引所アプリケーション116などの例示的なアプリケーションを示す。
【0093】
電子取引所アプリケーションのマッチングエンジンを
図11に示す。マッチングエンジンは、異なる処理ステージが実行カーネル1102上で実行されるように分離され、パイプラインの一部が並列化されてパイプライン処理ステージの非同期および同時実行を可能にするパイプラインとしてモデル化することができる。特に、注文書処理ステージはパイプラインの残りの部分から切り離すことができ、複数のユーザおよび/またはゲートウェイをそのステージで同時にサービスすることができるように並列化することができる。
【0094】
マッチングエンジンは、取引を受け入れ、応答を送信するストリームI/O処理ステージ、メッセージデコーディング(復号)ステージ、静的検証およびロジックステージ、分割型注文書ロジックステージ、およびメッセージエンコーディング(符号化)ステージに分解することができる。ユーザを多重化し、したがってユーザ接続のレベルで並列化することができる
図6のゲートウェイアプリケーションとは対照的に、マッチングエンジンは複数の注文書または注文書セクションを処理し、注文書処理ステージで並列化することができる。これらの分解されたステージに対応して、ストリームI/Oサービス1150、メッセージ・デコーダ・サービス1152、およびメッセージ・エンコーダ・サービス1154のためのクライアントスレッドはCPUコア1内に位置することができ、静的検証サービス1156および静的ロジックサービス1158はCPUコア2内に位置することができ、注文書ロジックサービスのインスタンス1160〜1166はCPUコア4、5、6、・・・上でインスタンス化することができ、
図11Nは、実行リソースにマッピングされた共通および分離データフローの両方を有するマッチング・エンジン・パイプライン・ステージの割り当てを示す。
【0095】
各ユーザ(例えば、
図6に示すユーザ650、652、654など)のための処理パイプラインに含まれるメッセージ交換は、処理ステージ間の一連のパブリッシュ−サブスクライブ交換によって表すことができる。ユーザ650のパブリッシュサブスクライブシーケンスは、1104−1106−1108−1132−1112−1134(および/または1116−1136、1120−1138、1124−1140のうちの任意の1つ以上)−1142−1130;ユーザ652の場合、1104−1106−1108−1110−1112−1114(および/または1116−1118、1120−1122、1124−1126のうちの任意の1つ以上)−1128−1130であってもよい。
【0096】
セッション、クライアント、パブリッシャおよびサブスクライバのような実行カーネルオブジェクトのパイプライン構築および関連するセットアップは実行リソースの動的プロビジョニングが不要な単純な場合に、静的な方法で実行することができる。一方、注文書ロジックは分割され、注文書グループの処理は並列に行われる。
【0097】
オーバーラップ処理は少なくとも2つの重要な利点をもたらす。注文書ロジックが高度の計算量を有する場合、注文書を典型的な場合である独立したグループにセグメント化することができる場合、スループットを線形スケーリングで増加させることができ、異なる計算量を有する異なるタイプの注文書がある場合、「単純である」注文書の処理待ち時間は、「複雑である」注文書の処理待ち時間から切り離される。この複雑さの違いは異なるタイプの資産クラスを有するマーケットで観察することができ、この場合、複雑な戦略注文はあるクラスの資産に対しては可能であるが、別のクラスに対しては可能ではない。
【0098】
図12の説明
図12は、いくつかの例示的な実施形態による、
図11の電子取引所アプリケーションにおけるマッチング・エンジン・パイプラインのための動作1200の例示的なシーケンスを示す。
【0099】
このようなモデルは「ラインスキップ」モデルをもたらし、これは、並列であるパイプ線ステージが任意の順序で完了することができる、重なり合った様式での入力メッセージの非同期処理を可能にする。
図12は基本的な静的に構成されたマッチングエンジン(ストリームI/O処理ステージ1202、メッセージデコード処理ステージ1204、静的検証ステージ1206、静的ロジック処理ステージ1208、注文書ロジックステージ1210〜1214のいずれか1つ以上、およびメッセージ符号化処理ステージ1216)におけるパイプラインステージを詳細に示し、矢印のいくつかは、検証ステージのために取引が完全なパイプラインを横断しないことにつながり得る決定を示す。
【0100】
図13の説明
図13は、いくつかの例示的な実施形態による、
図11の電子取引所アプリケーションにおける動的マッチング・エンジン・パイプラインのための動作1300の例示的なシーケンスを示す。
【0101】
パイプラインをさらに拡張して、注文書分割(パーティショニング)の動的なスケーリングを可能にすることができる。これは、注文書ロジックグループ1310〜1314の追加および削除を同期させるガバナ1318を追加することによって達成される。ガバナを除いて、シーケンス1300の他の処理ステージ(ストリームI/O処理ステージ1302、メッセージデコード処理ステージ1304、静的検証ステージ1306、静的ロジック処理ステージ1308、注文書ロジックステージ1310〜1314のうちのいずれか1つ以上、およびメッセージエンコード処理ステージ1316)は
図12に示される対応するステージと同じであってもよく、
図13は注文書ロジックグループ1310〜1314がガバナ1318にどのように接続されるかを示す。
【0102】
ガバナ1318は、処理トポロジへの変更が必要とされ、ガバナ1318とオーダロジックグループ1310〜1314との間の相互作用およびメッセージが通常のパイプライン取引に関連して分離および分離されたメッセージング・ドメインを可能にする異なるセッション上にある場合の同期点である。
【0103】
注文書ロジックグループを追加または削除する場合、ガバナは必要なグループにサスペンドメッセージを送信する。サスペンドメッセージを受信すると、通常のパイプライン処理が停止し、ガバナに現在保持モードになっていることを示す確認応答が送信される。すべての必要なグループがバリア(サスペンドメッセージで表されるなど)を確認した場合、ガバナは注文書グループトポロジを再設定し、これが完了すると、ガバナはサスペンドグループにレジュームメッセージを送信する。サスペンドグループは、受信時に取引パイプラインの処理を続行する。
【0104】
パイプラインの再構成の間、動作に関与するグループのみが中断される必要があり、これは、他の注文書グループのためのトランザクションのプロセスが中断されずに進行することができることを意味する。
【0105】
図14の説明
図14はいくつかの実施形態による、例示的なコンピューティングデバイス1400(例えば、「コンピューティングデバイス」、「コンピュータシステム」、または「コンピューティングシステム」とも呼ばれ得る)のブロック図である。いくつかの実施形態において、コンピューティングデバイス1400は、1つ以上のプロセッサ1402、1つ以上のメモリデバイス1404、1つ以上のネットワークインタフェースデバイス1406、1つ以上のディスプレイインタフェース1408、および1つ以上のユーザ入力アダプタ1410のうちの1つ以上を含む。さらに、いくつかの実施形態では、コンピューティングデバイス1400がディスプレイデバイス1412に接続されるか、またはこれを含む。以下で説明するように、これらの要素(例えば、プロセッサ1402、メモリデバイス1404、ネットワークインタフェースデバイス1406、ディスプレイインタフェース1408、ユーザ入力アダプタ1410、ディスプレイデバイス1412)はコンピューティングデバイス1400のための様々な異なる機能を実行するように構成されたハードウェアデバイス(例えば、電子回路または回路の組合せ)である。
【0106】
いくつかの実施形態では、プロセッサ1402の各々または任意が例えば、シングルコアまたはマルチコアプロセッサ、マイクロプロセッサ(例えば、中央処理装置またはCPUと呼ばれ得る)、デジタル信号プロセッサ(DSP)、DSPコアに関連するマイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)回路、またはシステムオンチップ(SOC)(例えば、CPUと、メモリ、ネットワーキングインタフェースなどの他のハードウェア構成要素とを含む集積回路)であるか、またはそれらを含む。そして/またはいくつかの実施形態では、プロセッサ1402のそれぞれまたは任意のものはx86またはAdvanced RISC Machine(ARM)のような命令セットアーキテクチャを使用する。
【0107】
いくつかの実施形態では、メモリデバイス1404の各々または任意のものはランダムアクセスメモリ(RAM)(ダイナミックRAM(DRAM)またはスタティックRAM(SRAM)など)、フラッシュメモリ(例えば、NANDまたはNOR技術に基づく)、ハードディスク、光磁気媒体、光媒体、キャッシュメモリ、レジスタ(例えば、命令を保持する)、またはデータおよび/または命令の揮発性または不揮発性記憶を実行する他の種類の装置(例えば、プロセッサ1402上またはそれによって実行されるソフトウェア)であるか、またはそれらを含む。メモリデバイス1404は、不揮発性コンピュータ可読記憶媒体の一例である。
【0108】
いくつかの実施形態では、ネットワークインタフェースデバイス1406のそれぞれまたは任意のものは1つ以上の回路(ベースバンドプロセッサおよび/または有線または無線トランシーバなど)を含み、1つ以上の有線通信技術(イーサネット(IEEE 802.3など))および/または無線通信技術(ブルートゥース、WiFi(IEEE 802.11)、GSM、CDMA2000、UMTS、LTE、LTE−Advanced(LTE−A)、および/または他の短距離、中距離、および/または長距離無線通信技術など)のためのレイヤ1、レイヤ2、および/またはより高いレイヤを実施する。トランシーバは、送信機及び受信機のための回路を備えることができる。送信機および受信機は共通の筐体を共有することができ、送受信を実行するために筐体内の回路のいくつかまたはすべてを共有することができる。いくつかの実施形態では、トランシーバの送信機および受信機がいかなる共通の回路も共有しなくてもよく、および/または同じまたは別個の筐体内にあってもよい。
【0109】
いくつかの実施形態では、ディスプレイインタフェース1408のそれぞれまたは任意のものはプロセッサ1402からデータを受信し、受信したデータに基づいて(例えば、別個GPU、統合GPU、グラフィカル処理を実行するCPUなどを介して)対応する画像データを生成し、および/または出力し(例えば、High−Definition Multimedia Interface(HDMI)、DisplayPortインタフェース、ビデオグラフィックスアレイ(VGA)インタフェース、デジタルビデオインタフェース(DVI)など)、生成した画像データをディスプレイデバイス1412に表示する1つ以上の回路である。代替的または追加的に、いくつかの実施形態では、ディスプレイインタフェース1408の各々または任意のものは例えば、ビデオカード、ビデオアダプタ、またはグラフィックス処理ユニット(GPU)であるか、またはそれを含む。
【0110】
いくつかの実施形態では、ユーザ入力アダプタ1410のそれぞれまたは任意のものはコンピューティングデバイス1400に含まれ、それに取り付けられ、またはそれと通信する1つ以上のユーザ入力デバイス(
図14には図示せず)からユーザ入力データを受信し、処理し、受信した入力データに基づいてプロセッサ1402にデータを出力する1つ以上の回路であるか、またはそれを含む。代替的にまたは追加的に、いくつかの実施形態では、ユーザ入力アダプタ1410の各々または任意のものは例えば、PS/2インタフェース、USBインタフェース、タッチスクリーンコントローラなどであるか、またはそれらを含み、および/またはユーザ入力アダプタ1410は例えば、キーボード、マウス、トラックパッド、タッチスクリーンなどのユーザ入力デバイス(
図14には示されていない)からの入力を容易にする。
【0111】
いくつかの実施形態では、ディスプレイデバイス1412は液晶表示(LCD)ディスプレイ、発光ダイオード(LED)ディスプレイ、または他の種類のディスプレイデバイスであってもよい。ディスプレイデバイス1412がコンピューティングデバイス1400の構成要素である(例えば、コンピューティングデバイスおよびディスプレイデバイスが統一されたハウジングに含まれる)実施形態では、ディスプレイデバイス1412はタッチスクリーンディスプレイまたは非タッチスクリーンディスプレイであってもよい。ディスプレイデバイス1412がコンピューティングデバイス1400に接続される(例えば、コンピューティングデバイス1400の外部にあり、有線および/または無線通信技術を介してコンピューティングデバイス1400と通信する)実施形態では、ディスプレイ1412は例えば、外部モニタ、プロジェクタ、テレビ、ディスプレイスクリーンなどである。
【0112】
様々な実施形態では、コンピューティングデバイス1400が上述の要素(例えば、プロセッサ1402、メモリデバイス1404、ネットワークインタフェースデバイス1406、ディスプレイインタフェース1408、およびユーザ入力アダプタ1410)のそれぞれまたは任意の1つ、2つ、または3つ、4つ、またはそれ以上を含む。代替的または追加的に、いくつかの実施形態では、コンピューティングデバイス1400がプロセッサ1402を含む処理システムと、メモリデバイス1404を含むメモリまたは記憶システムと、ネットワークインタフェースデバイス1406を含むネットワークインタフェースシステムとのうちの1つ以上を含む。
【0113】
コンピューティングデバイス1400は、様々な実施形態において、多くの異なる方法で構成され得る。一例として、コンピューティングデバイス1400はプロセッサ1402がマルチ(または単一)コアプロセッサと、第1のネットワークインタフェースデバイス(例えば、WiFi、Bluetooth、NFCなどを実装する)と、1つ以上のセルラー通信技術(例えば、3G、4G LTE、CDMAなど)を実装する第2のネットワークインタフェースデバイスと、メモリまたはストレージデバイス(例えば、RAM、フラッシュメモリ、またはハードディスク)とを含むように配置されてもよい。プロセッサ、第1のネットワークインタフェースデバイス、第2のネットワークインタフェースデバイス、およびメモリデバイスは同じSOC(例えば、1つの集積回路チップ)の一部として統合されてもよい。別の例として、コンピューティングデバイス1400はプロセッサ1402が2つ、3つ、4つ、5つ、またはそれ以上のマルチコアプロセッサを含むように配置されてもよい。ネットワークインタフェースデバイス1406はイーサネットを実装する第1のネットワークインタフェースデバイスと、WiFiおよび/またはBluetoothを実装する第2のネットワークインタフェースデバイスとを含み、メモリデバイス1404はRAMおよびフラッシュメモリまたはハードディスクを含む。
【0114】
先に述べたように、ソフトウェアモジュールまたはソフトウェアプロセスが何らかのアクションを実行することが本書に記載されている場合、そのアクションは、実際にはソフトウェアモジュールを構成する命令に従って、基盤となるハードウェア要素によって実行される。前述のように、様々な実施形態では、サーバインフラストラクチャ102、クライアントデバイス108および110、ゲートウェイ104、コンピュータ112および114、電子交換アプリケーション116、ゲートウェイアプリケーション126、システムソフトウェア120および124、システムソフトウェア130、クライアントアプリケーション132および134、コンピュータ208、デコンポーザ218、設定220、処理ステージ632〜650、および処理ステージ1152〜1166の各々または任意の組み合わせは、本明細書の残りの部分では「コンポーネント」として明確にするために個別に参照されるであろうが、
図14のコンピューティングデバイス1400の例を使用して実施される。そのような実施形態では、各構成要素について以下のことが適用される:(a)
図14に示すコンピューティングデバイス1400のエレメント(すなわち、1つ以上のプロセッサ1402、1つ以上のメモリデバイス1404、1つ以上のネットワークインタフェースデバイス1406、1つ以上のディスプレイインタフェース1408、および1つ以上のユーザ入力アダプタ1410)、または前記の適切な組み合わせまたはサブセット)は、コンポーネントによって実行されるように、および/またはコンポーネント内に含まれるように本明細書に記載された任意のソフトウェアモジュールによって実行されるように、本明細書に記載された動作、活動、または機能のそれぞれまたは任意の組み合わせを実行するように構成され、適合され、および/またはプログラムされ、b)代替的または追加的に、1つ以上のソフトウェアモジュールがコンポーネント内に存在することが本明細書に記載されている範囲で、いくつかの実施形態では、そのようなソフトウェアモジュール(およびソフトウェアモジュールによって処理および/または使用されるように本明細書に記載されている任意のデータ)は、メモリデバイス1404内に格納されている(例えば様々な実施形態では、RAMまたは命令レジスタなどの揮発性メモリデバイス内、および/またはフラッシュメモリまたはハードディスクなどの不揮発性メモリデバイス内)に格納され、ソフトウェアモジュールによって実行されるように本明細書に記載されているすべての動作は、適宜、コンピューティングデバイス1400内および/またはコンピューティングデバイス1400に接続されている他の要素(すなわち、ネットワークインタフェースデバイス1406、ディスプレイインタフェース1408、ユーザ入力アダプタ1410、および/またはディスプレイデバイス1412)と連携してプロセッサ1402によって実行され、(c)代替的または追加的に、コンポーネントがデータを処理および/または別の方法で処理することが本明細書に記載されている範囲で、いくつかの実施形態では、そのようなデータは、メモリデバイス1404(例えば、いくつかの実施形態では、RAMなどの揮発性メモリデバイス内および/またはフラッシュメモリまたはハードディスクなどの不揮発性メモリデバイス内)および/またはコンピューティングデバイス1400内および/またはコンピューティングデバイス1400に接続された他の要素(すなわち、ネットワークインタフェースデバイス1406、ディスプレイインタフェース1408、ユーザ入力アダプタ1410、および/またはディスプレイデバイス1412)と適宜連携してプロセッサ1402によって処理/処理され、(d)代替的または追加的に、いくつかの実施形態では、メモリデバイス1402は、プロセッサ1402によって実行されると、プロセッサ1402に、コンピューティングデバイス1400内および/またはコンピューティングデバイス1400に接続された他の要素(すなわち、メモリデバイス1404、ネットワークインタフェースデバイス1406、ディスプレイインタフェース1408、ユーザ入力アダプタ1410、および/またはディスプレイデバイス1412)と連携して、コンポーネントによって適宜実行されるように、および/またはコンポーネント内に含まれるように、本明細書に記載された任意のソフトウェアモジュールによって実行されるように、本明細書に記載された動作のそれぞれまたは任意の組み合わせを実行させる命令を記憶する。
【0115】
図14に示され、上記で説明されたハードウェア構成は例として提供され、本明細書で説明された主題は様々な異なるハードウェアアーキテクチャおよび要素と併せて利用され得る。例えば、本明細書の多くの図では個々の機能/アクションブロックが示され、様々な実施形態ではこれらのブロックの機能が(a)個々のハードウェア回路を使用して、(b)記載された機能/アクションを実行するように特に構成された特定用途向け集積回路(ASIC)を使用して、(c)記載された機能/アクションを実行するように特に構成された1つ以上のデジタル信号プロセッサ(DSP)を使用して、(d)
図14を参照して上述したハードウェア構成を使用して、(e)他のハードウェア構成、アーキテクチャ、および構成を介して、および/または(a)〜(e)に記載された技術の組合せを介して、実施され得る。
【0116】
<記載された主題の技術的利点>
特定の例示的な実施形態は、限定はしないが、電子取引所プラットフォームなどの特定のアプリケーションに対して、改善されたアプリケーション実行時間およびより良好なスループットを提供することができる。実施形態によれば、パイプライン処理のボトルネックを軽減することにより、アプリケーションタスクのより迅速な完了及びより高いスループットを達成するために、アプリケーションのパイプライン処理段階を非同期かつ同時実行することにより、単一又はマルチプロセッサプラットフォーム上のマルチプロセス及び/又はマルチスレッドアプリケーションを実行するためのシステム及び方法が提供される。このようにして、実施形態はトランザクションを処理する従来技術とは対照的に、スーパースカラ性能を達成することができる。
【0117】
特定の例示的な実施形態はまた、内部通信インフラストラクチャ上のデータおよびメッセージングトラフィックの量を低減し、それによって、アプリケーション実行およびタスク完了時間をさらに改善する。実際に、例示的な電子取引所アプリケーションのためのいくつかの従来のパブリッシュ−サブスクライブ・フレームワークの使用はネットワークおよびシーケンサレベルの両方で、またオーバーヘッドの観点から、共有媒体上で結果として生じるデータ帯域幅要件のために実現可能ではなかったことが実験で観察された。また、従来のパブリッシュ−サブスクライブ・フレームワークを使用した場合、結果として生じる伝搬遅延およびスループットは適切ではなく、複数処理およびホストが追加された場合にスケーリングされないことも観察された。比較すると、他の態様において、いくつかの実施形態ではメッセージのためのロックフリーキューの使用、および共有メモリ位置へのポインタの複数のプロセッサまたはプロセッサコアへの通過は内部メッセージングのための輻輳を劇的に低減する。
【0118】
現在のオーダ・ゲートウェイ・アプリケーションおよびマッチングエンジンの実施は入力の完全な処理が任意の所与の入力に対する単一のコールチェーンとして実行される従来の命令的アプローチが必要とされるパフォーマンスレベルを満たすための唯一の実施形態であるため、実施においてモノリシックであるが、特定の例示的な実施形態は実質的により高速である(例えば、買い注文/売り注文のためのより速い平均取引完了時間)ことも観察される。この改善は少なくとも部分的には例示的な実施形態とは異なり、異なるフローがそれらの間で共有される処理ステージを有し、したがって並列化することができないので、従来のモノリシック実装が、ゲートウェイまたはマッチングエンジン内の異なるデータフローの同時処理を禁止するという特性によるものであり得る。
【0119】
<記載された主題の追加申請>
処理ステップ、アルゴリズムなどは特定の順序で説明または特許請求されてもよいが、そのような処理は異なる順序で動作するように構成されてもよい。言い換えると、明示的に説明または特許請求され得るステップの任意のシーケンスまたは順序は、必ずしも、ステップがその順序で実行されるという要件を示すものではない。本明細書で説明されるプロセスのステップは、可能な任意の順序で実行され得る。さらに、いくつかのステップは(例えば、1つのステップが他のステップの後に記載されるため)非同時発生として記載または暗示されているにもかかわらず、同時に実行されてもよい。さらに、図面におけるその描写によるプロセスの図示は、図示されたプロセスがそれに対する他の変形および修正を排除することを示唆せず、図示されたプロセスまたはそのステップのいずれかが技術に必要であることを示唆せず、図示されたプロセスが好ましいことを示唆しない。
【0120】
コンピュータ可読媒体/伝送の様々な形態がデータ(例えば、命令のシーケンス)をプロセッサに搬送することに関与してもよい。例えば、データは(i)メモリからプロセッサに配信され、(ii)任意のタイプの伝送媒体(例えば、有線、無線、光など)を介して搬送され、(iii)イーサネット(登録商標)(またはIEEE 802.3)、ATP、Bluetooth(登録商標)、およびTCP/IP、TDMA、CDMA、3Gなどの多数のフォーマット、規格、またはプロトコルに従ってフォーマットされ、および/または伝送され、および/または(iv)プライバシーを保証するために、または当技術分野で周知の様々な方法のいずれかで不正を防止するために暗号化され得る。
【0121】
<選択された用語>
本書面では、「いくつかの実施形態」、「様々な実施形態」、「特定の実施形態」、「特定の例示的な実施形態」、「いくつかの例示的な実施形態」、「例示的な実施形態」に所定のアイテムが示されることが説明されるときはいつでも、または任意の他の類似の言葉が用いられるときはいつでも、所与のアイテムは少なくとも1つの実施形態に示され、全ての実施形態に示される必要はないことは理解されたい。上述と一致して、本書では、動作が実行され「てもよく」、「ることができ」、もしくは「うる」ことと、機能、エレメント、もしくは構成要素が所与のコンテキストに含まれ「てもよく」、「ることができ」、もしくは「うる」、または適用可能なことと、所与のアイテムが所与の特性を有し「てもよく」、「ることができ」、もしくは「うる」こととが説明されるときはいつでも、または「〜てもよい」、「〜できる」もしくは「〜しうる」という用語を含む任意の類似の語句が使用されるときはいつでも、所与の動作、特徴、エレメント、構成要素、特性、などは少なくとも1つの実施形態に示され、全ての実施形態に示される必要はないことが理解されたい。本書で使用される用語と語句、およびそれらの変形は、特に明記しない限り、限定ではなく自由に解釈されるべきである。先の例としては、「および/または」は、関連して挙げられたアイテムのうちの1つ以上の任意のまたは全ての組み合わせ(例えば、Aおよび/またはBは、A、B、またはAとBを意味する)を含み、単数形「a」、「an」および「the」は「少なくとも1の」、「1つ以上の」、または類似のものを意味するとして読まれるべきであり、「例」という用語は議論中の主題の例を提供するためにもちいられ、包括的または限定的なそれらのリストではなく、「備える」と「含む」(および他の活用とそれらの他の変形)は関連する挙げられたアイテムの存在を特定し、1つ以上の他のアイテムの存在または追加を不可能にするものではなく、アイテムが「随意に」と説明される場合、そのような説明は他のアイテムが随意ではないことを示すものと理解されるべきではない。
【0122】
本明細書で使用される「非一時的コンピュータ可読記録媒体」という用語は、レジスタ、キャッシュメモリ、ROM、半導体メモリデバイス(D−RAM、S−RAM、または他のRAMなど)、フラッシュメモリなどの磁気媒体、ハードディスク、光磁気媒体、CD−ROM、DVD、またはブルーレイディスクなどの光学媒体、または非一時的電子データ記憶のための他のタイプのデバイスを含む。「非一時的コンピュータ可読記録媒体」という用語には、一時的な伝搬する電磁信号は含まれない。
開示される技術は、複数の処理ステージに分解されたアプリケーションが、アプリケーションの個別の処理ステージを互いに非同期かつ同時に実行することによって実行される、公開−加入メッセージ・フレームワークに関する。個別の処理ステージ間の通信は、公開−加入実行モデルに排他的に従うことができる。開示された公開−加入フレームワークは、マルチプロセッサ/マルチコア処理環境におけるそれぞれの処理リソースへの処理ステージの分散を可能にしながら、マルチプロセスおよび/またはマルチスレッド方式で実行されるべき処理ステージを提供する。電子取引所アプリケーションの例と、それに対応する取引所ゲートウェイアプリケーションの例が開示される。