Load-balanced-online-OJ-system 负载均衡的OJ系统项目

前言

那么这里博主先安利一些干货满满的专栏了!

首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。


本项目Github地址

- Load-balanced-online-OJ-system


Load-balanced-online-OJ-system

负载均衡OJ系统

这是一个负载均衡的OJ系统项目

代码的实现细节可见

1. 项目简介

实现类似leetcode的在线编程系统。

后台可以部署多台编译服务主机(cr主机),然后oj_server服务将通过算法将大量的提交请求负载均衡地部署到每台cr主机上。如果后台有cr主机挂掉了,oj_server也能正确识别。

架构如下。

2. 所用技术和开发环境

所用技术

C++STL、Boost准标准库、cpp-httplib第三方开源网络库、ctemplate第三方开源前端网页渲染库、jsoncpp第三方序列化反序列化库、负载均衡设计、分布式系统、多进程多线程控制、Mysql C Connect、Ace前端在前编辑器、html/css/js/jquery/ajax

开发环境

  • centos服务器
  • vscode

3. 项目运行展示

3.1 页面展示

主页。

题目列表(可继续增加题目)

答题界面。

答案/编译出现错误样例。

代码补全。

3.2 后端展示

编译服务后端。

oj服务后端。

瞬间多次提交,查看负载均衡情况。

可以看到oj_server是可以很好的实现负载均衡的,每一台后台主机都能得到请求。

4. 下载和运行方法

4.1 运行

克隆仓库。

bash 复制代码
git clone https://github.com/Yufccode/Load-balanced-online-OJ-system.git

进入仓库。

复制代码
cd Load-balanced-online-OJ-system

编译生成可执行。

bash 复制代码
make

此时在oj_server目录下和compile_server目录下已经分别有一个可执行了。

然后分别在三个命令行下启动compile_server,然后在第四个命令行下启动oj_server

bash 复制代码
# 三个命令行分别执行这三个
./compile_server 8081
./compile_server 8082
./compile_server 8083
bash 复制代码
./oj_server # 第四个命令行执行这个命令

在浏览器浏览访问8080端口即可。

如果是云服务器记得放开防火墙,否则也无法访问。

4.2 增加/调整cr服务的主机或把cr服务部署到远端

现在默认是三台cr服务的主机。可以增加,修改配置文件就行了。

复制代码
./oj_server/conf/service_machine.conf

127.0.0.1:8081
127.0.0.1:8082
127.0.0.1:8083

改里面的配置就行了,很简单,如果要部署到远端就改成你远端的ip就行了,然后如果要增加主机的话直接在后面接着加上去即可。

4.3 发布项目

调用最上级目录的makefile文件即可。

bash 复制代码
make

make之后就会有一个make_output目录,里面就是要发布的内容。

5. 增加题目的方法

所以题目的信息都存储在这目录下。

复制代码
./oj_server/questions

目录结构如下所示。

复制代码
.
├── 1
│   ├── desc.txt
│   ├── header.cpp
│   └── tail.cpp
├── 2
│   ├── desc.txt
│   ├── header.cpp
│   └── tail.cpp
├── 3
│   ├── desc.txt
│   ├── header.cpp
│   └── tail.cpp
├── 4
│   ├── desc.txt
│   ├── header.cpp
│   └── tail.cpp
└── question.list

4 directories, 13 files

question.list格式。

复制代码
1 字符串长度 简单 1 30000
2 判断回文数 中等 1 30000
3 求最大值 简单 1 30000
4 N皇后 困难 1 30000

每一列分别是,题目列表,题目名称,难度,cpu运行时间限制,内存使用限制。

每一个以数字为名字的文件夹代表每一个题目的详细信息。

desc.txt是题目描述和一些详细信息。

header.cpp是展示给用户的代码片段。

tail.cpp是后端用于测试的代码片段。

增加题目按照上述的格式进行添加即可。

相关推荐
芒果1259 分钟前
【转载文章】ECharts-GL 实现世界级、国家级、省市级 3D 地图
前端
一只小风华~19 分钟前
JavaScript:数组常用操作方法的总结表格
前端·javascript·数据结构·vue.js·算法
前端老鹰23 分钟前
JavaScript Array.prototype.some ():数组判断的 “快捷侦探”
前端·javascript
张元清24 分钟前
揭秘JS事件循环:一道字节跳动面试题带你深入理解async/await、Promise与RAF
前端·react.js·面试
KenXu27 分钟前
F2C-Chrome插件-Figma免费的DevMode来了!
前端
北海几经夏33 分钟前
React组件中的this指向问题
前端·react.js
passer9811 小时前
列表项切换时同步到可视区域
前端
FogLetter1 小时前
移动端适配的终极奥义:从lib-flexible到postcss-pxtorem的全方位指南
前端·postcss
望获linux1 小时前
【Linux基础知识系列】第六十四篇 - 了解Linux的硬件架构
linux·运维·服务器·开发语言·数据库·操作系统·嵌入式软件
易元1 小时前
设计模式-访问者模式
前端·后端·设计模式