Show HN: Rivet Actors – Durable Objects build with Rust, FoundationDB, Isolates
(github.com)129 points by NathanFlurry 4 days ago | 25 comments
Hello! We posted a Show HN for Rivet last year for our container orchestration project (https://news.ycombinator.com/item?id=37188659). In that time, a lot has changed that I think HN will find interesting.
Rivet is open-source actor infrastructure similar to Cloudflare's Durable Objects. Rivet itself already serves millions of MAU in production using our current container runtime – primarily for multiplayer games – and Rivet Actors are a new extension to support actor-like workloads. Rivet Actor's core primitives are RPC, state, and events.
Actors are powered by Rust, V8 isolates (supports Deno), and FoundationDB. An architecture diagram is available here for [1]. If you're not familiar with FoundationDB, you're overdue to watch Dave Rosenthal's talk [3]. (I firmly believe it's by far the best permissively licensed database; if only it had a well maintained SQL layer.)
Here's where Rivet's architecture gets fun – we don't rely on a traditional orchestrator like Kubernetes or Nomad for our runtime. Instead, our orchestrator is powered by an in-house actor-like workflow engine – similar to how FoundationDB is powered by their own actor library (Flow [4]) internally. It lets us reliably & efficiently build complex logic – like our orchestrator – that would normally be incredibly difficult to build correctly. For example, here's the logic that powers Rivet Actors themselves with complex mechanisms like retry upgrades, retry backoffs, and draining [2].
One of the reasons we built Rivet Actors is because we tried to replace most of our Redis-based realtime infrastructure with Durable Objects. The architecture allowed us to build realtime features much faster & efficiently, but the platform & APIs were needlessly rigid and difficult to use. Our goal is to build an actor-like platform that includes the bells and whistles required for developers to benefit from the actor model without the learning curve of tools like Erlang/OTP, Akka, or Orleans.
Rivet Actors provides a few key benefits in flexibility over Durable Objects:
- Open-source (Apache 2.0) – built to be self-hosted and deployed on-prem
- Provides observability out of the box, no Logpush required
- Rivet Actors support the Deno runtime, so NPM & JSR just works
- @rivet-gg/actor [5] framework provides RPC, state, and events out of the box for faster bootstrapping; you can modify and deploy it yourself
- Supports both V8 isolates & Docker-compatible containers so you can run any software you'd like, like Godot/Unity servers or video transcoding
- Also supports TCP & UDP (we run games!)
- Provides vanilla HTTP API for easy use with existing apps
- Full control over regions
There's plenty more that I don't have space to talk about. Give our docs a read if you'd like to learn more [6] or read about internal design decisions [7]. I'll be in the comments answering questions!
Cheers, Nathan
[1] https://github.com/rivet-gg/rivet?tab=readme-ov-file#diagram
[2] https://github.com/rivet-gg/rivet/blob/a3db31f3b5c351061d665...
[3] https://www.youtube.com/watch?v=9g84y_60VGM
[4] https://apple.github.io/foundationdb/flow.html
iFire 4 days ago | next |
If I wanted a Rivet integration with Godot Engine and/or Elixir, how would I do it for shared durable objects in a virtual reality environment?
I have code for Godot Engine Foundationdb access, but I'm cutting too many encapsulation layers.