Improbable Icon

SpatialOS Discourse Forums

Servers, Disk Size and Player Count

Semi new to Spatial, and I have a few questions.

An instance of spatialos has multiple servers? What’s that mean for w4_r0500_e5**? How many servers are available per one instance? How many instances are there?

How many players per server can fit with the w4_r0500_e5** using the shooter template?

A lot of games have used very large data centers of TBs of drives, how come the disks with each tier only include a 40Gb disk?

Was also wondering about network data compression with packets. Would a third party compression system such as oodle (kind of like zlib) work with SpatialOS?
Thanks.

Hi @Alexl,

Firstly, welcome to our Forums community and secondly, apologies for the delay in getting back to you. I had to just double check a few things to make sure you got the correct answers!

Regarding your question on servers and general pricing, the “w#_” at the start of the template name tells you how many vCPUs are available to server-side workers in a template. So there are 4 vCPUs in the w4_r0500_e5. Exact details are on the table in our pricing docs - please do check them out if you haven’t already, there’s plenty of additional information there.

Using our Unity shooter project, we fit 200 players in a w4_r1000_e10, and 100 in a w2_r0500_e5. I don’t have the results for the w4_r0500_e5 specifically, but I would imagine it would be somewhere in the middle of those, depending on where the bottleneck is (e.g. worker resources vs runtime).

As for your question on data compression, we have compression built in to the new Modular network stack, you can’t just put oodle on top of it. Modular KCP and Modular TCP support compression that applies to all schema data plus some network headers. Check out our docs on this here. (non-null compression parameters means that compression is enabled). We are working to improve on the existing compression in future releases - stay tuned.

Best,
Nee :slight_smile:

Thanks for getting back to me.
Okay, but you have seemed to miss some questions.

If ~150 players can play in the w4_r05_e5 per server, with the 4cpu and 15gb ram, how many servers are we able to have for that instance (assuming the w4_r05 counts as one instance, though I thought I read something about unlimited instances or unlimited servers based on the mechanics of the game and what needs to be synced?).

And why is the disk size only 40GB, when countless others games have used TB’s of drives for their games servers?

Hey @Alexl,

Sorry I missed those two questions!

There is one instance per template. So if your instance is using the w4_r0500_e5, it has 4 vCPUs. The w48_r2000_e20 has 48 vCPUs. That is the largest public template we offer (although it’s not on our free tier). If you want more servers in a single instance, or to talk about the larger templates beyond the free tier, let me know and I can arrange for us to talk in more detail, as we can create something tailored to your game.

Regarding instances, you can run as many instances as you like. If you’re running 10 instances using the w4_r0500_e5, then you’re using 40 vCPUs in total. You can have one instance at a time on the free tier.

If you have 1,000 concurrent players, and you have created a 50-player game using the w2_r0100_e1 template, then you need to run at least 20 instances to cater to all of your players (maybe a few more as a buffer).

The 40GB of disk data is what’s available to a single game instance, which we find is more than enough for the game binary. If you have 20 game instances running, you’d have 20 * 40 = 800GB of data total. For data you want to persist outside of the game instance, such as leader boards, player stats and inventories, you would use a standard database.

Hope this helps clarify things a bit better!

best,
Nee

I have another question.

Say each player syncs to the server at 24kb/s.
That means the server needs 24kb ram per player per second.
If your server has 7.5gb of ram, and you calculate to use 6.8gb of ram to have remaining overhead, means
6800000kb/24= 233,000 players can be handled by 7gb of ram. If you only have 2vcpus, you might have to cut that number down to 10% of that total in case something goes wrong, so 23,000 players can be handled, is this true or false? If the server connection is 1gbps or 125MB/s (125000kb/s), then it should be able to handle 5200 total players?

If the 5200 players per server at 24kb/s is correct based on the lowest value able to be used (internet connection bandwidth), then do you provide instances that come with 1vcpu, 1gb ram, because that in theory should be enough to handle that many players? If that’s true, doesnt that mean that both improbable and the person paying for the service are overpaying?

Just that, 1000 players sounds like too low of a number all things considered. And according to you, would be $10.80 an hour or $93,000 a year, for 1/5th of the amount of players.
If only one instance is needed and can handle 5200 players, then multiples of those instances are not needed!

If you can accurately explain and describe why this is not the case, that would be appreciated.
If you could also provide the bandwidth of one player using the shooter template uses, that could also be helpful. Thanks.

Hi @Alexl,

this goes a bit beyond general pricing but I can try and help answer what I can. Before I do, can I ask if you’re using our SpatialOS GDK for Unity or Unreal? Or something else? This will help me a bit.

thanks,
Nee

Unreal engine. Versions 4.20-4.24

Yes hi did you manage to find the information I was asking about?

Hi @Alexl,

I’ve been mulling over this and I think we might be getting confused between vCPU (and RAM) available for your server workers and what the Runtime capacity is.

If you’ve not checked out information on what SpatialOS Runtime is, please do read our docs but essentially, there is a Runtime instance for every game deployment and it holds the canonical store of all SpatialOS entity data. It also takes care of server-worker and client-worker instance connections, and co-ordinates each worker instance’s write and read access to entity data.

There’s a number of theoretical maximums for what the Runtime can handle, purely from a bandwidth and memory perspective, but that’s going to be difficult to achieve in practice and we wouldn’t be able to detail it all out in this forum post. This would the same case for your server worker.

You’ll still need vCPUs and memory for the worker node to run your unreal server. You won’t be able to fit 1,000 players on a single Unreal instance with 1vCPU and 1GB of RAM, certainly not on the shooter example. You could do something very low fidelity, but then you wouldn’t be using anywhere near 24kb/s/player, which would then ask the question of why you’d want to use Unreal in the first instance.

Apologies if I’ve misunderstood your question but I hope that offers a bit more guidance?

best,
Nee

Certainly if a 1GB RAM device is using all 100% of its ram, and very old processor, then that processor is computing the ram bytes used.

If your vcpus can compute all 8GB of the ram and use it, then certainly the cap should be the max cap?

Is this not true?