Sorry for the delay in response to your question.
With regards to your MatchMaking question, I believe you will be fully able to utilize GameSparks for your MatchMaking needs.
An ELO system would have to be implemented off of your own custom logic, one way this could be achieved with GameSparks would be off the back of our ChallengeWon and ChallengeLost Messages, by adjusting the players ELO from Games won/lost and setting the ELO on the players scriptData. A good tutorial on adjusting a players rank through these messages can be found in the Initialization and Ranking part of our Heartstone Example tutorial here.
For matching a group of players with others, you could utilise our Teams functionality. You can put a team into a state of matchmaking with a createPendingMatch in Cloud Code, this is essentially like sending a MatchMakingRequest but for a groups of players. Next, while using the same Match settings, have your random players send a MatchMakingRequest to join the PendingMatch created by your team of 3 players etc.
In terms of your Real-Time question, our RT servers will automatically create new instances based on need, and retire them when everyone leaves, you can add this by default. The RT service will also match by region first so you don't need to worry about that either. You can learn more about our RT Services here.
I'm looking into using GameSparks for my game. My game is a competitive game that each game is a 5v5 team match. Matchmaking will use an elo scoring system. I'm allowing players to queue up solo, or create teams of 2-5 players. Ideally, I would have a team of 5 match up with another team of 5 with similar skill levels. A team of 3/2 players would ideally have another team of 3/2 join them + 1-2 randoms, if within the same skill gap, defaulting to filling first available people if the wait time is too long. And, of course, always matchmaking players within a geographic region. Then once a match is made, it load balances the teams onto an open game server. If the game servers are getting near full capacity, there needs to be a new AWS instance spun up.
Can Gamesparks take care of this? What is the best approach? Or am I on my own to create my own custom matchmaker/load balancer and just use GameSparks as a key/value store?