【负载均衡在线OJ项目日记】项目简介

server/2024/12/22 1:52:13/

目录

前言

什么是负载均衡

所用的技术和开发环境

所用技术

开发环境

项目的宏观结构

leetcode 结构

结构

编写思路


前言

从C语言的文章到现在Linux网络部分,我已经涉猎了很多知识;终于在今天我要开始搞项目了,通过项目我也可以开始慢慢复习前面已将遗忘的知识点;给大家带来的第一个项目负载均衡在线OJ,就类似于Leetcode、牛客一样的在线判题功能。我们只是简单仿写它们的答题模块,至于其他的模块,也没有能力。

什么是负载均衡

其实博主一句两句也说不清楚,容易误导大家;这里给大家AI的回答。

负载均衡是一种在计算机网络或服务器系统中分配工作负载的技术。它的目标是确保所有的资源被充分利用,同时避免某些资源过载而导致系统性能下降或崩溃。

简单来说,负载均衡将请求或任务分配给多个服务器或资源,以确保它们能够有效地处理。这通常通过一系列算法和策略来实现,包括基于轮询、基于权重、基于响应时间等。负载均衡器通常位于网络中的一个集中点,它监视服务器的负载状况,并根据预设的规则来分发请求,以实现最佳的性能和可用性。

在大型网站、应用程序或服务中,负载均衡是至关重要的,因为它能够有效地管理流量,防止单个服务器过载,并提高整个系统的可伸缩性和稳定性。

简单来说就像LeetCode,每时每刻都有人会访问进行提交代码测评;我们要将这些提交均衡的分配到每个后端的服务器

所用的技术和开发环境

所用技术

  • C++ STL 标准库
  • Boost 准标准库(字符串切割)
  • cpp-httplib 第三方开源网络库
  • ctemplate 第三方开源前端网页渲染库
  • jsoncpp 第三方开源序列化、反序列化库
  • 负载均衡设计
  • 多进程、多线程
  • MySQL C connect
  • Ace前端在线编辑器(了解)
  • html/css/js/jquery/ajax (了解)

开发环境

项目的宏观结构

我们的项目核心是三个模块
1. comm : 公共模块        一般会将多次使用的一些小功能放在这里;就像提供一些文件操作、字符串处理、网络请求等等;

2. compile_server : 编译与运行模块,用户将代码提交在我们的服务其后形成临时文件,编译与运行服务器请进行编译与运行得到运行结果;

3. oj_server : 获取题目列表,查看题目编写题目界面,负载均衡,等其他功能;采用MVC设计模式,调用后端编译模块,访问文件或者数据库将题目列表和编辑信息提供给用户;

项目编译成功后形成两个模块:编译服务器、在线OJ服务器;两个服务器采用网络套接字进行通信,OJ服务器将编译模块部署在服务器的多台机器上,OJ服务器只有一台;这样的话,我们的OJ服务器负载均衡的选择后端编译服务器,来让我能够以集群处理能力的方式对外输出在线OJ服务,所以这是一个可扩展的项目

leetcode 结构

只实现类似 leetcode 的题目列表+在线编程功能

结构

 

编写思路

1. 先编写 compile_server
2. oj_server
3. version1:基于文件版的在线OJ
4. 前端的页面设计
5. version2:基于 MySQL 版的在线O 


今天对项目的简介和结构的分享到这就结束了,希望大家读完后有很大的收获,也可以在评论区点评文章中的内容和分享自己的看法;个人主页还有很多精彩的内容。您三连的支持就是我前进的动力,感谢大家的支持!!! 


http://www.ppmy.cn/server/36812.html

相关文章

【设计模式】17、iterator 迭代器模式

文章目录 十七、iterator 迭代器模式17.1 user_slice17.1.1 collection_test.go17.1.2 collection.go17.1.3 iterator.go17.1.4 user.go 17.2 book_shelf17.2.1 book_shelf_test.go17.2.2 book_shelf.go17.2.3 iterator.go17.2.4 book.go 十七、iterator 迭代器模式 https://r…

C语言双向链表

前面我们已经学完了单链表的知识点(如果还没有看过的主页有哦~),这篇博客我们就来探讨探讨单链表的孪生弟弟——双向链表。 目录 1.链表的分类 2.双向链表的结构 3.双向链表的实现 3.1 List.h 3.2 List.c 4.书写要点总结说明 4.1为什…

XSS攻击分析---(原理、危害、防御、应急响应)

1、攻击原理 造成XSS漏洞的原因就是,对攻击者的输入没有经过严格的控制,使得攻击者通过巧妙的方法注入恶意指令代码到网页,进行加载并执行。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java, VBScript&…

数据可视化准备:动态识别echarts的横纵坐标数据字段

前言 继上一篇文章 自动选择图表类型:基于数据特征智能决策 分析了如何根据sql和数据结果判断应该自动使用哪种图表类型,本文继续将图表的x轴和y轴横纵坐标识别出来,基本一个二维数据类普通图表就可以直接输出为echarts参数了。 在数据可视…

Android 桌面小组件 AppWidgetProvider

Android 桌面小组件 AppWidgetProvider 简介 小组件就是可以添加到手机桌面的窗口。点击窗口可以进入应用或者进入应用的某一个页面。 widget 组件 如需创建 widget,您需要以下基本组件: AppWidgetProviderInfo 对象 描述 widget 的元数据&#xff0…

解决连接不上VPN问题

解决连接不上VPN问题 错误描述:错误描述: 错误描述: 无法建立计算机与VPN服务器之间的网络连接,因为远程服务器未响应。这可能是因为未将计算机与远程服务器之间的某种网络设备(如防火墙、NAT、路由器等)配…

node.js中的断言

assert.ok(value, [message]):如果value不为真,则抛出一个AssertionError,可选地包含message。 const assert require(assert); assert.ok(true); // 没有错误 assert.ok(false, 这里应该是true); // 抛出 AssertionError: 这里应该是tru…

远程桌面连接不上,远程桌面连接不上的专业解决策略

在信息技术领域,远程桌面连接是一种非常重要的工具,它允许用户从任何地点、任何时间访问和操作远程计算机。然而,当远程桌面连接出现问题时,可能会严重影响工作效率。以下是一些可能导致远程桌面连接不上的原因以及相应的解决方案…