I am implementing some kind of web application that has
basic social network functionality and browser text game. I do it basically for myself only in order to learn couple of things. (like using websockets and full-stack development)
So the architecture I came up with looks like this
Generally my web pages consist of
- static resources that I provide with the deployment unit (inside
- external resources that I decided not store inside war (for it to have small size) like music, images, spreadsheet. I keep them on cloud storages like
- static resources like game data - quest information, skill descriptions etc. that I stored in
Brief description of services
- Core Application is the main endpoint where user have access and spend most of his time
- Authentication Service (I currently design this one) is just a service that supposed to provide authorization tokens (because generally I want to support authentication - it is a web site after all - from Google or Facebook etc.). It uses relational database to store user logins, roles, permissions.
- Resource Managing Service is a single entry point for all services to access the resources - basically I wanted to centralize access to all the resources
- Player Service accumulates player statistics (in relational database) and inter-player relationship (thus graph database)
- Rule Engine Service is responsible for evaluating player data against spreadsheet that contains game rules (how the player is leveling etc.).
I am planning to introduce some communication module that would allow players to chat but there is a long way to go until then.
As I have a tendency to over-engineering, I decided to ask a question: Did I over-engineer or not? Also I am not sure whether I need middleware like AMQP or JMS. I presume it is a must for such applications.
My problem is that I want to use everything for free as it does not have big scale - so I have to come up with some workarounds for storing resources and environment. I use
heroku to deploy my application and so I use add-ons for it like
coralogix. (maybe I will switch to
So could anybody evaluate my architecture?