2012-03-14 2 views
0

私の取引システムは二つの部分私は "株式取引"システムで共有メモリを使用して "市場データ受信"部分を分離する必要がありますか?

  • 「UDP milticast市場データ受信」で構成されています - ちょうどUDPマルチキャスト何もないから、市場データを受信する(orderbooks、受注、最高入札/などを尋ねる)
  • 「メインシステム」 - これらのシステムはかなり接続されているなどなど

を、市場データを使用して新規受注を計算し、注文を送る - 典型的なシナリオはそのようなものです:

- "UDP" -> "Main" Apple BID/ASK 500.1/500.2 
- Main sends order № 1122 Apple BUY 555 
- "UDP" -> "Main" Order № 1122 Executed 
- Main send order № 1123 Apple SELL 505 
- "UDP" -> "Main" Order №1123 Registered, Ammount 1, Executed 0, Left 1 

"UDP"部分は "Main"が存在することを知らない。 "Main"は "UDP"を使用します

私は理論的に "Main"を実行せずに "UDP"自体を実行できるので、これらを別々のプロジェクトにしたいと考えています。または、私はいくつかの "メイン"インスタンスを実行することができます。

"UDP"は、他人が使用できる書き込み可能なストレージを生成する必要があります。

しかし、「メイン」と「UDP」はかなり接続されている - 彼らはQuotesなど

を表現するために同じクラスと同じ構造を使用して、私はまたもパフォーマンスのペナルティを持つことができない、もパフォーマンスは非常に重要である私が何かを必要とアプリケーション内にデータを格納するだけの速さです。

「共有メモリ」などの技術を使用するか、すべてを1つのプロジェクトで作成するのがよいでしょうか?

私の問題はかなり一般的ですが、異なる市場データアダプタの多くはすでに異なる企業によって書かれているので、いくつかの「デフォルト」の解決策があるはずです。

答えて

0

実際ににパフォーマンスが必要な場合は、明確に分離されたレイヤーを使用する単一プロジェクトで解決策が使用されます。どんな "分離された"ソリューションを選択しても、が常にのオーバーヘッドになります。

他の部分では、「メイン」が「Udp」と同じマシンに存在しないような方法でアプリケーションをスケールアップするのに役立ちます。それを達成するために.NetRemotingを見てください。

これが役に立ちます。

+0

「オーバーヘッド」はどれくらいありますか?私は0.05msを支払うことができる – javapowered

+0

私は誰もこれに答えを与えることができると信じています。パフォーマンスの問題は、現在のプログラムのコンテキストと強く結びついています。だから、これはあなた自身で把握しなければならないものです。 – Tigran

+0

私は共有ファイルの "オーバーヘッド"を知っているべきだと思います – javapowered

関連する問題