在线负载判题系统

该平台支持用户登录注册,提供多种题目进行在线编程。代码在服务器端通过编译和运行进行判断,利用MySQL存储数据,Redis缓存用户信息。采用ZeroMQ实现RPC通信,利用一致性哈希实现负载均衡,同时防止缓存穿透。服务器端采用MVC架构设计。
摘要由CSDN通过智能技术生成

综述

这个项目可以让用户可以在平台上进行做题和判题。用户可以通过登录和注册功能方便地使用平台。平台提供了多道题目供用户选择,也可以自己导入,并且可以直接在网页上进行代码的编写和编辑。当用户完成编写后,平台可以对代码进行编译和运行,并实时返回运行结果,让用户可以直接查看和分析自己的代码运行情况。

在这里插入图片描述

依赖

  1. MySQL
  2. Redis
  3. cpp-http
  4. Redis
  5. ZeroMQ
  6. jsoncpp
  7. boost标准库
  8. ctemplate

安装

git clone git@github.com:zevin02/OnlineJudge.git
cd OnlineJudge
make

文件架构

  • comm
    存放的就是公共模块
    在这里插入图片描述
  • oj_server
    存放oj_server端代码
    • www_root
      在这里插入图片描述
    • src
      在这里插入图片描述
  • compile_server
    存放compile_server端代码
    在这里插入图片描述

示例

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

请添加图片描述

请添加图片描述

请添加图片描述

编译服务器

请添加图片描述

  • 在线服务器将用户需要进行判断的代码通过RPC交给后端的判题服务器
  • 判题服务器将获得的代码交给 compiler_runner类,来执行代码的编译和运行的功能
  • compile_runner 分别将代码先交给 compile类,进行代码的编译,生成一个可执行文件
  • compile_runner再将生成的可执行文件交给 runner类,来进行代码的运行,并将结果通过 重定向生成 临时文件的方式层层递进,同时服务器也会生成相应的 日志,反馈给用户

使用层状结构,实现代码之间的 解耦低耦合,高类聚

判题服务器一经上线,就会发出 http请求申请加入到一致性hash类的机器中,供在线服务器进行选择,实现 负载均衡

在线服务器

  1. 获得首页的首页
  2. 获得网页的题目列表
  3. 用户的登陆,注册,题库的增删改查
  4. 题目的编译运行

在线服务器使用了 MVC架构
请添加图片描述

请求服务的编译运行功能就需要用到 负载均衡模块

请添加图片描述
使用一致性hash算法来实现负载均衡的选择(添加虚拟节点,解决请求分布不均匀的问题)

数据库

MySQL图表

提前加载进可供选择的后端编译机器

ipport

题目信息

题号标题难度题目表述显示给用户的函数测试样例cpu的时间限制内存限制

用户

用户名密码

Redis

使用HASH来缓存注册用户信息
key:user:username

filedvalue
username
password

同时使用布隆过滤器将注册过的用户数据缓存起来,避免Redis缓存穿透

RPC

使用C++14基于ZeroMQ实现的一个RPC框架
Buffer类:字符数组,存储网络发送有效的数据
Serializer类:将用户的数据进行一个序列化,符合计算机的字节序列
rpc类:实现客户端和服务器的通信功能

使用map来将用户需要执行的函数名(string)和对应的函数(function)进行绑定

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zevin~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值