Backend Assignment for Full-Time Role: Real-Time
System Monitoring with Server-Client
Architecture
Objective
Build a real-time distributed monitoring system comprising a Server and 10 Clients (5
instances of Client-1 and 5 instances of Client-2), communicating via a lightweight message
queue. The system should stream resource usage statistics (process-level) and display them in
a basic UI.
Languages/Tech-Stack:
1. Use high-performing language- Rust/C++/Java
System Architecture
Client Application
You’ll implement two types of clients, each with 5 running instances:
● Client Type 1 (Top Stats Client)
○ Collect and send top 10 processes sorted by CPU usage every few seconds.
● Client Type 2 (Bottom Stats Client)
○ Collect and send bottom 10 processes sorted by CPU usage every few seconds.
Each record sent should include:
● PID (Process ID)
● % CPU usage
● % Memory usage
Note: Real-time updates are expected (e.g., every 2–5 seconds).
Server Application
Your server must:
● Ingest real-time client data via a lightweight message queue (e.g., NATS, MQTT, Redis
Pub/Sub, etc.).
● Store only the latest 30 minutes of data for each client (memory or database is fine).
● Provide a basic UI (can be plain HTML/CSS) that:
○ Allows selecting any client out of the 10 instances created
○ Displays a tabular view of data (PID, CPU, Memory) based on the chosen client
instance.
Note: UI/UX design is NOT a focus. The goal is clear data depiction.
Communication Protocol
● Use a lightweight messaging system (e.g., MQTT, NATS, Redis Streams, or similar).
● The design should be scalable and loosely coupled.
Bonus Points
● You'll earn extra credit if the server and client(s) run on different systems or containers.
Time & Deadline
● Estimated time: EOD, Saturday, 14th June (Sooner the better).
● Send us a 20-second recording or host your app and share the link.
● Don't share the code.
Tip for the Interview
● Usage of GenAI tools or vibe-coding is fine.
● But please understand the code and be ready to modify a few things during the
interview.