取引が集中する局面で取引画面の板が固まったり飛んだりするなら、原因はたいていマーケットデータフィードにある。入ってくる途中で更新を失うか、板の組み立てを間違えるか、数百の画面への送信が遅すぎるかだ。まず最も混雑した1時間を計測し、そのうえで、すべての会社をその日の記録でテストする。
取引が集中する局面で、取引画面の板が固まる、飛ぶ、あるいはありえない価格を表示するなら、原因はたいてい三つの場所のどれかにある。取引所のフィードが入ってくるところで更新が失われているか、板の組み立てが間違っているか、数百の画面に板が届くのが遅すぎるかだ。誰かに依頼する前に最も混雑した1時間を計測し、そのうえで、検討するすべての会社をその日の記録でテストする。
短い答え:取引所は、送るすべての更新に番号を振っている。よくできたシステムは、欠けた番号をすぐに見つけ、その板が最新でないことを示したうえで再構築する。問題が始まるのは、ギャップが見逃されるとき、再構築に数秒かかるとき、あるいは一つの遅い接続がすべてのトレーダーを足止めするときだ。最も混雑した日のフィードを記録し、その再生を、すべての会社が通らなければならないテストにする。製品を買う前に課し、チームに作ってもらう場合は第1フェーズの合格基準にする。
あわせて読みたい
症状が出るのは、中央銀行の発表や寄り付きのような、最も取引が集中する瞬間だ。画面の板が1〜2秒止まり、それから飛ぶ。取り消された注文が表示されたまま残る。買い手が付けている最も高い価格が、売り手が付けている最も低い価格を上回ることもある。これを交差した板と呼ぶ。単一の取引所では、寄り付きと引けのオークションの時間帯を除けば、そうした注文はすぐに約定するはずだ。だから、単一の取引所の板が画面上で交差しているなら、自社が持っているその板のコピーが間違っているということになる。
やがてサポートには、同じ銘柄で違う板を見ている二人のトレーダーからスクリーンショットが届く。あるいは、画面には別の価格が表示されていたとして、トレーダーが注文の約定価格に異議を唱える。
取引所の板のフィードは、小さな変更の流れだ:注文の追加、注文の取消、約定。自社のシステムは、スナップショットと呼ばれる板の完全なコピーから始め、変更を順番に適用していく。変更にはそれぞれ番号が振られているので、欠けたものがあれば見つけられる。Nasdaq は TotalView-ITCH 5.0 フィードの仕様書で、このフィードは「順序付けられた一連のメッセージで構成される」、つまり順番に番号が振られていると述べている。
取引が集中する局面では、変更の流れが急増する。その一部は途中や自社のサーバーの内部で失われ、一部は順番どおりに届かない。システムがギャップを見逃せば、届いたものを何でも適用し、もう取引所と一致しない板を表示する。ギャップに気づいても復旧に数秒かかれば、画面は止まったままになる。
取引所は、クライアントが更新を失うことを前提にしている。CME Group は MDP 3.0 フィードのドキュメントで、ギャップのあとは「クライアントのシステムで保持しているすべての板が、もはや正しい最新の状態ではない可能性があると想定すべきである」と述べている。
場所は三つあり、それぞれに別の直し方が必要だ。三つ目をエンジニアはファンアウトと呼ぶ。一つの更新の流れが、扇状に多くの画面へ広がるからだ。上でリンクした技術記事が、三つすべてを詳しく扱っている。
一つ目の場所は取り込み口、つまり取引所のフィードが届くところだ。失われたデータを取り戻す手段を用意している取引所もある。Nasdaq の配信プロトコルの一つである MoldUDP64 では、受信側が「取りこぼしたパケットを検出し、再要求する」ことができる。CME は A と B と呼ばれる二つの回線で同じストリームを二重に送り、板を最新の状態に戻すためのスナップショットのフィードを別に用意している。だが、システムがギャップに気づかなければ、どれも役に立たない。
次に板が組み立てられる。ここでの危険は、変更が二重に適用されること、順番を外れて適用されること、あるいは間違ったスナップショットの上に適用されることだ。暗号資産取引所の Binance は、スナップショットをライブのストリームにつなぐための正確な手順をガイドに示している。その手順を踏まずに組み立てた板も、価格を表示し、問題なく見える。だが、その価格は間違っている。
最後がファンアウトで、ここで板は、接続している画面ごとに一つずつ、数百のトレーダーのセッションへ送り出される。弱いモバイル回線につながったトレーダーや、止まってしまったターミナルは、更新をゆっくりとしか読まない。サーバーがそのセッションを待てば、ほかのすべてのセッションも待たされる。そのセッション向けにたまっていく更新を際限なく積み上げさせるのも、解決にはならない。サーバーのメモリが尽き、全員にとっての障害になるからだ。
よくできたシステムでは、サーバーが更新を一度だけ順番に並べ、同じ結果をすべてのセッションに送る。遅れたセッションは、途中の段階を飛ばして板の最新の姿を受け取るか、サーバーが理由を添えて接続を切り、画面が新しいコピーを取って再接続するかのどちらかになる。フィードは、複数の場所で同時に壊れることもある。
過去1か月で最も混雑した1時間を選び、その1時間について次の数字を集める:
次に、混雑した1日の生のフィードを、届いたとおりに、各パケットの到着時刻とともに記録する。その記録を実際の速度とそれより速い速度で再生することが、候補リストのすべての会社に課すテストになり、修正のたびに繰り返すテストにもなる。
取引所のフィードを取り込み、板を維持するソフトウェアをフィードハンドラと呼ぶ。道は三つあり、どれを選ぶべきかは計測が示すはずだ。後ろの二つは組み合わせることもできる。
見逃されるギャップや遅い再構築のように、計測が一つのはっきりした欠陥を指していて、コードを知っている人がまだ社内にいるなら、今あるフィードハンドラを直す。
既製のフィードハンドラとは、取引所に接続し、ギャップを捉え、正しい最新の板を自社のシステムに渡すライセンス型のソフトウェアだ。マネージドフィードはさらに先まで担う:マーケットデータのベンダーが各取引所に接続し、自社はそのベンダーから一つの形式の一つのストリームを受け取る。
取り込み口は機能しているのに問題が続くなら、トレーダーにデータを送る層を作り直す。トレーダーごとに違う板が見え続けている、遅いセッション一つがほかを道連れにしている、あるいは今よりずっと多くのセッションに配信する計画がある、といった場合だ。
候補リストのすべての会社に、同じ五つのテストを課す:
amBrain はアルゴリズム取引の基盤を構築する:注文執行、マーケットデータ、プレトレードのリスク管理。
amBrain のウェブサイトには、こう書かれた一行がある:「トレーディングターミナルの開発、注文管理システム、FIX プロトコルによる取引所連携。」
amBrain は、トレーディングとアドテクの遅いシステムを診断する。稼働中のプラットフォームをエンドツーエンドで計測し、時間がどこで費やされているかをレポートで特定する。
amBrain は2019年からソフトウェアを作っている。チームについては一行でこう説明している:「最大40人のチームで、その約75%がシニア。」働き方には三つの形態がある:フルデリバリー、専任チーム、あるいはあなたのチームに入るエンジニア。顧客は、amBrain の再利用可能なコンポーネントを除き、プロダクトとコードの完全な所有権を保持する。
この記事は事例紹介ではなく、顧客のための仕事についても述べていない。amBrain が構築したどのシステムについてもレイテンシの数字を挙げず、価格や期間も示さない。
amBrain が候補リストに入っているなら、ほかのすべての会社と同じ五つの質問を amBrain にも投げかけ、合意するどの仕事についても、自社で記録したフィードを合格基準にする。
現在のアーキテクチャと気になっている障害シナリオをお持ちください。30 分で一緒に確認します。