当前位置: 首页 > news >正文

【项目设计】基于负载均衡的在线oj平台

目录

一、项目介绍

二、开发环境以及技术

三、概要设计

四、关键算法

五、项目演示

六、代码实现


一、项目介绍

该项目是基于负载均衡的在线oj,模拟平时刷题网站(leetcode和牛客)写的一个在线判题系统

项目主要分为五个模块:

  • 编译运行模块:基于httplib库搭建的代码处理服务器,对用户提交的代码进行测试
  • 业务逻辑模块:基于httplib库并结合MVC模式框架搭建oj服务器,负责题目获取,网页渲染以及负载均衡地将用户提交代码发送给代码处理服务器进行处理
  • 数据管理模块:基于MySQL数据库对用户的数据、题目数据进行管理
  • 会话模块:基于cookie和session针对登录用户创建唯一的会话ID,通过cookie返回给浏览器
  • 公共模块:包含整个项目需要用到的第三方库以及自行编写的工具类的函数

二、开发环境以及技术

开发环境:

  • 轻量应用服务器(CentOS7.6)、gcc/g++、VsCode、MySQL Workbench、Postman、Xshell 7

主要技术:

  • C++ STL标准库
  • C++ Boost准标准库
  • cpp-httplib第三方开源网络库
  • jsoncpp第三方开源序列化、反序列化库
  • ctemplate第三方开源前端网页渲染库
  • MVC模式框架
  • 负载均衡设计
  • html、css、js、jquery、ajax
  • MySQL C Connect

三、概要设计

本项目将代码处理功能与主体功能进行解耦,分别实现了代码处理服务器与主服务器,从而减小各个服务器压力。服务器集群与浏览器之间属于BS架构,以剖析的角度看待,代码处理服务器集群与主服务器之间则属于CS架构(可将主服务器看作为代码处理服务器的客户端)

主服务器功能较为复杂,采用MVC模式框架,Model模型层负责与数据库层进行交互,View视图层处理对网页资源的渲染,Controler控制器负责各个模块之间统筹交互。主服务器并非反向代理服务器(还具有分发外的其他功能),但起到反向代理的功能,通过负载均衡模块与代码处理服务器集群进行网络交互

代码处理服务器相较于主服务器更加轻量,主要有编译、运行两大功能,不与浏览器进行直接交互,将编译、运行过程中产生的所有数据交付主服务器进行处理

四、关键算法

主服务器向代码处理服务器发送请求时采用最小连接数法

最小连接数算法较为灵活和智能,由于后端服务器的配置不尽相同,对于请求的处理有快有慢,该算法根据后端服务器当前的连接情况,动态地选取其中当前负载连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器

用户登录后采用MD5算法形成SessionID,从而实现免登录功能

无论多长的字符串,计算出的MD5值都是固定长度(16字节版本或者32字节版本)。源字符串只要改变一点,最终得到的MD5值会差别很大。通过源字符串生成MD5很容易,但是通过MD5还原成原串理论上是不可能的,使得私密性更强

五、项目演示

普通用户登录界面

登录成功后,获得主界面

 服务器返回的Session Id保存在浏览器的Cookie文件中

 

题目列表

单个题目

提交代码会发生的情况

求职列表 

单个职位

管理员账号登录界面

登录成功后进入管理员界面

进入录题模块,进行题目录入

进入岗位模块,进行岗位录入

六、代码实现

GG-Bruse/Load_balancing_OJ: This is a load balanced online programming evaluation platform project written in C++ language (github.com)https://github.com/GG-Bruse/Load_balancing_OJ

相关文章:

【项目设计】基于负载均衡的在线oj平台

目录 一、项目介绍 二、开发环境以及技术 三、概要设计 四、关键算法 五、项目演示 六、代码实现 一、项目介绍 该项目是基于负载均衡的在线oj,模拟平时刷题网站(leetcode和牛客)写的一个在线判题系统 项目主要分为五个模块&#xff…...

生产环境Session解决方案、Session服务器之Redis

目录 一、服务器配置 二、安装nginx 三、安装配置Tomcat: 四、配置session Session服务器之Redis Redis与Memcached的区别 安装部署redis 一、服务器配置 IP地址 主机名 软件包列表 192.168.100.131 huyang1 nginx 192.168.100.133 huyang3 JDK Tomca…...

SPECjvm2008_1_01 openjdk8 x86_64 ARM64 运行时长、成绩 Run is valid, but not compliant

i5-9600k 架构: x86_64CPU 运行模式: 32-bit, 64-bitAddress sizes: 39 bits physical, 48 bits virtual字节序: Little Endian CPU: 6在线 CPU 列表: …...

安卓:百度地图开发(超详细)

一、百度地图介绍 百度地图SDK是一套供开发者使用的软件开发工具包(SDK),用于在Android应用程序中集成和使用百度地图功能。通过使用百度地图SDK,开发者可以实现在自己的应用中显示地图、获取定位信息、进行搜索、导航等功能。 百…...

DDSv1.4规范(中文版)

实时数据分发 (DDS) V1.4 (2015-04-10正式发布) https://www.omg.org/spec/DDS/1.4/PDF http://www.omg.org/spec/DDS/20140501/dds_dcps.idl...

oracle,获取每日24*60,所有分钟数

前言: 为规范用户的时间录入,因此我们采用下拉的方式,让用户选择需要的时间,因此我们需要将一天24小时的时间拆分为类似00:00,00:01...23:00,23:01,23:59。因此我们需要生成24*601440行的下拉复选值。具体效果如下图所示。 思路 1…...

vue elementui table去掉滚动条与实现表格自动滚动且无滚动条

当table内容列过多时,可通过height属性设置table高度以固定table高度、固定表头,使table内容可以滚动。 现在需求是右侧滚动条不好看,需要去除滚动条,并隐藏滚动条所占列的位置。让他可以滚动但是不出现滚动条,不然即时隐藏了滚动…...

SDK命令行工具配置

SDK命令行工具配置 最早的Android SDK工具包,包含一些GUI的工具。 而在一些场景(如打包)只需要命令行工具时,下载 command-line tools 即可。 到 Android Studio下载页 ,找到 Command line tools only 下载。 命令…...

【数字IC基础】竞争与冒险

竞争-冒险 1. 基本概念2. 冒险的分类3. 静态冒险产生的判断4. 毛刺的消除使用同步电路使用格雷码增加滤波电容增加冗余项,消除逻辑冒险引入选通脉冲 1. 基本概念 示例一: 如上图所示的这个电路,使用了两个逻辑门,一个非门和一个与…...

速成版-带您一天学完python自动化测试(selenium)

Selenium是一套web网站的程序自动化操作解决方案。我们通过编写自动化程序,使得自动完成浏览器界面的相关操作,除了能够自动化的完成相关操作,还能从web页面获取相关信息,然后通过程序进行分析处理,本质上就是提升从网…...

windows 删除无法删除的文件

有两种原因: 文件被占用文件无权限 解决方案 通用解决方案是进入安全模式进行删除 安全模式: 不会启动非必要的进程有最高的系统权限 进入系统配置 安全引导,重启 删除文件 修改系统配置为正常启动 重启...

FFmpeg[7] - FFmpeg之预设编码参数preset

目录 前言 正文 一、定义与作用 二、取值范围 三、枚举值 四、使用实例...

CVPR2023新作:3D视频物体检测

Title: 3D Video Object Detection With Learnable Object-Centric Global Optimization Affiliation: 中国科学院自动化研究所 (Institute of Automation, Chinese Academy of Sciences),中国科学院大学人工智能学院 (School of Artificial Intelligence, Univers…...

Keepalived热备、Keepalived+LVS、HAProxy监控及后端服务器健康检查、负载均衡调度器对比

day02 day02KeepAlived高可用集群配置高可用的web集群监控本机80端口,实现主备切换实现原理实施配置高可用、负载均衡的web集群配置高可用、负载均衡HAProxy配置haproxy负载均衡调度器比较LVS(Linux Virtual Server)NginxHAProxy KeepAlive…...

用Vue开发仿旅游站webapp项目总结 (上)

写着写着发现会写不少内容... 全部写在一篇文章里感觉太多了不方便看,所以分为上下篇吧... 下篇写完啦,感兴趣的朋友可以继续关注~ > 用Vue开发仿旅游站webapp项目总结 (下) 温馨提示 此文章,仅是做完项目后的个人…...

【Koa】[NoSQL] Koa中相关介绍和使用Redis MongoDB增删改查

目录 NoSQL非关系型数据库关系型数据库(RMDB)介绍非关系型数据库(NoSQL)介绍Redis & MongoDB 在 Koa 中使用 Redis (了解)Redis 的安装和使用在 Koa 中连接 和 调用 Redis 在 Koa 中使用 MongoDBMongoDB 的安装MongoShell 操作…...

【JS 阻止滑动穿透】

在实现阻止滑动穿透时,可以使用以下方法之一: 使用 CSS 属性 overflow: hidden 来禁止页面滚动。 body {overflow: hidden; }使用 JavaScript 监听滚动事件并阻止默认行为。 document.addEventListener(touchmove, function(e) {e.preventDefault(); …...

编译原理

目录 一,基本概念 二,词法分析 三,自上而下推导 一,基本概念 二,词法分析 三,自上而下推导...

项目播报 | 新基德携手璞华易研PLM,打造企业新一代研发管理平台

近日,“新基德PLM(Product Lifecycle Management,产品生命周期管理)项目”在新基德(深圳)电子有限公司(以下简称:新基德)正式启动。新基德是一家集手机研发、生产、销售、…...

elementui el-table 封装表格

ps: 1.3版本 案例&#xff1a; 完整代码&#xff1a; 可直接复制粘贴&#xff0c;但一定要全看完&#xff01; v-slot"scopeRows" 是vue3的写法&#xff1b; vue2是 slot-scope"scope" <template><!-- 简单表格、多层表头、页码、没有合并列行…...

集合--collections

一、collections概述 Collections和Arrays、Objects-一样&#xff0c;都是一种针对性的工具类, Arrays是针对数组&#xff0c;Objects是针对Object, 而Colections则是针对集合的一种工具类&#xff0c;里面提供了大量的方便我们操作集合的方法: //往集合中添加一些元素。 p…...

go使用gin结合jwt做登录功能

1、安装gin go get -u github.com/gin-gonic/gin 2、安装session go get github.com/gin-contrib/sessions 3、安装JWT鉴权 go get "github.com/golang-jwt/jwt/v4" 4、创建一个jwt的工具文件 package utilsimport ("errors""github.com/golan…...

【C++】开源:Boost网络库Asio配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍Asio网络库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次…...

图像滤波器

图像噪声 • 图像噪声是图像在获取或是传输过程中受到随机信号干扰&#xff0c;妨碍人们对图像理解及分析处理 的信号。 • 图像噪声的产生来自图像获取中的环境条件和传感元器件自身的质量&#xff0c;图像在传输过程中产 生图像噪声的主要因素是所用的传输信道受到了噪声…...

【每日一题】2569. 更新数组后处理求和查询

【每日一题】2569. 更新数组后处理求和查询 2569. 更新数组后处理求和查询题目描述解题思路 2569. 更新数组后处理求和查询 题目描述 给你两个下标从 0 开始的数组 nums1 和 nums2 &#xff0c;和一个二维数组 queries 表示一些操作。总共有 3 种类型的操作&#xff1a; 操作…...

PLC的高端版本通常具有以下特点:

高速处理能力&#xff1a;高端PLC通常具有更快的处理速度和更高的运行频率&#xff0c;可以处理更复杂的控制逻辑和更多的输入/输出信号。 大容量存储&#xff1a;高端PLC通常具有更大的存储容量&#xff0c;可以保存更多的程序和数据&#xff0c;以满足更复杂的应用需求。 多种…...

Scrum敏捷开发项目管理和产品研发管理培训- Leangoo领歌

Scrum是目前运用最为广泛的敏捷开发方法&#xff0c;是一个轻量级的项目管理和产品研发管理框架。 这是一个两天的实训课程&#xff0c;面向研发管理者、项目经理、产品经理、研发团队等&#xff0c;旨在帮助学员全面系统地学习Scrum和敏捷开发, 帮助企业快速启动敏捷实施。 …...

爬虫小白-如何辨别是否有cookie反爬案例

目录 一、Cookie介绍二、cookie生成来源区分查找三、如何判断是否有cookie反爬四、来自服务器生成的cookie反爬解决方法五、来自js生成的cookie反爬解决方法一、Cookie介绍 先推荐该篇文章简单了解Cookie、Session、Token、JWT1、cookie的类型:会话cookie和持久cookie;其唯一…...

机器人状态估计:robot_localization 功能包简介与安装

机器人状态估计&#xff1a;robot_localization 功能包简介与参数配置 前言功能包简介安装使用ubuntu软件源安装使用源码安装 前言 移动机器人的状态估计需要用到很多传感器&#xff0c;因为对单一的传感器来讲&#xff0c;都存在各自的优缺点&#xff0c;所以需要一种多传感器…...

RNN架构解析——GRU模型

目录 GRU模型实现优点和缺点 GRU模型 实现 优点和缺点...