Skip to main content

YU10-fix-ingress architecture

FIX 4.4 order-entry front door for the order-matcher: an in-process QuickFIX/J acceptor whose session threads publish translated order commands to the existing LMAX input ring, a durable correlation ledger binding ClOrdIDs to ring sequences, and an output-disruptor handler streaming ExecutionReports back to the owning session.

  • Inherits architectural baseline from: YU09-ops-hardening (which inherits the full YU02..YU08 LMAX/Kubernetes lineage)
  • Generated from: system/architecture.model.json
  • Canonical flows: architecture.md

Architecture Diagram​

Node Catalog​

NodeKindLabelNotes
fix_counterpartyexternalFIX counterparty (initiator)Any FIX 4.4 initiator: logs on with SenderCompID + JWT in Password(554), submits NewOrderSingle/OrderCancelRequest/OrderStatusRequest, receives ExecutionReports.
fix_acceptorserviceQuickFIX/J acceptor (in-process, :18130)Owns the FIX session layer (logon, heartbeats, sequence numbers, resend) on its own threads inside the order-matcher JVM. File store + file log on the FIX data directory.
fix_identityserviceFixIdentity (logon gate)Resolves Password(554) JWT once via the existing EntitlementGate.resolve and maps SenderCompID to exactly one account via FIX_SESSION_ACCOUNTS; pins the ResolvedPrincipal to the session; fail-closed on any miss.
fix_translatorserviceFixOrderApplication (translator)On the session thread: D -> order-new, F -> cancel (ledger lookup + ownership check), H -> read-model status report. Four-outcome admission model; publishes to the input ring with a bounded claim timeout.
clordid_ledgerstoreClOrdID correlation ledger (PVC)Append-only records (sessionKey, ClOrdID, inputSeq, orderRef) written before ring publish with amortized force; rehydrated at startup; duplicate detection; fail-closed when unavailable.
input_ringqueueInput ring (ProducerType.MULTI)Unchanged. FIX session threads join REST/Tomcat threads and the replication follower as producers.
blpserviceBLP (journaler -> matcher)Unchanged: journal + risk screen + matching engine. A FIX order is bit-identical to a REST order here.
output_ringqueueOutput ring (ProducerType.SINGLE)Unchanged; carries order-lifecycle output events with inputSeq correlation.
fix_er_handlerserviceFixExecutionReportHandlerOutput-disruptor handler: joins OutputEvent.inputSeq through the ledger to (session, ClOrdID), builds ExecutionReport/OrderCancelReject, enqueues to the QuickFIX/J session send path. No I/O on the ring thread.
fix_storestoreFIX session store (PVC)QuickFIX/J file store: sequence numbers + sent messages (PersistMessages=Y) under FIX_DATA_DIR on the existing lmax-runtime-data volume; backs ResendRequest recovery.
read_modelstoreIn-memory order read modelUnchanged; serves OrderStatusRequest lookups without touching the ring.