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

wolf4earth
Louis Pilfold is the creator of the Gleam programming language. He explains what Gleam is and tells us where it came from. He then dives...
New
brainlid
In episode 62 of Thinking Elixir, we talk with Chris McCord about his recent announcement that he’s moved to work at Fly.io! We cover wha...
New
brainlid
In episode 88 of Thinking Elixir, we talk with Michael Crumm, the primary author of the Phoenix Live Dashboard, about a new project of hi...
New
brainlid
In episode 97 of Thinking Elixir, Dave Lucia released v2.0 of AvroEx, an Elixir library for working with Avro protocols and schemas. To u...
New
brainlid
https://thinkingelixir.com/podcast-episodes/051-live-auctions-with-alex-loukissas Posted via Devtalk (see this thread for details).
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
We talk with Andrea Leopardi, Elixir core team member, author, and recent Protohacker celebrity! We wanted to learn more about his dbg wo...
New
wolf4earth
Ivan Rublev is the author of the open source library, Domo, which provides type validations for Elixir applications. He discusses the typ...
New
ancatrusca
Task.async(fn → Rust.performant() end) Elixir :handshake: Rust What actually happens when BEAM resilience meets Rust performance? Flor...
New
brainlid
We talk with Peter Ullrich about his experience sending SMS messages from a Raspberry Pi Zero using Nerves. We cover what went well, what...
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
Harrisonl
We have an ECS cluster with 4 services, where each task joins a single cluster, via discovery ECS discovery service. Currently when I de...
New
marius95
Hello everyone, I try to use an Javascript Event Handler in my root.html.leex file. Therefore I created a function in the app.js file: ...
New
baxterw3b
Hi guys, i’m new in the Elixir world, and i have to say, that i love it! i’m having some problem to understand anonymous functions with ...
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID<0.412.0> terminating ** (Postgrex.Error) FATAL...
New
ovidiubadita
Hey all, I discovered Elixir and I love it. I always wanted to learn a functional programming and I intended to go for Haskell, but afte...
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New
joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 records...
New
AstonJ
We’ve put together this wiki for Phoenix LiveView - please feel free to add any info you feel is worth including. What is Phoenix LiveV...
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New

Latest on Elixir Forum

Elixir Forum

We're in Beta

About us Mission Statement