A scalable microservice application using Spring Cloud targeting athletes by tracking their location during their workout in real-time allowing them to participate together along with others at the same area within a distance limit.
The application has automatic service discovery mechanisms (Netflix Eureka), self-healing in case of failure with Circuit Breakers (Hystrix), Docker container instance scaling, auto-restarting capability.
The presentation layer consists of rest-endpoints and websockets using Stomp.
Services communicate internally through message-queues (RabbitMQ) by propagating messages from one to another.
Data is stored in two types of NoSQL databases, MongoDB for client data and Redis for user geolocation and geospatial queries.
Finally, there is a monitoring system behind collecting metrics and events with ELK stack (Elastic, Logstash, Kibana).
Service |
port |
Config |
8888 |
Registry |
8761 |
Auth |
3000 |
Gateway |
80 |
Profile |
1000 |
Match |
2000 |
Monitoring (Hystrix Dashboard) |
8080 |
Tracing |
9411 |
RabbitMQ Management |
5672 |
Logging (Kibana) |
5601 |
HTTP Method |
URI |
Protected |
GET |
/{name} |
No |
GET |
/me |
Yes |
PUT |
/me |
Yes |
POST |
/me/routes |
Yes |
PUT |
/me/routes |
Yes |
POST |
/me/records |
Yes |
PUT |
/me/records |
Yes |
POST |
/ |
No |
HTTP Method |
URI |
Protected |
POST |
/ |
No |
GET |
/me |
Yes |
Websocket |
URI |
Publish |
/track/{username} |
Publish |
/request/{username} |
Subscribe |
/around/{username} |
Subscribe |
/topic/requests/{username} |
Subscribe |
/around/me |