| Crates.io | orderbook-rs |
| lib.rs | orderbook-rs |
| version | 0.4.0 |
| created_at | 2025-03-30 07:46:35.710741+00 |
| updated_at | 2025-09-24 16:58:08.967352+00 |
| description | A high-performance, lock-free price level implementation for limit order books in Rust. This library provides the building blocks for creating efficient trading systems with support for multiple order types and concurrent access patterns. |
| homepage | https://github.com/joaquinbejar/OrderBook-rs |
| repository | https://github.com/joaquinbejar/OrderBook-rs |
| max_upload_size | |
| id | 1612153 |
| size | 418,646 |
A high-performance, thread-safe limit order book implementation written in Rust. This project provides a comprehensive order matching engine designed for low-latency trading systems, with a focus on concurrent access patterns and lock-free data structures.
Lock-Free Architecture: Built using atomics and lock-free data structures to minimize contention and maximize throughput in high-frequency trading scenarios.
Multiple Order Types: Support for various order types including standard limit orders, iceberg orders, post-only, fill-or-kill, immediate-or-cancel, good-till-date, trailing stop, pegged, market-to-limit, and reserve orders with custom replenishment logic.
Thread-Safe Price Levels: Each price level can be independently and concurrently modified by multiple threads without blocking.
Advanced Order Matching: Efficient matching algorithm for both market and limit orders, correctly handling complex order types and partial fills.
Performance Metrics: Built-in statistics tracking for benchmarking and monitoring system performance.
Memory Efficient: Designed to scale to millions of orders with minimal memory overhead.
This order book engine is built with the following design principles:
This version introduces significant performance optimizations and architectural improvements:
PriceLevelCache for faster best bid/ask lookups and a MatchingPool to reduce memory allocations in the matching engine, leading to lower latency.This project is currently in active development and is not yet suitable for production use.
This analyzes the performance of the OrderBook system based on tests conducted on an Apple M4 Max processor. The data comes from a High-Frequency Trading (HFT) simulation and price level distribution performance tests.
| Metric | Total Operations | Operations/Second |
|---|---|---|
| Orders Added | 506,105 | 101,152.80 |
| Orders Matched | 314,245 | 62,806.66 |
| Orders Cancelled | 204,047 | 40,781.91 |
| Total Operations | 1,024,397 | 204,741.37 |
| Metric | Initial State | Final State |
|---|---|---|
| Best Bid | 9,900 | 9,900 |
| Best Ask | 10,000 | 10,070 |
| Spread | 100 | 170 |
| Mid Price | 9,950.00 | 9,985.00 |
| Total Orders | 1,020 | 34,850 |
| Bid Price Levels | 21 | 11 |
| Ask Price Levels | 21 | 10 |
| Total Bid Quantity | 7,750 | 274,504 |
| Total Ask Quantity | 7,750 | 360,477 |
| Read % | Operations/Second |
|---|---|
| 0% | 430,081.91 |
| 25% | 17,031.12 |
| 50% | 15,965.15 |
| 75% | 20,590.32 |
| 95% | 42,451.24 |
| % Operations on Hot Spot | Operations/Second |
|---|---|
| 0% | 2,742,810.37 |
| 25% | 3,414,940.27 |
| 50% | 4,542,931.02 |
| 75% | 8,834,677.82 |
| 100% | 19,403,341.34 |
The significant performance gains, especially in the "Hot Spot Contention Test," and the resolution of the previous deadlocks are a direct result of refactoring the internal concurrency model of the PriceLevel.
Previous Bottleneck: The original implementation relied on a crossbeam::queue::SegQueue for storing orders. While the queue itself is lock-free, operations like finding or removing a specific order required draining the entire queue into a temporary list, performing the action, and then pushing all elements back. This process was inefficient and created a major point of contention, leading to deadlocks under heavy multi-threaded load.
New Implementation: The OrderQueue was re-designed to use a combination of:
dashmap::DashMap for storing orders, allowing for highly concurrent, O(1) average-case time complexity for insertions, lookups, and removals by OrderId.crossbeam::queue::SegQueue that now only stores OrderIds to maintain the crucial First-In-First-Out (FIFO) order for matching.This hybrid approach eliminates the previous bottleneck, allowing threads to operate on the order collection with minimal contention, which is reflected in the massive throughput increase in the hot spot tests.
The system demonstrates excellent capability to handle over 200,000 operations per second in the high-frequency trading simulation, distributed across order creations, matches, and cancellations.
This analysis confirms that the system design is highly scalable and appropriate for demanding financial applications requiring high-speed processing with data consistency.
This project includes a Makefile with common tasks to simplify development. Here's a list of useful commands:
make build # Compile the project
make release # Build in release mode
make run # Run the main binary
make test # Run all tests
make fmt # Format code
make fmt-check # Check formatting without applying
make lint # Run clippy with warnings as errors
make lint-fix # Auto-fix lint issues
make fix # Auto-fix Rust compiler suggestions
make check # Run fmt-check + lint + test
make doc # Check for missing docs via clippy
make doc-open # Build and open Rust documentation
make create-doc # Generate internal docs
make readme # Regenerate README using cargo-readme
make publish # Prepare and publish crate to crates.io
make coverage # Generate code coverage report (XML)
make coverage-html # Generate HTML coverage report
make open-coverage # Open HTML report
make bench # Run benchmarks using Criterion
make bench-show # Open benchmark report
make bench-save # Save benchmark history snapshot
make bench-compare # Compare benchmark runs
make bench-json # Output benchmarks in JSON
make bench-clean # Remove benchmark data
make git-log # Show commits on current branch vs main
make check-spanish # Check for Spanish words in code
make zip # Create zip without target/ and temp files
make tree # Visualize project tree (excludes common clutter)
make workflow-build # Simulate build workflow
make workflow-lint # Simulate lint workflow
make workflow-test # Simulate test workflow
make workflow-coverage # Simulate coverage workflow
make workflow # Run all workflows
ℹ️ Requires act for local workflow simulation and cargo-tarpaulin for coverage.
We welcome contributions to this project! If you would like to contribute, please follow these steps:
If you have any questions, issues, or would like to provide feedback, please feel free to contact the project maintainer:
Author: Joaquín Béjar García
Email: jb@taunais.com
Telegram: @joaquin_bejar
Repository: https://github.com/joaquinbejar/OrderBook-rs
Documentation: https://docs.rs/OrderBook-rs
We appreciate your interest and look forward to your contributions!
License: MIT