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

news2024/11/24 14:04:17

一、项目灵感来源

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

二、项目简介

        模拟实现判题功能,并完成不同局域网的主机都可以访问我的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系统编程和网络编程有了更深的理解,也希望后续自己可以在学完数据库后,把文件更换为数据库,并且可以陆续添加更多的功能!具体更多的详细设计思路在源代码中记录。

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

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

相关文章

ar地产沙盘互动体验提供更加丰富多彩的楼盘信息

AR增强现实技术作为其重要分支,正逐步在全球市场中崭露头角。国内的AR增强现实技术公司正致力于链接物理世界和虚拟世界,为用户带来沉浸式的AR体验。它们打造线上线下联动的一站式文旅景区数字化运营平台,让您在享受旅游的同时,也…

爬虫(没)入门:用 node-crawler 爬取 blog

起因 前几天想给一个项目加 eslint,记得自己曾经在博客里写过相关内容,所以来搜索。但是发现 csdn 的只能按标题,没办法搜正文,所以我没搜到自己想要的内容。 没办法只能自己又重新折腾了一通 eslint,很烦躁。迁怒于…

新手上路:Linux虚拟机创建与Hadoop集群配置指南①(未完)

一、基础阶段 Linux操作系统: 创建虚拟机 1.创建虚拟机 打开VM,点击文件,新建虚拟机,点击自定义,下一步 下一步 这里可以选择安装程序光盘映像文件,我选择稍后安装 选择linux系统 位置不选C盘,创建一个新的文件夹VM来放置虚拟机,将虚拟机名字改为master方便后续识别…

AI框架之Spring AI与Spring Cloud Alibaba AI使用讲解

文章目录 1 AI框架1.1 Spring AI 简介1.2 Spring AI 使用1.2.1 pom.xml1.2.2 可实现的功能 1.3 Spring Cloud Alibaba AI1.4 Spring Cloud Alibaba AI 实践操作1.4.1 pom.xml1.4.2 配置文件1.4.3 对接文本模型1.4.4 文生图模型1.4.5 语音合成模型 1 AI框架 1.1 Spring AI 简介…

什么是APP加固?

APP加固是一系列技术手段的集合,旨在提升移动应用程序的安全性,保护其免受各种攻击和威胁。加固技术可以对应用程序的代码、数据、运行环境等多个方面进行保护,从而提高应用的整体安全性和韧性。 常见的APP加固技术 代码混淆: 代码…

Ubuntu系统本地搭建WordPress网站并发布公网实现远程访问

文章目录 前言1. 搭建网站:安装WordPress2. 搭建网站:创建WordPress数据库3. 搭建网站:安装相对URL插件4. 搭建网站:内网穿透发布网站4.1 命令行方式:4.2. 配置wordpress公网地址 5. 固定WordPress公网地址5.1. 固定地…

java中事务中遇到锁会造成什么问题,以及该如何解决?

在spring中实现事务有多种方式,主要是两种:一种是声明式事务,一种是编程式事务,今天我们就讲声明式事务中的一种,使用注解Transactional,这个注解的作用就是帮助我们在代码执行完毕之后自动提交事务&#x…

Coolmuster Android助手评测:简化Android到电脑的联系人传输

产品概述 Coolmuster Android助手是一款旨在简化Android设备与计算机之间数据管理和传输过程的全面工具。它以用户友好的界面和全面的功能,成为寻求高效数据管理解决方案的Android用户的热门选择。 主要特点和功能Coolmuster Android助手拥有一系列使其成为管理Andr…

优思学院|谈汽车零部件企业生产精益及现场管理

精益生产(Lean Production)和现场管理作为现代制造企业的核心管理理念,正在越来越多的企业中得到应用。尤其是在中国,许多汽车零部件企业通过精益管理和六西格玛方法,显著提高了生产效率,降低了生产成本&am…

白酒:茅台镇白酒的地域特色与环境优势

茅台镇,位于中国贵州省仁怀市,因其与众不同的自然环境和酿酒工艺而成为世界著名的白酒产区。作为茅台镇的品牌,云仓酒庄豪迈白酒以其卓着的品质和口感赢得了广大消费者的喜爱。而这一切,都离不开茅台镇的地域特色和环境优势。 茅台…

SQL性能优化 ——OceanBase SQL 性能调优实践分享(3)

相比较之前的两篇《连接调优》和《索引调优》,本篇文章主要是对先前两篇内容的整理与应用,这里不仅归纳了性能优化的策略,也通过具体的案例,详细展示了如何分析并定位性能瓶颈的步骤。 SQL 调优 先给出性能优化方法和分析性能瓶…

二叉树创建和遍历

个人主页 :敲上瘾-CSDN博客二叉树介绍:二叉树(详解)-CSDN博客 目录 一、二叉树的创建 二、二叉树的遍历 1.前序遍历 2.中序遍历 3.后序遍历 4.层序遍历 三、相关计算 1.总节点个数计算 2.叶子节点个数计算 3.深度计算 一、二叉树的创建 关于…

Lodop 实现局域网打印

文章目录 前言一、Lodop支持打印的方式lodop 打印方式一般有3种:本地打印局域网集中打印广域网AO打印 二、集成步骤查看lodop 插件的服务端口:查看ip后端提供接口返回ip,前端动态获取最后步骤 前言 有时候会根据不同的ip来获取资源文件&…

天锐绿盾 | 源代码防泄密软件

#源代码防泄密# 天锐绿盾是一款专为企业设计的,旨在保护企业核心数据安全与防止代码泄露的软件。它通过一系列技术手段实现对信息的加密、访问控制、行为审计、外发控制等,以确保企业内部的代码和敏感信息不会未经授权就被泄露出去。 PC地址&#xff1a…

音视频开发19 FFmpeg 视频解码- 将 h264 转化成 yuv

视频解码过程 视频解码过程如下图所示: ⼀般解出来的是420p FFmpeg流程 这里的流程是和音频的解码过程一样的,不同的只有在存储YUV数据的时候的形式 存储YUV 数据 如果知道YUV 数据的格式 前提:这里我们打开的h264文件,默认是YU…

电子元器件采购商城的售后服务保障

电子元器件采购商城的售后服务保障是用户在采购电子元器件时的重要考量因素之一。以下是常见的售后服务保障内容: 退换货政策: 质量问题退换货:如果用户收到的元器件存在质量问题,通常可以在一定时间内申请退换货。无理由退换货&a…

Linux--Socket编程基础

一、Socket简介 套接字( socket )是 Linux 下的一种进程间通信机制( socket IPC ), 使用 socket IPC 可以使得在不同主机上的应用程序之间进行通信(网络通信),当然也可以是同一台…

【C++课程学习】:C++入门(输入输出,缺省参数)

🎁个人主页:我们的五年 🔍系列专栏:C课程学习 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 🍩1.关于C输入输出: 🍩2.缺省参数函数: 缺省参数的概…

手上3个offer怎么选,深信服的技服、奇安信的安全服务、绿盟的渗透工程师

我是一个应届生,目前手上收到了3个offer比较纠结选哪个? 1、深信服技术服务工程师,base 西安,月薪 14k 据说还有些异地补助 2、奇安信安全服务工程师,base 重庆,月薪 12k 3、绿盟科技的渗透工程师&#…

轻松掌握PDF文本内容修改技巧,让文档编辑更高效便捷,职场工作从此得心应手!

在快节奏的职场生活中,PDF文档已经成为我们工作中不可或缺的一部分。然而,如何高效、便捷地修改PDF文本内容,一直是许多职场人士头疼的问题。今天,就让我来为你介绍一款神奇的编辑工具——首助编辑高手,它将帮助你轻松…