实战项目《负载均衡在线OJ系统》

一、项目灵感来源

在日常做题的过程中,我们总会去力扣和牛客网上去做题,但是从来没有想过网站是如何加载给用户的,以及在提交代码时,是如何得知我们的代码是否正确。基于这样的原因,也是学习到一定程度的知识后,才来模拟实现一下做题网站的判题系统!

二、项目简介

模拟实现判题功能,并完成不同局域网的主机都可以访问我的OJ系统,在后台也要实现负载均衡,当一个用户提交代码时,选择负载最小的服务器来完成判题功能!

三、相关技术

  • C++ STL 标准库
  • cpp-httplib 第三⽅开源⽹络库
  • ctemplate 第三⽅开源前端⽹⻚渲染库
  • jsoncpp 第三⽅开源序列化、反序列化库
  • 负载均衡设计(轮询法)
  • 多进程、多线程
  • Ace前端在线编辑器
  • html/css/js/jquery/ajax

四、开发环境

  • ubuntu 20.04 云服务器
  • vscode

五、设计思路(搭配整体设计图)

  1. 一定存在很多客户端同时来向我们的系统请求资源,包括但不限于:首页资源、题目列表、指定题目内容、提交代码后的编译运行结果等。

  2. 一定不能让一个服务器来完成上面的所有操作,否则压力很大,也无法实现负载均衡。也就必须让编译运行部分和对用户请求资源的响应部分做解藕,实现两种服务器,一种用来识别用户请求的资源,另一种只用来完成编译运行服务。

  3. 最后基于第二点,我们就可以简单地画出整体设计图了!

六、整体设计图

七、模块分析

1. Choice_Server

首先要明确,我们想让Choice_Server完成的功能:

  • browser请求首页,返回首页资源;
  • browser请求题目列表,返回题目列表的网页;
  • browser请求指定题目信息,返回指定题目信息的网页;
  • brower请求提交代码后的编译运行结果,负载均衡式地选择一台Compile_Run_Server来完成编译运行,并接收Compile_Run_Server的运行结果,再返回给browser。

所以我们就必须要让Choice_Server拥有这几点功能:

  • 请求资源的目录,包含首页、题目列表信息、题目指定内容的信息
  • 负载均衡式地选择Compile_Run_Server,发送代码并接收结果,返回给browser

2. Compile_Run_Server

依旧是思考,Compile_Run_Server需要完成的是什么?

  • 编译
  • 运行

所以我们就必须要以这两个功能为主体来设计Compile_Run_Server

八、遇到的问题及解决

把遇到的问题写了一篇博客

关于【setrlimit函数在设置RLIMIT_AS与进程替换】和【重定向与异常信息】的两个问题及解释-CSDN博客

九、项目总体详细流程图

十、总结

在写完这个项目之后,对Linux系统编程和网络编程有了更深的理解,也希望后续自己可以在学完数据库后,把文件更换为数据库,并且可以陆续添加更多的功能!具体更多的详细设计思路在源代码中记录。

相关推荐
wdfk_prog11 分钟前
Wi-Fi Direct 源码分析(11):P2P-GROUP-STARTED 之后——Group Interface、IP 配置与真实数据通路
运维·服务器·网络协议·tcp/ip·asp.net·p2p·wifi-direct
MicrosoftCloud18 分钟前
用户权限 02|/etc/passwd、/etc/shadow、/etc/group:三个文件讲透 Linux 用户体系
linux·运维·ubuntu·用户管理·权限·useradd
天远API20 分钟前
零信任架构实战:基于天远人车核验加强版构建自动化商用车承保核验网关
运维·人工智能·架构·自动化
崽崽..23 分钟前
【Linux】ping命令刨析
linux·运维·服务器·网络
张小姐的猫44 分钟前
【Linux】网络编程 —— 五种IO模型
linux·运维·服务器·网络·c++·人工智能·php
程序员-Benothing1 小时前
Shell脚本调试与最佳实践:set -eux、shellcheck实战
linux·运维·服务器
海宇AI1 小时前
零信任架构实战:基于海宇活体识别V步骤1构建自动化直播开播鉴权网关
运维·人工智能·架构·自动化
ZeroNews内网穿透1 小时前
企业内网穿透安全避坑:路由白名单,解决整站映射带来的接口泄露风险
运维·内网穿透·api安全·zeronews·企业网络安全·运维实践
Thomas.Sir1 小时前
第13课:Spring Cloud LoadBalancer 新版负载均衡核心原理
spring cloud·负载均衡
苦瓜不会码代码1 小时前
负载均衡会话保持-扩容后登录掉线踩坑
运维·负载均衡