⚖️
Distributed Infrastructure

Online Coding Judge

Sandboxing Aur Fair Queueing
💡 Coding judge EK EXAM HALL hai jahan har candidate ka apna sealed kamra hai. Wo kamre mein kuch bhi likhe, par na baahar dekh sakta hai, na doosre ka kamra chhoo sakta hai, aur time khatam hone par copy zabardasti le li jaati hai.

Sabse critical requirement SECURITY hai — tum ANJAAN code chala rahe ho. Har submission isolated sandbox mein chalta hai (container ya gVisor/Firecracker microVM) jisme NO NETWORK, read-only filesystem, aur strict CPU/memory/time limits hon. Ye pehli cheez hai jo bolni chahiye.

Architecture async hai: submission queue mein jaati hai, judge workers uthaate hain, test cases chalate hain, result wapas aata hai. Contest ke waqt burst aata hai (10,000 submissions ek minute mein), isliye worker pool autoscale karna padta hai aur FAIR QUEUEING chahiye — ek user 100 submissions daalkar baaki sabko block na kar de.

Submit → Queue (priority: contest > practice)
       → Judge worker
           ├─ container spawn (no network, read-only FS)
           ├─ compile (timeout 10s)
           ├─ har test case chalao (CPU/memory/time limit)
           └─ container destroy (state kabhi reuse nahi)
       → result → WebSocket se user tak

// Fair queueing: per-user concurrent limit, warna ek user queue bhar dega
⚖️
Coding judge EK EXAM HALL hai jahan har candidate ka apna sealed kamra hai. Wo kamre mein kuch bhi likhe, par na baahar dekh sakta hai, na doosre ka kamra chhoo sakta hai, aur time khatam hone par copy zabardasti le li jaati hai.
1 / 2
⚡ Quick Recap
  • Sandbox pehli priority — no network, read-only FS, hard limits
  • Async queue + autoscaling workers, contest burst ke liye
  • Fair queueing se ek user poori queue nahi bhar sakta
Is page mein (2 subtopics)

Har submission par hard limits chahiye: CPU time (wall clock nahi — sleep se cheat na ho), memory, process count (fork bomb roko), output size (disk bharne se roko), aur file descriptors.

Container ke andar bhi network band karo — warna submission bahar se answers fetch kar sakta hai. Aur system calls ko seccomp se filter karo. Ye layered defence hai, ek hi mechanism par bharosa mat karo.

// Wall clock nahi, CPU time — sleep() se cheat nahi ho sakta
cpu_time_limit  = 2s
memory_limit    = 256 MB
process_limit   = 32          // fork bomb
output_limit    = 10 MB
network         = none
syscalls        = seccomp allowlist

Test cases blob storage mein rehte hain aur judge worker unhe cache karta hai — har submission par download karna slow aur mehnga hai. Popular problems ke test cases worker par pehle se warm rehte hain.

Partial scoring ke liye test cases groups mein baante jaate hain, har group ke apne points. Pehla failing group milte hi baaki chhodna optional hai — contests mein aksar jaldi fail karke resources bachaye jaate hain.

💡Tip: Contest ke waqt result turant chahiye, practice mein thoda late chalega. Isliye priority queue rakho — contest submissions pehle. Ye simple decision user experience bahut behtar karta hai.