2.9 KiB
Architecture and Technologies
Technologies Used
PostgreSQL
PostgreSQL was selected as the primary database for its reliability, ACID compliance, and advanced features like JSONB support, which are useful for handling semi-structured data.
Redis
Redis is used for caching and session management due to its in-memory data store capabilities, which provide extremely low-latency data access.
MinIO
MinIO serves as the object storage solution, offering S3-compatible APIs. It is lightweight, performant, and ideal for storing large amounts of unstructured data.
Docker and Docker Compose
Docker is used to containerize the application, ensuring consistency across development and production environments. Docker Compose simplifies the orchestration of multiple services during development.
Nginx
Nginx is used as a reverse proxy and load balancer to distribute traffic efficiently and ensure high availability.
Makefile
The Makefile is used to automate common tasks such as building, testing, and running the application, improving developer productivity.
Services Architecture
Auth Service
- Responsibilities: Handles user authentication and authorization.
- Endpoints: Defined in
auth.proto.
User Service
- Responsibilities: Manages user profiles and related data.
- Endpoints: Defined in
user.proto.
Competition Service
- Responsibilities: Manages competitions, including creation, updates, and participant management.
- Endpoints: Defined in
competition.proto.
Task Service
- Responsibilities: Handles tasks within competitions, including creation and updates.
- Endpoints: Defined in
task.proto.
Submission Service
- Responsibilities: Handles submissions made by users for tasks.
- Endpoints: Defined in
submission.proto. - Additional Logic: Sends messages to Kafka for downstream processing.
Checker Adapter Service
- Responsibilities: Processes new submissions by running checks and validations.
- Additional Logic:
- Reads new submission messages from Kafka.
- Runs Kubernetes pods to execute the checker logic.
- Retrieves results and updates the database.
Results Service
- Responsibilities: Manages and retrieves results for tasks and competitions.
- Endpoints: Defined in
results.proto.
Review Service
- Responsibilities: Handles reviews for submissions.
- Endpoints: Defined in
review.proto.
Achievements Service
- Responsibilities: Manages user achievements and badges.
- Endpoints: Defined in
achievements.proto.
Communication and Workflow
- Kafka: Acts as the message broker for asynchronous communication between the
Submission Serviceand theChecker Adapter Service. - Kubernetes: Used by the
Checker Adapter Serviceto dynamically run pods for executing submission checks. - PostgreSQL: Centralized database for storing results and other persistent data.