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

news2025/1/19 8:13:09

目录

一、项目介绍

二、开发环境以及技术

三、概要设计

四、关键算法

五、项目演示

六、代码实现


一、项目介绍

该项目是基于负载均衡的在线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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/779580.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DevOps系列文章之 Git知识大全

refs和reflog Git的所有操作都基于提交:你会暂存提交,创建提交,查看过去的提交记录,或者使用很多很多Git命令在不同的仓库之间转移提交内容。这些命令中的很大一部分都会以某种形式来操作提交,其中很多还会以提交ID作…

结构型设计模式之代理模式【设计模式系列】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 设计模式系列 期待你的关注哦!!! 现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everythi…

【iOS】对象底层学习

学习博客:[iOS]-OC对象底层探索 1. 类与对象 1.1 类和对象的本质 1.1.1 对象 对象的本质是结构体。 interface TestPerson : NSObject {// 成员变量// publicNSString *_age; // 4个字节 } property (nonatomic, copy) NSString *name; // 属性endimplementati…

C程序环境及预处理

​​​​​文章目录 一、程序的翻译环境和执行环境 1.程序编译过程 2.编译内部原理 3.执行环境 二、程序运行前的预处理 1.预定义符号归纳 2.define定义标识符 3.define定义宏 4.define替换规则 5.宏和函数的对比 三、头文件被包含的方式 四、练习:写一…

F.interpolate 数组采样操作

功能:利用插值方法,对输入的张量数组进行上\下采样操作,换句话说就是科学合理地改变数组的尺寸大小,尽量保持数据完整。 在计算机视觉中,interpolate函数常用于图像的放大(即上采样操作)。比如在细粒度识别领域中&…

【C#】MVC页面常见的重定向方式和场景

本篇文章主要简单讲讲,C# MVC 页面常见跳转或者重定向的方式和场景。 在实际项目开发中,在一些特定场景肯定会用到重定向,比如:不同角色跳转到不同视图地址 目录 一、种常见重定向方式1.1、RedirectToAction1.2、RedirectToRoute1…

猿人学14题—备而后动-勿使有变

猿人学14题—备而后动-勿使有变 抓包分析大致流程 mz参数生成m的值定位&参数组成补环境首先简单处理下十六进制编码问题提示:ReferenceError: window is not defined提示:document is not defined提示:$ is not definedASN1 is not defin…

【探索人工智能】我与讯飞星火认知大模型的对话

文章目录 讯飞星火认知大模型的地址概要讯飞星火认知大模型的发展历程讯飞星火认知大模型的主页利用讯飞星火大模型解决一些基本的数学问题讯飞星火认知大模型与OpenAI,ChatGPT没有关系!让讯飞星火认知大模型编写传奇代码hello world小结 讯飞星火认知大模型的地址 …

chatgpt使用及辅助编程方面的体验

chatgpt使用及辅助编程方面的体验 文章目录 chatgpt使用及辅助编程方面的体验1 引言2 辅助编程体验2.1 辅助编写代码2.2 找出代码问题2.3 代码优化2.4 解释代码结束语 1 引言 最近几个月什么最火,那一定时chatgpt,虽然在国内使用存在各种限制,但是还是挡…

el-select和el-checkBox实现下拉菜单全选功能

el-select 和 el-checkbox 实现下拉菜单全选功能 示例代码&#xff1a; <el-selectpopper-class"select-container"v-model"ids"placeholder"请选择目标":multiple-limit"20"multiplefilterablecollapse-tagsclass"wd400&qu…

20230721 Essex UK, Dongbing Gu 公开讲座--机器人前沿

个人主页&#xff1a; https://www.essex.ac.uk/people/GUDON81301/dongbing-gu 机器人领域任务的特点&#xff1a;dull, dirty, dangerous tasks in remote spaces 机器鱼&#xff1a; 实时港口环境监测 机器鱼群探索算法 化学传感器 水面声呐定位系统/SLAM/通信问题 Robotic …

RocketMQ教程-安装和配置

Linux系统安装配置 64位操作系统&#xff0c;推荐 Linux/Unix/macOS 64位 JDK 1.8 Maven3.0 yum 安装jdk8 yum 安装maven 1.下载安装Apache RocketMQ RocketMQ 的安装包分为两种&#xff0c;二进制包和源码包。 点击这里 下载 Apache RocketMQ 5.1.3的源码包。你也可以从这…

网络安全 Day18-计算机网络知识03

计算机网络知识03 1. 路由器排查故障2. 设置和修改网关3. 设置修改DNS4. 私网地址5. VMware虚拟机NAT模式下上网原理6. DHCP工作原理 1. 路由器排查故障 排查网线&#xff0c;排查网卡&#xff0c;排查网卡的驱动查看网卡IP&#xff0c;没有配置IP、网关、DNS配置正确ping百度…

R语言贝叶斯METROPOLIS-HASTINGS GIBBS 吉布斯采样器估计变点指数分布分析泊松过程车站等待时间...

原文链接&#xff1a;http://tecdat.cn/?p26578 指数分布是泊松过程中事件之间时间的概率分布&#xff0c;因此它用于预测到下一个事件的等待时间&#xff0c;例如&#xff0c;您需要在公共汽车站等待的时间&#xff0c;直到下一班车到了&#xff08;点击文末“阅读原文”获取…

行为型模式 - 状态模式

概述 【例】通过按钮来控制一个电梯的状态&#xff0c;一个电梯有开门状态&#xff0c;关门状态&#xff0c;停止状态&#xff0c;运行状态。每一种状态改变&#xff0c;都有可能要根据其他状态来更新处理。例如&#xff0c;如果电梯门现在处于运行时状态&#xff0c;就不能进…

MySQL—事务

MySQL—事务 &#x1f50e;定义&#x1f50e;事务的特性原子性一致性持久性隔离性 &#x1f50e;并发执行事务可能产生的问题脏读不可重复读幻读总结 &#x1f50e;MySQL—事务的隔离级别 &#x1f50e;定义 事务的本质是将多条 SQL 语句打包成一个整体 要么全部成功, 要么全部…

html a标签换行显示

文章目录 用css display属性不用css&#xff0c;可以用<br>标签换行示例 用css display属性 可以使用CSS的display属性来实现多个a标签每行显示一个。 HTML代码&#xff1a; <div class"link-container"><a href"#">Link 1</a>…

# **基于TiDB Binlog架构的主备集群切换操作手册**

作者&#xff1a; Liuhaoao 原文来源&#xff1a; https://tidb.net/blog/dc65ef62 操作背景&#xff1a;最近手头有个系统&#xff0c;刚做完灾备建设及数据同步&#xff08; 文章链接在这 &#xff09;&#xff0c;需要进行灾备切换演练&#xff0c;验证灾备库建设是否…

HCIA静态路由综合实验(eNSP)

实验题目及要求&#xff1a; 1、分析IP地址分配。 主干IP掩码均为30&#xff1b; 环回IP掩码为28&#xff0c;方便汇总掩码27&#xff1b; 然后预留部分IP地址。 如下图&#xff1a; 2、按如上图片要求连接设备&#xff0c;并标记好IP分配信息&#xff0c;便于命令配置时一…

网页生成PDF表格诡异多出空白

环境&#xff1a; axios: 0.27.0 egg: 2.35.0 pdf-lib: 1.17.1 puppeteer-core: 17.1.3 node: 16.20.0 element-plus: 2.3.2 vue: 3.2.47 背景&#xff1a; 一个报告页面含有多个统计表格和描述文字&#xff0c;生成PDF用于下载查看&#xff0c;页面使用vue3element-plus…