Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Actor Systems In Rust: Techniques and Tradeoffs
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
86
Implementation and Verification of a Consensus Protocol in Erlang
ajs
0
260
Other Decks in Programming
See All in Programming
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
780
Strategic Design in the Frontend: Moduliths & Micro Frontends @DDDEurope
manfredsteyer
PRO
0
100
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
350
スマートグラスで並列バイブコーディング
hyshu
0
150
net-httpのHTTP/2対応について
naruse
0
490
JJUG CCC 2026 Spring: JSpecify で実現する Kotlin フレンドリーな Java API 設計
ternbusty
1
170
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
6
1.3k
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
350
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
130
Contextとはなにか
chiroruxx
1
330
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
130
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
4.1k
Featured
See All Featured
ラッコキーワード サービス紹介資料
rakko
1
3.7M
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Paper Plane (Part 1)
katiecoart
PRO
0
9k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
490
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
330
4 Signs Your Business is Dying
shpigford
187
22k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
860
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
320
Speed Design
sergeychernyshev
33
1.8k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
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