Erlang and First-Person Shooters in online games

Demonware is one of the world's largest online game service providers. We handle over 2.5 million concurrent online users, and host the online component for over 40 titles including Call of Duty Black Ops, the world's best selling game. Games studios come up with feature requests, and we develop the server code, figure our how to scale it and then keep it running for years.

We use Erlang mostly for what it was designed - highly concurrent loads. In our case we need to manage 100,000s of concurrent TCP connections across many physical machines each with many cores, sending messages between those users. We need a presence system to prevent duplicate logins and re-use of licenses, and a queuing system to schedule requests onwards to components built in a more sequential style. And we want this to have a webservice and SNMP interface, so we can control and monitor everything.

It's rare that our business logic itself is written in Erlang, but we do sometimes use it for game-related tasks. We use it as a server for caching in-game leaderboards, for allowing a user to test their bandwidth, and for holding some transient in-game user data.

This talk will be a brief history of the company, from scrappy startup, and why we made the switch to Erlang over four years ago. We will talk about how we use Erlang, and the various mistakes we have made and lessons we have learned over that time.