Wingfoil — a Rust stream-processing graph framework with an Aeron adapter #2066
0-jake-0
started this conversation in
Show and tell
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Hi all,
Wanted to share something we recently shipped that builds on Aeron, in case it's
useful to others here and to get any feedback on the integration choices.
Wingfoil is a Rust stream-processing
library — you wire up a graph of nodes where each node ticks when its upstreams
produce a value, and the graph runs either in real time or replayed from
historical data. It's aimed at high-frequency trading and real-time AI pipelines.
We just added an Aeron adapter that exposes a channel as wingfoil source and
sink nodes:
typed wingfoil stream you can wire into the rest of your graph. A status
variant also gives you a reactive stream of connect/disconnect/back-pressure
transitions as a side-channel.
.aeron_pub(...)on any stream offers its values to a channel,with the same optional status side-channel on the publish side.
The design choices we'd most like feedback on are the ones a user actually
makes:
Spinpolls Aeron inside the graph cycle on thegraph thread — zero thread-crossing latency, burns a core, and ticks
downstream only when data actually arrives.
Threadedpolls on a backgroundthread and delivers over a channel: one hop of latency, frees the graph thread.
rusteron-clientC/C++ FFI backend for production(genuinely lock-free
poll()/offer()), and an experimental pure-Rustaeron-rsbackend. The latter sharesArc<Mutex<…>>handles with its ownclient-conductor thread, so the lock can't be hoisted out of the cycle — we
detect that and automatically downgrade
SpintoThreadedfor it ratherthan violate our "no locks in the hot path" invariant. Curious whether that
matches how others have integrated aeron-rs.
A concrete use case: a
Spin-mode subscriber feeding a wingfoil graph thatdoes order-book construction and risk checks, publishing decisions back out over
aeron:ipcto a co-located execution process — all on one core with no kernelround-trips.
Links:
Thanks for building Aeron — happy to answer questions or dig into anything above.
We're actively looking for contributors, so if any of this is up your street
we'd love the help. And if wingfoil looks useful to you, a ⭐ on the
repo would mean a lot.
All reactions