ancatrusca

ancatrusca

BEAM There, Done That with Ellyse Sedeno - Why Multiplayer Games Are Just Distributed Systems

This podcast is relevant particularly for the architectural discussion around how OTP primitives map to the domain of multiplayer games.
Ellyse Sedeno has been working at the intersection of distributed systems and game backends since the early days of MMORPGs. Her starting point is that multiplayer games and telecom systems face structurally similar problems: millions of concurrent sessions, soft real-time requirements, failure isolation between subsystems, and distributed state that has to be consistent without being globally locked.
The episode covers how the traditional game server architecture - threaded Java or C++ with explicit lock management - fails under load in ways that are both predictable (deadlocks are non-deterministic and nearly impossible to reproduce) and expensive to fix after the fact.
The alternative she describes maps cleanly onto OTP:
A presence server, chat server, world server, and combat server run as separate supervised processes. Each player and mob has its own process. Movement events arrive in a mailbox, are processed without locks (there is no shared mutable state to lock), and changes are broadcast. When the world server crashes, it restarts under supervision without affecting chat. The architecture makes failure modes visible and recoverable rather than total.
One observation worth discussing from an Erlang perspective: she makes the case that the call vs cast distinction matters significantly in game server design. Circular dependencies between server processes using synchronous calls are the actor model’s equivalent of a threading deadlock - and they’re much easier to reason about structurally when your dependency graph is explicit in your process topology.
She also discusses using player behavior analytics as an observability layer - aggregate deltas in chat volume, level completion rates, and movement patterns as leading indicators of server-side failures. At scale, player behavior is a higher signal-to-noise instrument than server logs that have become too noisy to read.
The project is open source on Codeberg as game_server.

Most Liked

ellyxir

ellyxir

hey there, here’s the repository, feel free to ping me if you have any comments or questions! ellyxir/gameserver - Codeberg.org

kxnis

kxnis

Awesome talk. I woke up today thinking of how to use elixir in games and you just published it. Thats amazing. Btw, what is the repo? Couldn’t find it at codeberg

Where Next?

Popular in Podcasts Top

ancatrusca
New BEAM There, Done That episode worth a read for anyone who’s had to defend an Elixir choice against teams pushing for Go, Rust, or Nod...
New
brainlid
In episode 49 of Thinking Elixir, Maciej Kaszubowski returns to talk about how read models can help modularize our systems. There is a fo...
New
brainlid
Episode 309 of Thinking Elixir. This is it. The final episode of Thinking Elixir after six incredible years of weekly episodes! We send t...
New
brainlid
In episode 102 of Thinking Elixir, Sean Moriarity, the author of Genetic Algorithms in Elixir, lays out Machine Learning in the Elixir sp...
New
brainlid
In episode 84 of Thinking Elixir, we talk with Chris McCord about the LiveBeats project he created. It’s a high-quality, showcase, open s...
New
brainlid
In episode 106 of Thinking Elixir, we learn how the SonicPi project has been letting people live code musical performances for years. Sam...
New
brainlid
Episode 112 of Thinking Elixir. Google Chrome extension that displays a LiveView and integrates with a web page like Gmail? Steve Bussey ...
New
ancatrusca
We just published a new episode of BEAM There, Done That that I think deserves a focused discussion here. Peter Ullrich spent an afterno...
New
ancatrusca
Task.async(fn → Rust.performant() end) Elixir :handshake: Rust What actually happens when BEAM resilience meets Rust performance? Flor...
New
sundi
It’s the Season 10 finale of the Elixir Wizards podcast! José Valim, Guillaume Duboc, and Giuseppe Castagna join Wizards Owen Bickford an...
New

Other popular topics Top

hariharasudhan94
lets say i have a sample like a = 20; b = 10; if (a > b) do {:ok, "a"} end if (a < b) do {:ok, b} end if (a == b) do {:ok, "equa...
New
chrismccord
As promised, the first release candidate of Phoenix 1.3.0 is out! This release focuses on code generators with improved project structure...
New
lessless
I believe there are people here who are dealing with CSV files import on the daily basis, and since Excel is a really popular tool there ...
New
greenz1
I have a phoenix application from which a user can download multiple(5-6) files of size 1MB. I couldn’t find anything related to sending ...
New
belgoros
I’m not a pro in using Regex and can’t figure out why the following behaviour happens, especially if we take into account the difference ...
New
stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
jay1
Why is it that the mnesia database isn’t the most preferred database for use in Elixir/Phoenix?
New
jason.o
In the code below, if the create action is not set to accept “extra_key” as an input, it errors out with a message shown above. Is there ...
New
shijith.k
I am trying to start a new phoenix project with elixir 1.9, but mix phx.new does not work. It says that ** (Mix) The task "phx.new" could...
New
jononomo
For some reason my phoenix channels are working for me in my local dev environment, but as soon as I deploy via Docker, I get a 403 error...
New

Latest on Elixir Forum

Elixir Forum

We're in Beta

About us Mission Statement