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

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

前言

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

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

  • 高质量博客汇总

本项目Github地址

- Load-balanced-online-OJ-system


Load-balanced-online-OJ-system

负载均衡OJ系统

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

代码的实现细节可见

  • Work.md

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 运行

克隆仓库。

git clone https://github.com/Yufccode/Load-balanced-online-OJ-system.git

进入仓库。

cd Load-balanced-online-OJ-system

编译生成可执行。

make

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

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

# 三个命令行分别执行这三个
./compile_server 8081
./compile_server 8082
./compile_server 8083
./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文件即可。

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

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

http://www.lryc.cn/news/231651.html

相关文章:

  • ES6 导入导出
  • 【Liunx】部署Ansible自动化运维工具
  • Python的基础语法
  • Skywalking流程分析_8(拦截器插件的加载)
  • 智能AI系统ChatGPT网站源码+支持OpenAI DALL-E3文生图+支持ai绘画(Midjourney)/支持GPT全模型+国内AI全模型
  • 腾讯云服务器可用区是什么意思?可用区选择方法
  • Jupyter运行显存爆炸,明明上一个单元格已经运行完毕为什么还是会炸?
  • 【ICE】webrtc lite 1:cmake构建
  • 国内最受欢迎电商API接口调用淘宝商品详情API接口数据
  • 第五篇 基于JSP 技术的网上购书系统——主页面和登录页面实现(网上商城、仿淘宝、当当、亚马逊)
  • 【 云原生 | K8S 】kubeadm 部署Kubernetes集群
  • 微信小程序rich-text 文本首行缩进和图片居中和富文本rich-text 解析多个空格不成功 nbsp
  • uniapp 设置重写uni-body-page样式,输入字母转大写,条形码扫描
  • 【uniapp/uview1.x】u-upload 在 v-for 中的使用时, before-upload 如何传参
  • 求组合数(笔记)
  • 《视觉SLAM十四讲》-- 后端 1(下)
  • io+day8
  • 【图像处理:OpenCV-Python基础操作】
  • Java 简单实现一个 TCP 回显服务器
  • 邦芒攻略:新手求职面试需要准备的材料
  • 在docker下安装suiteCRM
  • 【Python大数据笔记_day08_hive查询】
  • 魔众文库系统 v5.6.0 DWG文件格式支持,部分数据封面显示异常,定时调度清理临时文件
  • 2023 PostgreSQL 数据库生态大会:解读拓数派大数据计算系统及其云存储底座
  • Android10 手势导航
  • Pinia 插件 pinia-plugin-persist 添加 persist 属性时报错:没有与此调用匹配的重载
  • Django知识
  • vue2+antd——实现权限管理——js数据格式处理(回显+数据结构渲染)
  • ffmpeg 4.4 cenc-aes-ctr 加解密 MP4 工程性质分析
  • 网络安全/黑客技术(0基础入门到进阶提升)