FIX 協定引擎 · v1.8 · 2026 年 5 月

NexusFIX。
一個從不配置記憶體的引擎。

專為不容許心跳遺失的交易場所打造的 C++23 FIX 協定引擎。熱路徑零配置、亞微秒級解析、確定性會話狀態。
可預測。 一路貫穿。

nexusfix / session / XCME.PROD.42
C++23 · 0 ALLOC · 247K msg/s

訊息流 · XCME.PROD.42 · NewOrderSingle ⇄ ExecutionReport

tail -f · live stream
12:04:18.11435=D|49=NEXFIX|56=XCME|34=184221|11=ord-9f2e|55=ESM6|54=1|38=2|40=2|44=5418.25parsed 318 ns
12:04:18.11435=8|49=XCME|56=NEXFIX|34=184222|11=ord-9f2e|17=exec-1|150=0|39=0|55=ESM6|54=1acked 1.2 µs
12:04:18.47135=8|49=XCME|56=NEXFIX|34=184223|11=ord-9f2e|17=exec-2|150=F|39=2|32=2|31=5418.25parsed 296 ns
12:04:19.00035=0 heartbeat|34=184224|49=NEXFIX|56=XCME · 30s intervalsent 84 ns
12:04:19.21435=D|49=NEXFIX|56=XCME|34=184225|11=ord-9f2f|55=NQM6|54=2|38=1|40=2|44=19842.75parsed 304 ns
12:04:19.21535=8|49=XCME|56=NEXFIX|34=184226|11=ord-9f2f|17=exec-3|150=0|39=0acked 1.1 µs
12:04:19.60135=8|49=XCME|56=NEXFIX|34=184227|11=ord-9f2f|17=exec-4|150=F|39=2|32=1|31=19842.50parsed 311 ns
12:04:19.88035=F CancelRequest|34=184228|41=ord-9f2e|11=cxl-7a01|55=ESM6parsed 292 ns
12:04:19.88135=8|49=XCME|56=NEXFIX|34=184229|11=cxl-7a01|17=exec-5|150=4|39=4 · cancelledacked 1.0 µs
247K/s
訊息吞吐量
0
熱路徑堆配置
412ns
p99 解析延遲
3.4×
相對 QuickFIX 基準

效能 預算。

生產手冊裡你會查找的每一個數字。負載下測量,使用通用硬體,基於確定性重播。

解析延遲
<500ns
p99,NewOrderSingle。固定緩衝區,零拷貝欄位迭代。
吞吐量
240K+ /s
單工作階段,單核心。多工作階段線性擴充。
熱路徑配置
0
靜態 arena、預配置環形緩衝區、原位解碼。
對比 QuickFIX
3×
相同工作負載下端對端更快。可重現的基準測試套件。

營運者為何
選擇 NexusFIX。

三個架構選擇層層疊加。每一個都讓下一個成為可能。

1 第 1 層 · 確定性

緊湊的尾部。 p99 無意外。

無鎖 SPSC 佇列、無分支標籤解碼器、熱路徑內聯。最慢的訊息看起來和最快的一樣。這才是交易場所真正考核你的指標。

120nsp50 · 240nsp90 · 360nsp99 · 412nsp99.9 · 580ns
2 第 2 層 · 記憶體

零配置 在熱路徑上。

靜態 arena、侵入式空閒清單、固定大小訊息槽。當訂單流動時配置器從不執行。所以核心也從不會為回收頁面而搶佔你。

QuickFIX /order-flow
堆配置 / 訊息~14
NexusFIX /order-flow
堆配置 / 訊息0 · arena 重用
3 第 3 層 · 協定

FIX 4.2 / 4.4 / 5.0 / FIXT。 一個引擎。

為每個版本產生字典,工作階段層級執行時可選。為交易場所特定欄位提供自訂方言覆蓋層。交易場所執行的線路格式就是你傳送的格式。

FIX 4.2完整
FIX 4.4完整
FIX 5.0 SP2完整
FIXT 1.1完整
自訂覆蓋層
線上久經實戰考驗

為你真正交易的場所 量身配置。

為主要的股票、期貨、外匯和加密貨幣場所預先建置工作階段設定檔。從真實生產追蹤中擷取的心跳、序列重置語意和重傳請求特殊處理。

CMEICENYSENasdaqLSEEurexHKEXSGXEBSRefinitivCoinbase PrimeBinance Inst.

熱路徑,
兩種走法。

同一筆 NewOrderSingle 的解析與路由,並排展示。相同的訊息、相同的機器,截然不同的代價。

QuickFIX (C++) application.cpp
void Application::onMessage(const FIX44::NewOrderSingle& msg, const SessionID& sid)
{
  FIX::ClOrdID    clOrdId;   msg.get(clOrdId);       // allocates
  FIX::Symbol     symbol;    msg.get(symbol);        // allocates
  FIX::Side       side;      msg.get(side);
  FIX::OrderQty   qty;       msg.get(qty);           // allocates Decimal
  FIX::Price      price;     msg.get(price);         // allocates Decimal

  std::string key = symbol.getString();          // allocates std::string
  router_->route(key, clOrdId.getString(), qty, price);
}                                                // ~14 heap allocs / msg
p99 解析 + 路由1.42 µs · 14 allocs
NexusFIX (C++23) order_handler.cpp
void OrderHandler::on_message(MessageView m, SessionRef sid) noexcept
{
  auto [cl_ord_id, symbol, side, qty, price] =
      m.decode<D::ClOrdID, D::Symbol, D::Side,
                D::OrderQty, D::Price>();     // in-place, span<const char>

  // fixed-arena order slot, no heap, no copies
  auto& slot = arena_.acquire(cl_ord_id);
  slot.init(symbol, side, qty, price, sid);

  router_.route(slot);                              // 0 heap allocs / msg
}
p99 解析 + 路由412 ns · 0 allocs

為何團隊會替換 QuickFIX。

QuickFIX 為整個產業扛起了二十年的重活。當那些早期取捨變成瓶頸時,你就會轉向 NexusFIX。

QuickFIXNexusFIX
熱路徑分配每筆訊息約 14 次堆分配(std::string、Decimal)0 · 靜態 arena,原地解碼
p99 解析延遲依方言不同 1.2–1.8 µs< 500 ns · 無分支標籤解碼
吞吐 / 核持續 60–90K msg/s240K+ msg/s 持續
負載下的尾部表現無 GC,但分配器抖動 = 不可預測的尖刺熱路徑上無分配器。 平坦尾部
協定版本4.2 / 4.4 / 5.0。逐次建置的 XML 資料字典4.2 / 4.4 / 5.0 / FIXT + 執行期方言疊加
語言C++03 / C++11 風格,虛函式派發C++23, concepts + ranges,熱路徑上無 virtual
QuickFIX 誕生於 5,000 msg/sec 就算忙碌會話的年代。NexusFIX 面向的,是那種流量算是「清淡一分鐘」的場所。 而且尾部無論如何都得保持平坦。

熱路徑,
端到端。

線纜位元組進來,路由訂單出去。三個階段,全部跑在同一執行緒,全部不做分配。

1 階段 1 · 解碼

位元組進,欄位出。 零複製。

以 SOH 分隔的位元組流原地迭代。每個 tag 都解析成對原始緩衝區的型別化視圖;數值欄位以無分支方式解析,方言疊加在會話綁定時套用。

span<const char>無分支SIMD 校驗和
2 階段 2 · 驗證

會話狀態, 確定性運行。

序列號、心跳視窗、gap-fill 語意、resend-request 怪癖。由按 venue 設定產生的狀態機處理,每條轉移都寫入 memory-mapped 日誌。

seq-num心跳重送mmap journal
3 階段 3 · 路由

送入你的處理器, 零分配。

從固定 arena 取得一個訂單槽位,透過參考填入,再透過無鎖 SPSC 佇列交給你的應用程式。槽位一直存活到訂單進入終態,隨後歸還 arena。

SPSC 佇列arena 槽位無 virtual

繼續 深入。

接下來可以走的兩條線:架構深度文章,或可對話的即時講解器。

一個下午 就能接好。

NexusFIX 以單一靜態程式庫 + 一個 CLI 會話模擬器的形式發行。帶一份 venue 設定和一個處理器過來,本機就能跑起一段確定性的 FIX 會話。可從日誌重放,可追到位元組。

探索其它 專案。

NexusFIX 是我們建構的三個引擎之一。同一套理念:能開源的就開源,效能優先,無鎖定。