← 記事一覧に戻る
March 3, 2026
読了時間: 5分

アルゴリズム取引システムにおけるデータ通信:技術概要

アルゴリズム取引システムにおけるデータ通信:技術概要
#algotrading
#architecture
#WebSocket
#FIX
#gRPC
#Kafka
#Aeron
#Redis
#QuestDB
#HFT

アルゴリズム取引において、利益と損失の差はマイクロ秒単位で測定されることがあります。データ伝送アーキテクチャは、取引システムの効率を決定する重要な要因の一つです。本記事では、取引所とのインタラクションから内部のサービス間通信、ストレージ、データ配信に至るまで、あらゆるレベルの通信技術を解説します。

アルゴ取引システムアーキテクチャ

本記事は「外部」(取引所プロトコル)から「内部」(IPC、メッセージブローカー、ストレージ)へとレベル順に構成されており、アルゴリズム取引プラットフォームの実際のアーキテクチャを反映しています。


プロトコルスタック比較:REST、WebSocket、FIX

1. 取引所との通信:REST、WebSocket、FIX

1.1 REST API

RESTは、取引所APIとやり取りする最も簡単で一般的な方法です。各リクエストは独立したHTTP接続です:TCPハンドシェイク → TLSハンドシェイク → リクエスト送信 → レスポンス受信 → 接続クローズ。

取引におけるRESTの問題点:

各リクエストには接続セットアップのオーバーヘッドが伴います。HTTP keep-aliveを使用しても、「リクエスト-レスポンス」モデルではリクエストを送信するよりも速くデータを受信することはできません。これはポーリングにつながります——「新しいデータはありますか?」という無限のクエリサイクルで、取引所サーバーの負荷の最大80%を生み出します(暗号取引所開発者による)。取引所はレートリミット(通常1分間に10〜1200リクエスト)を導入しており、RESTは高頻度戦略には不向きです。

RESTが適切な場合: 過去データの取得(ローソク足、OHLCV)、アカウント管理(残高、ポジション)、非リアルタイム操作(DCAボット、1時間ごとのリバランス)。

1.2 WebSocket

WebSocketは、データが双方向に流れる1つの永続的なTCP接続を確立します。通常のHTTPリクエストとしてUpgradeヘッダーで開始し、その後双方向フレーミングプロトコル(ペイロードはテキストJSONまたはバイナリ)に切り替わります。

取引における利点:

主な利点は、リクエストごとのオーバーヘッドがないことです。一度確立されると、データはサーバーから即座にプッシュされます。WebSocket経由のマーケットデータ配信レイテンシは、取引所ゲートウェイからクライアントまで通常50ミリ秒未満です。1つの接続で50以上のシンボルを同時にサブスクライブできます。

重要なポイント:WebSocket経由の注文。 多くのトレーダーは、一部の取引所(BinanceHitBTCDeribitBybitなど)がWebSocket経由で注文を送信できること——データの受信だけでなく——を知りません。これは以下の理由でRESTよりも根本的に高速です:

  • 各注文でTCP/TLSハンドシェイクが不要(接続はすでに「ウォーム」)
  • HTTPオーバーヘッドなし(ヘッダー、Cookie等)
  • 非同期モデル:注文を送信し、同じWebSocketを通じてスレッドをブロックせずに確認を受信。

Deribitによると、WebSocketとFIXはしばしば同じ実行速度を持ちます。RESTは接続レベルの前処理のため若干遅くなります。WebSocket注文はFIX注文と同様にマッチングエンジンキューに入ります。

コンテキスト混在問題。 REST経由で注文を送信し、WebSocket経由で約定通知を受信すると、レースコンディションが発生します:WebSocket通知がRESTリクエストの完了前に到着する可能性があります。これは状態の不整合につながります。解決策は、同じWebSocketで注文を送信し、完全に非同期モデルに移行することです。

1.3 FIXプロトコル(Financial Information eXchange)

FIXは1992年から存在する電子取引の産業標準です(Fidelity InvestmentsSalomon Brothersによって作成)。取引のために特別に設計されたバイナリオーバーTCPプロトコルです。

FIXアーキテクチャ:

  • セッション層 — 接続管理、ハートビート、シーケンス番号、ギャップリカバリ。配信とメッセージ順序を保証。
  • アプリケーション層 — ビジネスロジック:注文タイプ、約定レポート、マーケットデータリクエスト。

FIXメッセージはSOH文字で区切られた「タグ=値」ペアで構成されます。例えば、AAPLの100株を$150で買う注文は次のようになります:

8=FIX.4.2|35=D|49=BUYER|56=SELLER|11=ORD1001|38=100|40=2|54=1|55=AAPL|44=150.00

FIXがWebSocketより高速な理由: FIXはHTTP層のないネイティブTCPプロトコルです。AWSは暗号取引所のtick-to-trade最適化ガイドで、プロトコル起因のレイテンシを最小化するためにFIXをRESTやWebSocketより明示的に推奨しています。FIXはマイクロ秒レベルで動作しますが、WebSocketは通常ミリ秒です。

FIXが支配的な場面: 取引所マッチングエンジンへのDMA(Direct Market Access)、機関投資家向けのアルゴリズム・HFT取引、流動性集約(プライムブローカーがFIX経由で数十の銀行に接続)。

FIXの制限: 統合の複雑さ、時代遅れのメッセージフォーマット(テキストのタグ-値はバイナリフォーマットより効率が低い)、参入障壁の高さ。暗号業界ではFIXをサポートする取引所は限られています。

1.4 SBE(Simple Binary Encoding)— FIXの進化形

SBEは、FIX Trading Community内のHigh Performance Working Groupによって作成されたバイナリシリアライゼーションフォーマットです。そのミッションは、超低レイテンシ取引のためにテキストFIXフォーマットをコンパクトなバイナリ表現に置き換えることです。

SBEの主要原則:

  • Zero-copy flyweightパターン — エンコーダとデコーダがバッファ上の「テンプレート」として機能。値は中間コピーなしで直接書き込まれます(複数回コピーが必要なProtobufとは異なる)。
  • ワイヤフォーマット = メモリフォーマット — ワイヤ上のデータはメモリ上と同じ形式で、変換オーバーヘッドを最小化。
  • 固定フィールドが先、可変フィールドが後 — Protocol Buffersと比較して桁違いのパフォーマンスを実現する設計制約。

SBE + Aeronは高性能取引システムの標準的な組み合わせです。AeronはReal Logicによるオープンソースメッセージングシステムです(元LMAX Exchange CTOのMartin Thompsonと元29West/Ultra Messaging CTOのTodd Montgomeryが作成)。実質的にUDPと共有メモリ上で動作する金融システム向け特殊トランスポート層であり、1桁マイクロ秒のレイテンシを実現します。SBEがシリアライゼーションを担当し、Aeronがマイクロ秒の遅延で配信を管理します。Aeronの詳細はセクション3.1で説明します。

1.5 取引所プロトコル比較表

REST vs WebSocket vs FIX vs Aeron比較

パラメータ REST WebSocket FIX FIX+SBE
レイテンシ 10–100+ ms 1–50 ms 10–500 μs 1–100 μs
モデル リクエスト-レスポンス 双方向プッシュ 双方向セッション 双方向セッション
注文 可能(同期) 可能(非同期、部分的) 可能(ネイティブ) 可能(ネイティブ)
接続ウォームアップ 毎リクエスト 1回のみ 1回のみ 1回のみ
フォーマット JSON/テキスト JSON/バイナリ タグ-値テキスト バイナリ
統合難易度 非常に高

取引システムのマイクロサービスアーキテクチャ

2. 内部マイクロサービス通信

データが取引所からシステムに入ると、内部処理が始まります:パース → 戦略 → 判断 → 注文送信。各ステップでサービス間通信が行われます。

2.1 gRPC双方向ストリーミング(TCP)

gRPCは、シリアライゼーションにProtocol Buffersを使用するHTTP/2ベースのGoogleフレームワークです。アルゴリズム取引では、双方向ストリーミングが特に重要です——クライアントとサーバーが1つの接続で同時にメッセージストリームを送信する方式です。

gRPCが取引システムに適する理由:

  • ProtobufはJSON比で3〜10倍コンパクト
  • HTTP/2マルチプレキシング — 1つのTCP接続で複数のストリーム
  • .protoスキーマによる厳密な型付けでコンパイル時にエラーを検出
  • Python、Rust、Go、C++、Java等のコード生成
  • 双方向ストリーミングにより、1つのチャネルで「マーケットデータ下り、注文上り」パターンを実現。

SmartDevによると、AI駆動HFTを展開する金融機関の70%がマイクロ秒応答時間のためにgRPCまたは生TCPを使用しています。

アーキテクチャ例: Market Data Collector(Rust)→ gRPCストリーム → Strategy Engine(Python/Rust)→ gRPCコール → Order Router(Rust)→ WebSocket/FIX → 取引所。

2.2 Unix Domain Socket(UDS)経由のgRPC

サービスが同一マシン上で動作する場合(コロケーションの典型例)、TCPは不要なオーバーヘッドです。Unix Domain Socket(UDS)はネットワークスタック全体をバイパスします:TCPハンドシェイク、ルーティング、チェックサムなし。

ベンチマークは大きな差を示しています:

  • UDS経由gRPC:約102 μs/リクエスト(100Kリクエスト)
  • TCP経由gRPC:約127 μs/リクエスト(100Kリクエスト)
  • UDS効果:小メッセージで約20%、大メッセージ(100KB+)で最大50%の改善。

F. Werner(MPI Heidelberg)によると、gRPC UDSと生ブロッキングI/O UDSを比較すると、gRPCは約10倍のオーバーヘッドを追加します——中央値約130 μs vs 生UDSの約13 μs。これは抽象化のコスト(HTTP/2フレーミング、protobufシリアライゼーション)です。

gRPC+UDSを使うべき場面: 開発者の利便性(スキーマ、コード生成)が絶対的な最小レイテンシよりも重視される場合の、単一サーバー上のプロセス間通信。UDSはUnixファイルパーミッションによるセキュリティ上の利点もあります。

使うべきでない場面: 10 μs未満のレイテンシが必要な場合は、共有メモリまたはgRPCなしの生UDSの方が適しています。参考:生UDS中央値約13 μs、gRPC UDS中央値約130 μs。共有メモリ(Aeron IPC)は1 μs未満、LMAX Disruptorリングバッファは約50〜100 ns。したがって、gRPC+UDSは生UDSより約10倍遅く、共有メモリより100〜1000倍遅くなります。ただし、レイテンシが低くなるほどコードの複雑さは増します。

自分で再現してみましょう: このセクションのすべてのIPCレイテンシ数値は、オープンソースのコンパニオンベンチマーク**suenot/trading-ipc-bench**で再現可能です——TCP、UDS、ZeroMQ IPC/TCP、WebSocket、Redis Pub/Sub、共有メモリ、名前付きパイプのラウンドトリップのPython実装で、自分のハードウェア上でp50/p95/p99/p99.9レイテンシとスループットを測定します。

gRPCなしの生UDS — gRPCのオーバーヘッドが過大な場合、gRPCを除去してソケットだけを維持します。パフォーマンス降順のオプション:

  • AF_UNIXソケット + カスタムシリアライゼーションSBEFlatBuffersMessagePack)— 中央値約13 μs、最大制御、最大複雑さ
  • ZeroMQ IPC(ipc:// — 約50〜100 μs、ボイラープレートなしの既成パターン(PUB/SUB、REQ/REP)、内部でUDSを使用
  • nanomsg/NNG IPC — ZeroMQと同様、小メッセージ(<64 KB)で若干優れたレイテンシ
  • Cap'n Proto RPC over UDS — ゼロコピーシリアライゼーション + RPC抽象化、gRPCより高速、スキーマあり

2.3 共有メモリIPC

同一ホスト上の超低レイテンシには共有メモリを使用します。2つのプロセスが同じRAMセグメントをマッピングし、データはシステムコールなしで(初期セットアップを除いて)受け渡されます。

LMAX Disruptorパターン(共有メモリ上のリングバッファ)は、単一スレッドで毎秒約600万イベントを処理します。このアプローチはLMAX Exchangeと多くのHFTシステムの中核です。

実装: Aeron IPC(Java/C++)、Chronicle Queue(Java)、カスタムmmapベースソリューション(Rust/C++)。IronSBE(Rust SBE実装)はSPSCチャネルレベルで約20 nsのレイテンシで共有メモリIPCをサポートします。


3. トランスポートシステム:メッセージブローカーとライブラリ

3.1 Aeron — ゴールドスタンダード

Aeronは、Real Logicが開発した高性能メッセージトランスポートシステムです。作成者はMartin Thompson(元LMAX CTO)とTodd Montgomery(元29West CTO)です。2014年に米国の大手取引所向けに始まり、現在70以上のコントリビューターと5000以上のGitHubサブスクライバーがいます。

実際には: Aeronはブローカー(Kafkaのような)でもソケットライブラリ(ZeroMQのような)でもありません。予測可能な低レイテンシのために設計されたトランスポート層です。UDP(ネットワーク)と共有メモリ(IPC)上で動作し、生のUDPにはない信頼性のある配信、順序付け、フロー制御を提供します。Aeronは「UDPレイテンシのTCP」と考えてください。

Aeronの特性:

  • レイテンシ:クラウドで100 μs未満、ベアメタルで18 μs未満。
  • スループット:マイクロ秒レイテンシで100万メッセージ/秒以上。
  • ピーク2000万メッセージ/秒以上。
  • ブローカーレス — 単一障害点なし。
  • ユニキャスト、マルチキャスト、IPCをサポート。
  • 内蔵のフロー制御とロス検出。

Aeron Cluster — 最小限の追加レイテンシで一貫した取引ロジックのためのフォールトトレラントなステートマシンレプリケーション(Raftコンセンサス)。

Aeron Archive — フルストリーム速度でのメッセージ永続化とリプレイ機能。

Aeron Sequencer — エコシステムの最新コンポーネントで、大規模組織全体で複数のプロジェクトを調整するために設計。Aeron TransportとAeron Clusterの上に構築。主な特性:

  • 分散ログ — フォールトトレランスのために複数のマシンにレプリケートされるメッセージの長いシーケンス
  • 複数リーダー — 複数のアプリケーションが異なる目的で同じログから同時に読み取り
  • 分離されたチーム — チームは単一の調整されたシステム内で独立性を維持
  • 対象ユースケース:マーケットデータ処理、ブローカープラットフォーム、取引所エンジン

Kafkaとの比較: どちらも分散ログを使用しますが、Aeronはマイクロ秒レイテンシ向け、Kafkaはミリ秒の耐久性とスループット向けです。Aeronはリアルタイムロジック用、Kafkaはデータパイプラインと分析用です。

3.2 Apache Kafka

Apache Kafkaは大規模イベントストリーミングの事実上の標準です。取引のホットパス向けではありません(ミリ秒の遅延)が、以下には不可欠です:

  • マーケットデータ集約: 100以上の取引所からのストリームを1つのパイプラインに収集。
  • イベントソーシング: すべてのシステムアクションをイベントトピックとして記録。
  • CDC(Change Data Capture): 取引DBの変更を分析に流す。
  • QuestDB統合: Kafka → QuestDBでリアルタイムティック分析。

エンドツーエンドのレイテンシは2〜15 ms。HFTには許容できませんが、1秒以上のホライズンを持つ戦略には十分です。

3.3 Redis Pub/Subとストリーム

Redisはインメモリストアであり、軽量ブローカーとしても機能します。

Redis Pub/Sub — ファイアアンドフォーゲット;サブミリ秒のレイテンシ。リアルタイム通知に最適:価格更新、戦略シグナル、アラート。

Redis Streams — 永続化とコンシューマーグループ(ミニKafka)を追加。履歴の読み取りとACKをサポート。

Redisは小メッセージに対してKafkaより高速(サブミリ秒)ですが、Kafkaのヘビーデューティなレプリケーションと耐久性には欠けます。

3.4 NATS

NATSはGoによる超軽量システムです。サブミリ秒のレイテンシ、内蔵のpub/sub、リクエスト/リプライ。NATS JetStreamは永続化とexactly-once配信を追加します。

3.5 ZeroMQとnanomsg

ピアツーピア通信のためのソケット抽象化を提供するブローカーレスライブラリ。ZeroMQは500万メッセージ/秒以上を処理し、2007年から実戦で検証済みです。nanomsg(およびNNG)はその「後継」で、小メッセージ(<64KB)でより優れたレイテンシを実現します。


4. クライアント向けリアルタイムPUB/SUB:Centrifugo

CentrifugoはGoで書かれたセルフホスト型PUB/SUBサーバーで、WebSocket、SSE、またはgRPC経由で数千〜数百万のクライアントへのブロードキャストに最適化されています。

Centrifugoがアルゴ取引に適する理由:

  • 1台のサーバーで100万WebSocket接続と毎分3000万メッセージを処理。
  • 60Hzストリーミングをサポート。
  • トラフィック最小化のためのデルタ圧縮(Fossilアルゴリズム)。
  • Webダッシュボードやモバイルアプリへの「ラストマイル」に最適。

5. リアルタイムアクセスデータストア

5.1 QuestDB — 取引のための時系列データベース

QuestDBはJava(ゼロGC)、C++、Rustで書かれたオープンソースの時系列データベースです。

  • クエリ: SIMD経由のサブミリ秒ベクトル化実行。
  • SAMPLE BY/ASOF JOIN: トレーダーフレンドリーなネイティブSQL拡張。
  • WAL: 超低レイテンシの追記。
  • B3(ブラジル証券取引所)が使用。

5.2 データ層としてのRedis

通常は中間層:

  • 価格へのO(1)アクセスのためのホットキャッシュ
  • オーダーブック用のソート済みセット
  • アトミック操作のためのLuaスクリプト

5.3 特殊ソリューション:RayforceDB、AXL DB

ゼロ依存とSIMDアクセラレーションを備えたミニマリストCベースのベクターデータベース(バイナリ<1MB)。HFTのための決定論的レイテンシに焦点。


6. シリアライゼーション:Protobuf vs SBE vs JSON

フォーマット エンコード/デコード サイズ ゼロコピー 使用場面
JSON 遅い 大きい 不可 REST API、デバッグ、ログ
Protobuf 高速 コンパクト 不可 gRPC、サービス間通信
SBE 超高速 最小 可能 HFT、マッチングエンジン
FlatBuffers 非常に高速 コンパクト 可能 ゲーム開発、中レイテンシ

7. リファレンスアーキテクチャ

7.1 暗号アービトラージ(中頻度)

取引所 → Collector(Rust)→ Redis(ホット)→ Strategy(Python)→ gRPC → Router(Rust)→ 取引所

7.2 HFTマーケットメイキング(コロケーション)

取引所フィード → Kernel Bypass NIC → Aeron IPC → Strategy(C++)→ SBE → Aeron → 取引所


8. 実践的アドバイス

  • <10 μs(HFT): FPGA、共有メモリ、SBE、Aeron IPC。
  • 10–100 μs: Aeron(UDP)、gRPC+UDS、ZeroMQ。
  • 100 μs – 1 ms: gRPC(TCP)、WebSocket、Protobuf。
  • 1–10 ms(中頻度): WebSocket、Kafka、Redis。
  • >10 ms(低頻度/スイング): REST APIで十分。DCA、リバランス、ポートフォリオ管理。

ボトルネックでないものを最適化しないでください。 戦略の判断に50 msかかるなら、Aeronの100 μsの節約は重要ではありません。ハイブリッドアーキテクチャは正常です:セットアップにREST、コアにgRPC、配信にWSを使用。


ベンチマークリポジトリ

この記事で引用されたレイテンシ数値は、**suenot/trading-ipc-bench**で再現できます——ここで議論されたすべての主要IPCトランスポートをカバーするオープンソースのPythonベンチマークスイートです:TCP、UDS、名前付きパイプ、ZeroMQ IPC/TCP、WebSocket、Redis Pub/Sub、共有メモリ。

git clone https://github.com/suenot/trading-ipc-bench
cd trading-ipc-bench
pip install -r requirements.txt
python run_all.py   # runs all 8 transports, saves results to results/
python report.py    # prints a summary table + ASCII latency chart

自分のハードウェアで実行してください——結果はCPU、OS、カーネルバージョン、チューニングによってこの記事の数値と異なります。それが重要なのです。


結論

「完璧な」通信技術は存在しません。各レベルには固有の要件があります:外部(互換性)、内部(レイテンシ)、パイプライン(信頼性)、クライアント(柔軟性)。アーキテクチャとは、特定の仕事に適切なツールを選ぶことです。

blog.disclaimer

MarketMaker.cc Team

クオンツ・リサーチ&戦略

Telegramで議論する
Newsletter

市場の先を行く

ニュースレターを購読して、独占的なAI取引の洞察、市場分析、プラットフォームの更新情報を受け取りましょう。

プライバシーを尊重します。いつでも配信停止可能です。