2

高性能取引エンジンの場合、一度に 1 つの注文を照合/処理します。次の注文に移る前に、注文とその他の重要な情報を DB に保存する必要がありますか?

または、別のスレッドを使用して DB に非同期的に保存できますか?

非同期の場合、zeromq を使用して重要な情報を含むメッセージを DB サーバーに送信できますが、これがクラッシュすると、注文情報が失われます。

代わりに、メッセージをディスクに保持する rabbitmq を使用すると、十分に安全ですか?

4

2 に答える 2

1

この質問には多くの側面がありますが、考慮すべき点がいくつかあります...

クラッシュの可能性と、クラッシュが発生した場合に「重要な」データが失われる結果はどのくらいですか? これは実際にはビジネス上の問題です (テクノロジーとは対照的に)。多くの場合、費用対効果は、データが失われても、それが発生するたびにそれに対処する代価を支払うだけで問題ないという考えを裏付けています。初期の頃、ブローカーは「注文が X で実行されるか、トランザクションのコストが戻る」ことを保証するのが一般的でしたが、それを測定することすらありませんでした。あなたが不平を言うなら、彼らは単に払い戻しをしました。

どのデータを絶対に永続化する必要があるかがわかったら、高性能システムはそれを行うための最速の方法を見つける必要があります。ここにも多くのニュアンスがありますか?どの程度の「安全」が必要ですか?

  • インプロセスメモリ? (プロセスがクラッシュするとデータが消えます)
  • プロセス外メモリ (「持続」プロセスもクラッシュするとデータが消える)?
  • OS のディスク バッファーですが、まだディスクではありません (OS がクラッシュするとデータも消えます)?
  • 物理ディスク (ディスク自体またはサーバー全体が「消失」すると、データは消失します)?

この点に関して、各 HFT 企業が何を行っているかは誰にもわかりません (彼らはあまりにも秘密主義です)。銀行やブローカーなどでは、次のメッセージが処理される (多くの場合、データが物理的にディスクに書き込まれるか、OS バッファーに書き込まれるかは関係ありません)。これにより、アプリケーションがクラッシュした場合に備えて安心できます。それ以降の処理は非同期で行われます (データを簡単に照会できるようにするためのデータベースへの書き込みや、リスク制限のチェックなど)。

于 2014-09-26T05:11:38.127 に答える