4 ms·
Consider some of the parts of an MMO server backend: 1. Login (Authentication and identity) 2. Persistence of data 3. Social graphs 4. Gameplay 5. Metrics/
by muststopmyths 6y ago
Consider some of the parts of an MMO server backend:
1. Login (Authentication and identity)
2. Persistence of data
3. Social graphs
4. Gameplay
5. Metrics/telemetry collection, ingestion, tracking, presentation.
1,2,3 and 5 are generalizable and a framework can be made to fit almost any game. Metrics/telemetry might be game-specific, but you can come up with an abstraction to fit most of the types of things you might want to collect/observe.
I'm not even talking about operation and maintenance. You can assume those are fairly well-understood generalizable problems. Or the type of networking requirements of WoW vs CoD.
Number 4 is impossible to generalize. A gameplay server will be unique to each game. Frameworks like SpatialOS etc. are not scaling out game play. They are scaling out the persistence and distribution of game state. Those are two very different problems.
A lot of engines (like Unreal) include a "server" component which you can use for upto 64-ish players. After that, any optimizations you need are going to be very, very specific to the game.
For example, the requirements to scale a diablo-style looter game are completely different from an FPS or a WoW-style classic RPG. How many ticked objects you have in a game instance on the server for example will vary from game to game and will drastically alter the scalability.
Many companies, including Unity and Unreal at various points have tried to come up with such a framework and have failed. No such framework exists even at a paid level. Let alone an open-source framework where your users will be mostly non-technical game designers who just want the damn thing to work so they can be creative. As much as I love their creativity, I would go mad trying to satisfy such an audience :-)
TLDR: Gameplay logic is not conducive to a generalized abstraction and thus cannot be scaled independent of game type.
- programd 6y agoCouldn't you use just a vanilla Golang (or any other language) microservice for all of this? If you know what you are doing you can have a bulletproof basic service with all of the above up and running in no time, just add your game logic. Most of your requirements are part and parcel of any modern commercial Docker microservice. Never mind that such frameworks already exist, e.g. nano [0] specifically designed for games. Scalability is also not an issue. Number of simultaneous players and objects is limited by bandwidth and latency only. There are certainly no barriers to handling multi-million entity databases on any modern server. You're really only limited by how much data you can push out to your users within an update tick. And of course by how much money you're willing to pay for back end compute capacity on an ongoing basis. But those costs are very low these days, especially if you have dedicated servers rather then AWS/Google/Azure. I think perhaps the issue is not so much that frameworks don't exist, but rather that no single framework has achieved popularity in the game design community. The indie crowd is not likely to want to, or afford to, run servers for years and years, so the demand is not there. The triple-A studios roll their own. [0] https://github.com/lonng/nano https://github.com/lonng/nano