How to Handle Player Spikes at a Multiplayer Launch Without Server Outages

Launch spikes break allocation, provider quotas and matchmaker queues before they break game servers. Here is how to plan, test and spread capacity so the first wave of players gets into matches.

Andrew Walker
Head of Business Development at Gameye

To handle player spikes at a multiplayer launch, pre-warm enough capacity for the first wave, start one server per match on demand, and spread that capacity across more than one infrastructure provider. Then load test the whole path from matchmaker to running server, so launch day is not the first time it runs at scale.

This post covers what breaks on launch day, how to plan and test for it, and what two large launches on Gameye looked like.

Launch-day failures at a glance

Failure pointWhat players seeHow to prevent it
Server allocation can’t keep up with match creationLong waits after a match is foundKeep warm containers ready and start one server per match on demand
A cloud account hits its instance or vCPU quotaNew matches fail in one region while others workRaise quotas weeks ahead and spread capacity across providers
One provider has an outageA whole region stops starting matchesRun more than one provider per region with automatic failover
Matchmaker retries pile upQueues keep growing after capacity comes backRetry after a short delay and fall back to a second region
Players arrive in a region you didn’t plan forHigh ping or no matches for those playersUse a platform that can add regions without long reservations

What actually fails on launch day

When you plan for launch, look past the game server process. Load builds up in the steps before a match starts, and those steps are where players get stuck.

Allocation. A match forms in the matchmaker. Something then has to find a machine, start the server and return an address. If that step slows down under load, players sit in a queue that looks broken to them. If the fleet was sized for a forecast, it runs out as soon as demand passes the forecast.

Provider quotas. Cloud accounts limit how many instances or vCPUs you can run per region. The default limits on an account can sit well below a launch peak, and raising them takes a support request and time. You can have budget to spend and still have the provider refuse new machines.

Matchmaker backlog. When allocation fails, the matchmaker retries. If every pending match retries at once with no delay, the retries add load at the worst moment. The queue keeps growing after capacity returns, because the backlog has to drain first.

Capacity planning and load testing

A forecast is a starting point. Chivalry 2’s demand in its first hour was roughly double its best-case projection. Nubs! Arena saw roughly three times its forecast. Plan for the forecast to be wrong in both size and location.

Gameye’s orchestration layer has been load tested to 3 million concurrent users. That is an internal test figure. The highest production peak so far is 250,000 concurrent players, at the Chivalry 2 launch.

Multi-provider failover

If your whole fleet sits in one cloud account, an outage at that provider takes the region down. So does a quota you can’t raise in time.

The fix is more than one provider per region, with placement that moves new sessions on its own. Gameye runs on 21 infrastructure providers across more than 200 data centers. If a provider has issues, new sessions go to healthy providers in the same region. Existing sessions on healthy nodes keep running. Your matchmaker makes the same API call either way.

Placement is metal first. Every session tries bare metal first and only bursts to cloud when bare metal in that region is full. When demand drops, the cloud capacity is released. You get a fast, cheaper baseline on normal days and cloud headroom for the launch peak.

Your matchmaker still needs to handle a full region. Gameye returns a 420 when it can’t place a session in the requested region. The docs recommend a retry after 2 to 5 seconds, then a fallback to a secondary region if retries fail. Define those fallback regions before launch.

Chivalry 2 at launch

Torn Banner Studios and Tripwire Interactive launched Chivalry 2 in June 2021 on PC, PlayStation and Xbox. It reached 250,000 concurrent players in the first 30 minutes and nearly 1 million players in the first month, on dedicated servers in 30 locations.

Gameye allocated sessions on demand and added capacity across providers as concurrency climbed. Nobody had to intervene by hand, and there were no major downtime events.

Demand also came from Japan and Korea, which early capacity planning had not prioritized. Gameye added capacity in Tokyo and Seoul within hours. Per-second billing meant the studio paid for sessions that ran, not for idle capacity. Read the full Chivalry 2 case study.

No More Room in Hell 2 at launch

No More Room in Hell 2 ran more than 500,000 game server containers in one launch weekend on Gameye. Bare metal, flex metal and cloud capacity scaled together automatically. The game reached the Top 5 trending on PS5 at release.

On Gameye, each session runs in its own container. When a match ends, Gameye stops the container and reclaims the capacity for the next session, so capacity follows the number of live matches.

The Nubs! Arena launch is a smaller example of the same pattern. Demand came in at roughly three times forecast, and Gameye handled it without manual capacity changes. The figures behind these launches are on the platform data page.

Launch-day checklist

Before launch:

On launch day:

After the peak:

How Gameye handles a launch spike

Your matchmaker calls POST /session with a region and a Docker image. Gameye places the session and returns an IP address and port. There is no Gameye SDK in your server.

See how it works for the session flow and pricing for the full rate card.

Summary

To test your launch setup, start a free trial and run a match on Gameye, or talk to an engineer about your launch plan.