Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Actor Systems In Rust: Techniques and Tradeoffs
Search
Andrew J. Stone
November 16, 2017
Programming
350
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Actor Systems In Rust: Techniques and Tradeoffs
Andrew J. Stone
November 16, 2017
More Decks by Andrew J. Stone
See All by Andrew J. Stone
Actor Systems in Rust (Boston Rust Meetup Version)
ajs
0
89
Implementation and Verification of a Consensus Protocol in Erlang
ajs
0
260
Other Decks in Programming
See All in Programming
Security issues being discussed on Web Platforms
petamoriken
0
700
MIZARU@SPAJAM2026 第二回予選
1901drama
0
110
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
3
280
高専キャリア LT 発表内容
crysta1221
6
5.6k
GKE で Pod の見方を変えたら、スケールアウト時の挙動を真に捉えられた話
stkk
0
110
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
3
1k
App Intentsのビルドプロセスを支える技術
kntkymt
0
230
新卒PdEのリアル
ryu1013
1
480
How I Stole PSI from Android Studio - DroidKaigi2026
worker8
0
110
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
170
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
450
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.5k
Featured
See All Featured
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
240
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
It's Worth the Effort
3n
188
29k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
220
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
280
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
530
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
850
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
690
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
500
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Transcript
Actor Systems in Rust: Techniques and Tradeoffs Andrew J. Stone
Haret Distributed Coordinator and KV Store
Haret Multiple Independent Consensus Groups
Haret Protocol Viewstamped Replication Revisited for Consensus
Haret Backend • Versioned persistent trie per consensus group •
CAS on entire subtrees • Typed Leaves • Blob • Queue • Set
[email protected]
[email protected]
[email protected]
p1 p2 p3 Request (1) Prepare (2)
PrepareOk (3) Prepare (2) PrepareOk (3) Reply (4)
Actors Processes That Communicate Only via Asynchronous Msg Passing
Actors Straightforward Representation of Peers in a Consensus Group
Rabble Actor Abstractions for Implementing Distributed Algorithms
Rabble Dynamic Cluster Membership, Transport and Msg Routing
Rabble Designed for Testability
Rabble A Work in Progress
Rabble Provides a clean way to implement VRR in Haret
Naming pub struct Pid { pub group: Option<String>, pub name:
String, pub node: NodeId, }
Messages pub enum Msg<T> { User(T), ClusterStatus(ClusterStatus), ExecutorStatus(ExecutorStatus), StartTimer(usize), //
time in ms CancelTimer(Option<CorrelationId>), Timeout, Shutdown, GetMetrics, Metrics(Vec<(Name, Metric)>) } { Rabble built-ins User Defined
Envelopes pub struct Envelope<T> { pub to: Pid, pub from:
Pid, pub msg: Msg<T>, pub correlation_id: Option<CorrelationId> }
pub trait Process<T> : Send { /// Handle messages from
other actors fn handle(&mut self, msg: Msg<T>, from: Pid, correlation_id: Option<CorrelationId>, output: &mut Vec<Envelope<T>>); } Processes
Echo Server P1 (Client) Envelope { to: P2, from: P1,
msg: Msg::User<Hello>, correlation_id: Some(P1) } Envelope { to: P1, from: P2, msg: Msg::User<Hello>, correlation_id: Some(P1) } P2 (Server)
impl Process<T> for EchoServer<T> { fn handle(&mut self, msg: Msg<T>,
from: Pid, cid: Option<CorrelationId>, output: &mut Vec<Envelope<T>>) { match msg { Msg::User(Hello) => { let to = from; // P1 let from = self.pid.clone(); // P2 let msg = Msg::User(Hello); let reply = Envelope::new(to, from, msg, cid); output.push(reply); }, _ => () } }
Executor Locates and Runs Processes
P1 P2 P3 Hashmap<Pid, Process> Executor Channel To: P1 Thread
Handle
Property Based Testing 1. Construct a group of processes in
an initial state 2. Generate a schedule of test messages 3. Call the handle method of a process with a test message 4. Collect output messages of handle method 5. Schedule output messages
Test Scheduling Trigger Protocol State Transitions with Explicit Timeouts
Test Assertions •Pre/Post conditions •Global state invariants
Failing Tests Failing Schedules Run as a Regression Suite
Debugging Each Message Receipt is One Step in a Test
Schedule
Cluster Server Non-blocking Single Threaded Server with TCP Connections to
every node
Membership Dynamic Membership Maintained in an Observed-Remove Set
Services Actors that Run Blocking and CPU Intensive Operations
Takeaways
Takeaway Dynamic Messaging is Complex Expensive, and Unergonomic for Distributed
Actors in Rust
Takeaway Writing Good Schedulers is Hard
Takeaway Design your systems to make deterministic testing easier
Takeaway Compromise and Pragmatism allow a good enough solution that
works NOW
Links • https://github.com/andrewjstone/rabble • https://github.com/andrewjstone/orset • https://github.com/vmware/haret
Thanks! Tom Santero Justin Sheehy VMware