Baseline

Architecture

JAlgoArena is complex microservice based platform which focuses on high availability and performance.

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

Component Diagram

  1. Publish submission to Kafka.
  2. Save new submission (JAlgoArena-Submissions) & start judge process (JAlgoArena-Judge)
    1. Request submissions refresh via WebSocket subscriptions (JAlgoArena-Submissions)
  3. Publish submission result
  4. Store submission and ranking result (the second only if submission is accepted)
  5. 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