这个作业属于那个课程 | 广工2023软件工程课程 |
---|---|
这个作业要求在哪里 | 团队作业2-《需求规格说明书》 |
这个作业的目标 | 设计并完成团队需求规格说明书 |
一、需求规格说明书
1. 引言
目标:简单支持高并发的服务器框架
高并发是分布式系统架构设计中必须考虑的因素之一,通常是指通过设计保证系统能够同时并行处理很多请求
高并发一方面可以提高资源利用率,加快系统响应速度,但是同时也会带来安全性,分布式事务、死锁等问题
2. 系统功能需求概述
2.1. 日志模块
- 支持 流式日志风格 和 格式化风格,支持日志格式自定义,日志级别,多日志分离等
- 支持时间,线程id,线程名称,日志级别,日志名称,文件名,行号等内容的自由配置
2.2. 配置模块
- 采用约定由于配置的思想。定义即可使用。不需要单独去解析。支持变更通知功能。
- 使用YAML文件做为配置内容。支持级别格式的数据类型,支持STL容器,支持自定义类型的支持
2.3. 线程模块
- 线程模块,封装pthread库里面的一些常用功能,可以方便开发中对线程日常使用
2.4. 协程模块
- 协程:用户态的线程,相当于线程中的线程,更轻量级
- hook可以把复杂的异步调用,封装成同步操作。降低业务逻辑的编写复杂度。
2.5. 协程调度模块
- 协程调度器:管理协程的调度,内部实现为一个线程池,支持协程在多线程中切换,也可以指定协程在固定的线程中执行
- 一个N-M的协程调度模型,N个线程,M个协程。重复利用每一个线程
2.6. I/O协程调度模块
- 继承与协程调度器,封装epoll(Linux),并支持定时器功能(使用epoll实现定时器)
- 支持Socket读写时间的添加,删除,取消功能。
- 支持一次性定时器,循环定时器,条件定时器等功能
2.7. Hook模块
- hook 系统底层和socket相关的API、socket io相关的API、以及sleep系列的API
- hook的开启控制是线程粒度的,可以自由选择
- 通过hook模块,可以使一些不具异步功能的API,展现出异步的性能。如(mysql)
2.8. Socket模块
- 封装Socket类,提供socket API功能,统一封装地址类,将IPv4,IPv6,Unix地址统一起来
- 提供域名,IP解析功能
2.9. ByteArray序列化模块
- ByteArray二进制序列化模块,提供对二进制数据的常用操作
- 读写入基础类型 int8_t、int16_t、int32_t、int64_t 等,支持std::string的读写支持,支持字节序转化,支持序列化到文件,以及从文件反序列化等功能
2.10. TcpServer模块
- 基于Socket类,封装一个通用的TcpServer的服务器类:提供简单的API,使用便捷,可以快速绑定一个或多个地址,启动服务,监听端口,accept连接,处理socket连接等功能
2.11. Stream模块
- 封装流式的统一接口:将文件、socket封装成统一的接口
- 使用的时候,采用统一的风格操作
- 基于统一的风格,可以提供更灵活的扩展
2.12. HTTP模块
- 采用Ragel(有限状态机),实现HTTP/1.1的简单协议、uri的解析
- 基于 SocketStream 实现 HttpConnection(HTTP的客户端) 和HttpSession(HTTP服务器端的链接)
- 基于 TcpServer 实现 HttpServer 。提供完整的HTTP的客户端API请求功能,HTTP基础API服务器功能
2.13. Servlet模块
- 仿照java的servlet,实现一套Servlet接口:ServletDispatch、FunctionServlet、NotFoundServlet
- 支持uri的精准匹配,模糊匹配等功能
- 和HTTP模块,一起提供HTTP服务器功能
3. 面向用户分析
💕有请求的地方就有并发💕
4. 预计支持请求并发量
10000
5. 技术需求
- C++
- CMake
- Git
- Linux
- 网络编程
- Ctest 、Catch2
…
6. 真实性、可用性、价值性 需求
真实性:可以真实地解决现实生产环境下的并发访问问题
价值性:可以提高服务的响应速度和处理能力,提高用户的满意度,从而提升的竞争力
可用性:设计上充分考虑了可用性和可靠性,可以在遇到故障时快速恢复服务
7. 团队项目的GitHub地址
开发流程UML
二、团队计划
👉👉 项目技术文档管理
1. 项目时间安排表
1.1 原有时间安排表
第 5 周 | 1.团队组队、团队博客 |
2.团队介绍、成员展示、角色分配、选题确定 | |
3.制定团队计划安排,团队贡献分的规定 | |
第6周 | 1.需求规格说明书 |
2.原型设计,队员估计任务难度并学习必要的技术 | |
3.编码规范完成、平台环境搭建完成、初步架构搭建 | |
第7周 | 1.原型改进(给目标用户展现原型,并进一步理解需求) |
2.架构设计,WBS, 团队成员估计各自任务所需时间 | |
3.测试计划 | |
第8、9周 | 1. 团队项目Alpha任务分配计划 |
2. 连续7天的Alpha敏捷冲刺,7 篇 每日Scrum Meeting博客+代码提交 | |
第10周 | 1.用户反馈+测试计划改进 |
2. 团队Alpha阶段个人总结 | |
3. 团队项目Alpha博客:发布说明、测试报告、展示博客、项目管理 | |
第11周 | 1. 团队项目Alpha博客:事后分析 |
1.2 校正后时间安排表
第 5 周 | 1.团队组队、团队博客 |
2.团队介绍、成员展示、角色分配、选题确定 | |
3.制定团队计划安排,团队贡献分的规定 | |
第6周 | 1.需求规格说明书 |
2.原型设计,队员估计任务难度并学习必要的技术 | |
3.编码规范完成、平台环境搭建完成、初步架构搭建 | |
第7周 | 1.原型改进 |
2.团队成员估计各自任务所需时间 | |
3.测试计划 | |
第8、9周 | 1. 团队项目Alpha任务分配计划 |
2. 连续7天的Alpha敏捷冲刺,7 篇 每日Scrum Meeting博客+代码提交 | |
第10周 | 1.用户反馈+测试计划改进 |
2. 团队Alpha阶段个人总结 | |
3. 团队项目Alpha博客:发布说明、测试报告、展示博客、项目管理 | |
第11周 | 1. 团队项目Alpha博客:事后分析 |
2. 完成情况
详情看文档进度:👉👉 项目技术文档管理
- 已经完成 确立版本管理方式、开发环境配置
- 开启了日志模块开发
3. 团队分工
任务 | 成员 |
---|---|
开发(具体任务在文档给出) | 邱棋浩、宫旭、李伟东、江周勉、李昊旃、赵光明、钟海超 |
测试 | 邱棋浩、江周勉、赵光明 |
文档编写 | 邱棋浩、宫旭、李伟东、江周勉、李昊旃、赵光明、钟海超 |
文档管理 | 邱棋浩 |
博客 | 李昊旃、钟海超、邱棋浩、李伟东 |
4. Issues截图
三、个人感想
姓名 | 感想 |
---|---|
邱棋浩 | 今天吃麻辣烫 |
宫旭 | 心中有目标,胸中有任务,一齐向前冲 |
李伟东 | 不希望因为害怕就堵住了我前进的路 |
江周勉 | 勤奋是你生命的密码,能译出你一部壮丽的史诗 |
李昊旃 | 车到山前必有路,船到桥头自然直 |
赵光明 | 我们都是参天大树,都能摘星揽月 |
钟海超 | 世上无难事,只要肯攀登 |