Actor Model - sgml/signature GitHub Wiki
- https://www.bartoszsypytkowski.com/build-your-own-actor-model/
- https://github.com/frankshearar/ikaria/tree/master/src
WebDAV Implementation
+---------+
| Client |
+---------+
|
| PUT /actors/user_123/tasks?Idempotency-Key=abc123
v
+------------------+
| WEBDAV Server |
+------------------+
|
| Lookup Idempotency-Key
v
+-----------------------------+
| Idempotency Key Registry |
+-----------------------------+
|
| If new → forward
v
+---------------------------------------------+
| Actor: user_123 |
| Endpoint: /actors/user_123 |
| |
| - POST /actors/user_123/execute |
| - GET /actors/user_123/status |
| - PUT /actors/user_123/state |
| |
| If key seen → return cached result |
+---------------------------------------------+
|
| Response (cached or new)
v
+------------------+
| WEBDAV Server |
+------------------+
|
| 200 OK / 202 Accepted
v
+---------+
| Client |
+---------+
Narrative
“Imagine a world where every object is a little computer that talks to other little computers.”
— Joe Armstrong
In this world, each actor is like a barista in a coffee shop. They work alone, focused, and serve one customer at a time. No shared counters. No chaos. Just quiet, serialized service.
A customer walks in with a receipt — that’s your idempotency key. It says: “I’ve already ordered this. Just give me the same thing again.”
The barista (actor
user_123) checks the drawer:
“Have I already made this coffee for receiptabc123?”
If yes, they hand over the same cup.
If no, they make the coffee, store it underabc123, and serve it.
Now imagine the customer panics — maybe their phone glitched, maybe the network dropped — and they come back five times with the same receipt.
The barista doesn’t flinch. They just hand over the same cup. No wasted beans. No double charges.
You didn’t need a rate-limiting algorithm to say “only 5 customers per minute.”
You didn’t need a global counter or a token bucket.
You just needed each actor to handle one message at a time, and the receipt to prevent duplication.
“Concurrency is easy when you don’t share state. Just let each little computer do its job.”
— Joe Armstrong