当前位置: 首页 > 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><!-- 简单表格、多层表头、页码、没有合并列行…...

StructBERT文本相似度模型Java开发实战:SpringBoot集成与API调用

StructBERT文本相似度模型Java开发实战&#xff1a;SpringBoot集成与API调用 你是不是也遇到过这样的场景&#xff1f;用户搜索“苹果手机”&#xff0c;你希望系统不仅能返回iPhone&#xff0c;还能识别出“苹果公司手机”、“Apple iPhone”这些同义查询。或者&#xff0c;在…...

2026 年提词器 App 的新方向:AI 改稿 + 语速匹配,正在重新定义“读稿“这件事

核心结论&#xff1a;2026 年提词器 App 已经从"滚字幕"进化到"懂你怎么说"。AI 语速匹配、智能跟读、违禁词检测正在成为新标配&#xff0c;而在综合体验上&#xff0c;拍摄提词器是目前把这些能力整合得最完整的一款产品。一、提词器 App 正在经历一次代…...

从“看见光点”到“看懂世界”:视觉重建让这个世界变得更近一些

三十多年前&#xff0c;“让盲人重新看见”更像一句带有未来感的科学想象。而今天&#xff0c;这件事已经进入临床试验和真实的人体研究。视觉重建之所以被视为脑机接口里最具挑战性的方向之一&#xff0c;不只是因为它要解决“能不能刺激大脑”的问题&#xff0c;更因为它要回…...

AI中混淆矩阵及其核心评估指标案例

AI中混淆矩阵及其核心评估指标案例...

新手入门服务器:用快马生成你的第一个xshell等效连接程序

作为一个刚接触服务器运维的新手&#xff0c;第一次使用xshell这类工具时&#xff0c;面对各种专业术语和复杂操作确实容易一头雾水。最近我发现用InsCode(快马)平台生成学习项目特别适合入门&#xff0c;今天就分享一下如何通过可运行的代码实例来理解SSH连接的核心概念。 理解…...

别再只会用AT指令了!用GD32F103驱动ESP8266实现MQTT连接阿里云(附完整源码)

从AT指令到MQTT协议&#xff1a;GD32F103ESP8266直连阿里云物联网平台实战 在物联网设备开发中&#xff0c;ESP8266作为性价比极高的Wi-Fi模块&#xff0c;常被用于实现设备联网功能。大多数开发者对它的认知停留在AT指令操作层面&#xff0c;通过串口发送简单的AT命令实现TCP连…...

Mermaid Live Editor终极指南:10个团队协作和项目管理的实用技巧

Mermaid Live Editor终极指南&#xff1a;10个团队协作和项目管理的实用技巧 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-l…...

快马ai一键生成:windows 11自动化部署openclaw环境原型脚本

最近在折腾Windows 11的开发环境配置&#xff0c;发现每次换新机器都要重复安装一堆工具链特别麻烦。正好发现了OpenClaw这个开源工具&#xff0c;它号称能自动化搞定开发环境部署。不过手动安装配置还是有点繁琐&#xff0c;于是我用InsCode(快马)平台快速生成了一个自动化安装…...

FastAPI日志配置终极指南:10个简单步骤实现生产级日志管理

FastAPI日志配置终极指南&#xff1a;10个简单步骤实现生产级日志管理 【免费下载链接】fastapi FastAPI framework, high performance, easy to learn, fast to code, ready for production 项目地址: https://gitcode.com/GitHub_Trending/fa/fastapi FastAPI作为现代…...

英特尔 BOT 优化 Geekbench 6:性能提升背后的争议与影响

【导语&#xff1a;英特尔的二进制优化工具&#xff08;BOT&#xff09;引发关注&#xff0c;它能修改可执行文件指令序列提升性能&#xff0c;但仅与少数应用配合。研究人员对其在 Geekbench 6 上的表现进行测试&#xff0c;结果引发对基准测试公平性的思考。】启动开销&#…...