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

brainlid
In episode 57 of Thinking Elixir, we sat down with co-host Cade Ward to hear how he and his team tackled a problem of hosting live web ch...
New
brainlid
In episode 54 of Thinking Elixir, Lucas San Román explains his library Sourceror and how it was created to solve some AST parsing limitat...
New
brainlid
In episode 104 of Thinking Elixir, Chris Grainger explains Explorer, Nx’s recent addition. It’s a “Data Frame” library which sounds far m...
New
brainlid
We talk with Bram Verburg about an important root certificate expiring at the end of September and how this impacts your Elixir and Erlan...
New
brainlid
In episode 72 of Thinking Elixir, we talk with Wiebe-Marten Wijnja about his project TypeCheck that provides a new kind of runtime type c...
New
wolf4earth
AJ Foster is a developer at Pluralsight. He talks about the course he made for Pluralsight about Elixir and then talks about how Elixir w...
New
brainlid
Episode 111 of Thinking Elixir. Ever wanted to deploy a PR for show-and-tell, QA testing, or to get feedback on it? Jason Axelson joins u...
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
In episode 75 of Thinking Elixir, we talk with Dave Lucia about Simplebet’s use of RabbitMQ and Commanded for solving unique real-time pr...
New
brainlid
Episode 128 of Thinking Elixir. The Phoenix 1.7 announcement blog post mentioned the ability to swap out Cowboy for another webserver lik...
New

Other popular topics Top

AstonJ
Posting this to see if we can make things easier for people to get into Neovim. If you use Neovim and have a favourite distro please let ...
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
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
Lily
In templates/appointment/index.html.eex: <%= for appointment <- @appointments do %> <tr> <td><%= appoi...
New
RisingFromAshes
I’ve read in another post that it may be possible with a router helper - but I couldn’t find an appropriate one, and tbh, I’m still just ...
New
nobody
Hi! In PHP: $_SERVER[‘SERVER_ADDR’] - in Elixir? Searched the docs for ip address and the web, no good results. Thanks!
New
ashish173
I am using Ecto timestamps with postgres, I can see the timestamps() use the :naive_dateime but for my use case I wanted to store the ti...
New
dblack
I’ve got an issue with an app and I’ve no idea of how to troubleshoot it. I’m hoping someone here might have seen something similar. I p...
New
Brian
What is the proper way to load a module from a file in to IEX? In the python world, doing something like this pretty standard: from ....
New
sergio
Kind of like when jquery came out, it was super necessary. Existing drag and drop libraries have a bunch of baggage to support old browse...
New

We're in Beta

About us Mission Statement