这是2025年湖南大学 专业选修课 CS06142《云计算技术》 云里雾里队 的实验仓库。
四次实验分别主要涉及并发编程、网络编程、Raft分布式一致性算法和前后端全栈开发能力。
最终云里雾里队完成所有实验并上台展示了Lab4,在该课程上获得了100分的成绩。
实验要求见Lab1目录
这是一个经典的生产者-消费者问题,主要练习并发编程
关键设计:
- 使用环形缓冲区存储数独题
- 使用3个指针input_index,solve_index,output_index来标识环形缓冲区中新增未解题,已解题,输出题的位置,并以指针位置为条件处理生产者-消费者的同步问题(使用pthread互斥锁,条件变量)
- 使用3个线程分别专门处理输入文件、读取文件中的数独题、输出已解的数独题
- 负责解题的多个工作线程,采用线程池方案
实验要求见Lab2目录
该实验主要涉及网络编程和并发编程
高性能 HTTP Server关键设计:
-
使用线程池处理客户端请求
-
多线程阻塞式server:所有线程共享同一个监听socket,通过
accept
竞争处理新连接 -
支持HTTP流水线:通过查找
\r\n\r\n
区分不同请求,循环处理一个TCP连接中的多个请求
Proxy Server关键设计:
- 核心架构:
- 并发连接数控制:主线程通过互斥锁(Monitor形式)保护全局计数器
concurrentThreadNum
,限制最大并发连接数为100。这样做是为了避免服务器挂掉,否则在连接请求过多时会由于操作系统限制其打开的文件描述符数量而挂掉 - 数据完整保证:
sendAllChunk
和recvAllChunk
两个函数分别进一步封装socket库中的send
和read
函数,确保完整发送和接收缓冲区的数据
实验要求见Lab3目录
目标:实现一个基于 Raft 共识算法的分布式内存键值数据库(KV 存储)。该系统将能够处理客户端的请求,在多个服务器节点之间保持数据一致性,同时能够应对节点故障
该实验采用C++开发,主要涉及Raft共识算法的实现,网络编程,并发编程。
核心架构如下:
关键设计:
- 实验需要完成的是raft算法中领导人选举和日志同步的4个消息处理函数(投票请求,投票响应,日志同步请求,日志同步响应),这里我主要参考raft算法官方网页中的模拟器和raft论文
- 该数据库的KV存储使用的是C++ STL中的
unordered_map
类,原本并未实现持久化,我们在此基础上使用快照的方法将数据以文件的形式保存
实验要求见Lab4目录
目标:结合Lab3所写的KV数据库,开发一个基于Web的聊天系统,能够连接并管理多个大型语言模型(LLM)后端,提供统一的用户聊天界面。系统应支持负载均衡和故障转移,确保服务的高可用性和稳定性
该实验前端基于HTML/CSS/JavaScript的响应式Web界面,后端是基于Python的Flask框架开发的Web服务,数据库采用Lab3实现的分布式KV数据库,锻炼前后端全栈开发能力
我们组的关键设计:
-
历史聊天记录加载
-
新建会话功能
-
基于加权随机算法的后端大模型API选择策略
-
API-key的加密存储
实现效果如图:
最终该系统和数据库在个人电脑上部署,在展示期间开放给校园网内其他用户使用,运行状况良好
本仓库合作流程遵循git工作流,具体贡献/提交可在提交记录中查看