In Indie development projects, we learn by doing. Our plans don’t always take the form we originally intended. Specifically, we were well into our implementation of GameSparks as a backend service platform for our upcoming development title Arcanoria Revelations. But as we got further into it, I became more and more uncomfortable with certain aspects of the GameSparks service offering, including:
- GameSparks requires us to use their data servers remotely, but they don’t offer to co-locate our game servers. This is something I expect would have a huge negative impact on game performance as the game servers will have to wait for long round-trips over the WAN for many queries. And that’s not to mention the (perhaps significant) additional costs for intra-server traffic bandwidth. Sure, it may be possible to split our database into game-related and non-game-related data, and store them separately. But even if we do that, we’d still be paying for remote server access on some scale, and we’ll have additional complexity (and thus, entropy) to deal with.
- GameSparks uses MongoDB, which is a Document Store and not a traditional Relational Database (RDBMS). Nothing against MongoDB, but personally my training and decades of professional database experience is with RDBMSs like Sybase, MSSQL, MySQL, SQLite, and of course PostgreSQL (which we’re using as the central database technology for this project). Document store style databases are conceptualized in a completely different way. While both MongoDB and PostgreSQL would be solid solutions for a project like Arcanoria Revelations, I prefer to go with what I know.
- GameSparks’ pricetag is an unknown factor. On the surface, it seems quite generous to provide all the service and support that they do “for free” during development. But eventually the piper must be paid, and it seems difficult to quantify how much we’d owe them down the road. Those people have to earn a living wage, and I hope they’re doing well! But by building our own custom backend, we reduce the overhead of the project. Ultra-low costs is one of our key competitive advantages with Arcanoria Revelations. Yes, we’re on a shoestring budget!
So, for these reasons, we’ve replaced GameSparks with something called Master Server Framework, a.k.a. MSF. (https://www.assetstore.unity3d.com/en/#!/content/71391)
MSF is a helpful group of code classes that provides templates for the tricky bits of backend server operations like user authentication, encryption, server management, and more. Unfortunately, almost immediately after we started using MSF back in March, the package’s author got burned out, and then got married and went on an extended honeymoon, and basically hasn’t been very active since then. So we’ve had to sort of make our own way. But fortunately, the code is pretty well written and extensible, so we’ve made (many of) our own custom modifications, and it’s been pretty stable as Arcanoria Revelations’ data switchboard and server manager/dispatcher.
With the help of MSF, we’ve been able to create our master server, client application, and zone server applications. They all seem to be running well in our development environment, which uses a virtual server running Ubuntu Linux, and Windows 10 for the clients.