高负载oj服务器
学代码的章北海
这个作者很懒,什么都没留下…
展开
-
【负载均衡oj】(一)架构和公共模块
实现类似牛客网的在线做题,带有判题功能,总体分为三个模块,一个通用头文件模块,一个后端服务模块,用于编译客户的代码并测验数据。还有一个oj客户端,采用mvc架构,负责前后端交互,可以调用后端的编译功能并提供负载均衡选择,这样后端编译模块可以采用集群化部署,通过负载均衡选择负载最低的后端进行业务逻辑。编译服务在细化分为,编译服务,运行服务,后端对上层提供的接口,后端编译的网络服务。原创 2024-01-08 16:51:21 · 461 阅读 · 0 评论 -
【负载均衡oj】(七)ojserver
负责负载均衡,获取网站首页,通过网络罗调用编译并运行并提供结果给用户。根据用户的操作提供不同的功能。采用mvc结构。使用 ctemplate文字模板做数据渲染m在这里指的是和数据的交互,可以用文件或者sql交互。在使用文件的情况下,就必须要有对应的文件目录存放每一道题。提供题目描述和题头还有测试用例。原创 2024-01-05 13:59:51 · 958 阅读 · 1 评论 -
【负载均衡oj】(六)服务器调用模块
使用第三方库cpphttplib实现网络功能。使用说明,直接拷贝到当前目录下或者放在 /usr/include/目录下都可。要使用高版本的gcc编译器。7版本以上才可以。在建立初步代码后可以用postman进行初步测试。原创 2023-12-28 18:04:43 · 403 阅读 · 0 评论 -
【负载均衡oj】(五)编译运行链接模块
主要负责链接起编译和运行模块,并和用户的代码结合起来,提供出上层的接口给网络使用,因为用户代码是来自网络的同时我们需要把结果通过网络送还给客户端。通过json来做应用层数据的的序列化,将结构化数据转化为字符串.原创 2023-12-28 18:04:23 · 365 阅读 · 0 评论 -
【负载均衡oj】(二)编译模块
编译模块只提供编译功能,所以我们不考虑把用户的代码转换成临时文件的整个过程,假设我们已经拿到了一份代码文件,里面是用户的代码。编译只有两种结果,编译成功和编译失败,出错的时候会将错误信息打印到stder上,我们需要将这段信息还给用户,所以需要输出重定向,生成个一个临时文件用来保存错误信息。同时编译本身这一过程必须是另一个进程或者线程,因为服务器不能卡死。原创 2023-12-28 18:03:55 · 403 阅读 · 0 评论 -
【负载均衡oj】(四) 运行模块
主要负责运行可执行程序。通过文件名就能运行程序。原创 2023-12-28 18:03:21 · 357 阅读 · 0 评论 -
【负载均衡oj】(三)日志模块
这个项目的输出都被重定向了,为了方便调试和观察,我们需要一个日志文件用来打印日志信息。可以实现成开放式日志,直接拼接在流插入后面,这样使用更灵活 ,例如 LOG()原创 2023-12-25 14:13:37 · 359 阅读 · 0 评论