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是后端用于测试的代码片段。

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

相关推荐
Leyla2 分钟前
【代码重构】好的重构与坏的重构
前端
小安运维日记3 分钟前
Linux云计算 |【第三阶段】PROJECT1-DAY1
linux·运维·云计算·apache
影子落人间5 分钟前
已解决npm ERR! request to https://registry.npm.taobao.org/@vant%2farea-data failed
前端·npm·node.js
pyliumy20 分钟前
rsync 全网备份
linux·运维·服务器
世俗ˊ29 分钟前
CSS入门笔记
前端·css·笔记
子非鱼92129 分钟前
【前端】ES6:Set与Map
前端·javascript·es6
6230_34 分钟前
git使用“保姆级”教程1——简介及配置项设置
前端·git·学习·html·web3·学习方法·改行学it
苹果醋342 分钟前
SpringCloud系列之一---搭建高可用的Eureka注册中心
运维·nginx
想退休的搬砖人43 分钟前
vue选项式写法项目案例(购物车)
前端·javascript·vue.js
诚诚k1 小时前
docker存储
运维·docker·容器