查看: 1903| 回复: 0
跳转到指定楼层
上一主题 下一主题
收起左侧

[经验总结] hackercup online competition - Virtual offsite

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x

"""

    Hacker cup competition (Online coding judge system)
    * registered users
    * contest has a start time and end time. (2-3 hrs)
    * upon start, users get access to a certain # of problems (10)
    * users submit a source code for a problem, in any order
    * system validates the code and either accepts it or rejects it.
    * ranking or a leaderboard.'

"""

- Requirments:
Registrations (V2):
  register users (across globe) for a competitions (some previous... few current competitions)
  online coding competition
Competition:
  problems + test cases + critieria (memory/time etc) --> score
   
  
  non-functional requirements:
    - isolation
    - scalability
    - highly available
    - durability
   
   
estimation:
  - 1M users
  
  storage:
    10MB * 1M --> 10GB
   
  Bandwidth:
    1GB/sec
   
     
APIs
  GET /problems
  
  GET /problems/{problemId}
      {  
        description:
        case1:
        case2:
      }
  
  POST /submit
   
  /GET /leaderboard
  
  -- users
  -- registration


Datamodel:

problems
  - problemid
  - competitionId
  - descritpion

users
  - userid
  - name
  - contact
  
testcases
  - problemId
  - testcaseid
  - input
  - output

usersubmissions
  - userid
  - problemid
  - code (BLOB) --> NoSQL
  - status
  - result
  - memory
  - time
  -> submitted
  
testcaseResults
  - problemId
  - testcaseid
  - output
  - memory
  - time
  
SQL
  --> ACID
  --> meets our scaling requirements
So choosing SQL instead of NoSQL
  
  --> master-master for high availablility


backend components
- listservice --> storage
   
- submitservice  --> storage
    stores the code
    calls evaluateService
   
- EvaluateSystemManager --> run the code against test cases
      manages submissions
    --> executors
          --> heartbeat
          --> asks for a job
          --> executes a job

How does browser get notifications:
browser --> calling service (AJAX)
  
  option1:
    polling:
  
    serverpush:
      
    websocket:
      
Assuming that coders are submitting code in java
  lang: java
  
  
Submit:
  code
    --> store code with status: NOT_STARTED

   
   EvaluateSystemManager
      --> 1 master (passive)
      --> continously usersubmissions (look for NOT_STARTED) --> RUNNING --> COMPLETED
      --> in-memory QUEUE
      --> sends a msg to executor --> user-id, code, problem-id
      
      --> list of nodes available to run --> SQL
      --> maintain status of nodes  --> SQL
            
  Executor
    connection to SystemManager
    --> process--> heartbeat & status code --> EvaluateSystemManager
    --> spins up a process
        generate code
          submitted-code
        TEMPLATE-code
          generate class
          run-it
           
        --> output --> communicates to SQL --> saves the data
      
        --> event to compute
        
        
     
Leaderboard
  --> users --> submitted
  
  sort 'usersubmissions' by submited_time, cputime, memory asc
    --> top 100 users in board
   
    rank
      --> gets stats of a particular user
      --> get how many users ahead curr-user stats
      

  leaderboard
    --> uses websocket to update leaderboard
Feedback: need not be a web socket and results can be shown in eventual consistent manner. On very submission of code, leaderboard can change. it is compute intensitive to compute leaderboard for every submissions. Instead, this can be updated periodically.

上一篇:油管频道System Design Interview的整理资料
下一篇:I have an upcoming E6 facebook interview
您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表