Intro
JAlgoArena conducts many parts, which can be divided to:
- Node.JS hosted Web UI
- Traefik as Edge Service
- Nomad as scheduler
- Consul for Service Discovery
- Apache Kafka used for messaging internally in the backend
- Elastic Stack for capturing distributed logs
- Cockroach DB for highly available data storage
- JAlgoArena microservices delivering core features
Diagram
- Publish submission to Kafka.
- Save new submission (JAlgoArena-Submissions) & start judge process (JAlgoArena-Judge)
- Request submissions refresh via WebSocket subscriptions (JAlgoArena-Submissions)
- Publish submission result
- Store submission and ranking result (the second only if submission is accepted)
- Request ranking & submissions refresh via WebSocket subscriptions
Components
JAlgoArena microservices:
- JAlgoArena UI - host UI components, runs reverse proxy using Service Discovery for resolving edge service
- JAlgoArena Auth - microservice responsible for authentication and storing users data
- JAlgoArena Queue - microservice serving queue for incoming submissions, publishing them to Apache Kafka
- JAlgoArena Submissions - microservice storing all submissions and serving data based on collected data
- JAlgoArena Judge - main microservice responsible for judging incoming submissions
- JAlgoArena Ranking - microservice focused on building ranking from successful submissions (ranking storage)
- JAlgoArena Events - microservice responsible for publishing events about submissions or ranking refreshes