How to horizontally scale a mobile-game server on Heroku?

My game is getting bigger and I already notice some spikes and memory/RPM overloads on the server, which is running on Heroku‘s Hobby plan (dyno for 7$ , Postgres for 9$ ).

The server is a Spring app, containing ~50 endpoints, Postgres database, managing users etc, providing leaderboards, teams, highscores…

The structure:

  • Endpoints are REST mappings inside Spring
  • Endpoints usually look like:

    @RequestMapping(value = API_HIGHSCORES_WORLD_TOP_50, method = RequestMethod.GET, produces = "application/json") public UserList getWorldHighscores() {      List<BackendUser> list = userRepository.findTopUsers(50);     return new UserList(StatusCode.SUCCESS, list);  } 

So as you can see, it’s just a basic service asking the database directly. Inserting the data is the same as retrieval: webservice->database. When users are displaying the highscores on their phones, they invoke the above enpoint and retrieve the data (which usually takes 5-50 ms).

My question

Is horizontal scaling a good approach for this kind of service? If not, how should I rewrite it? Should I separate api calls from database service? What would be the point of that? They can’t be async.

I don’t have any external resources that I should create specifical worker dynos for. So I assume everything can be running on web-dynos, as long if they’re database calls. Is this correct?