技术规格说明书

04/14 09:16
阅读数 306
项目 内容
课程:北航-2020-春-软件工程 博客园班级博客
作业要求 技术规格说明书
我们在这个课程的目标是 提升团队管理及合作能力,开发一项满意的工程项目
这个作业在哪个具体方面帮助我们实现目标 说明项目技术规格与特性

一、概述&技术栈

1. 产品概述

本团队继承了上一届的VisualPytorch,宏观架构基本一致。上一届在实现拖拽生成模型代码并提供打包下载的基础上,实现了用户注册登录,访问量统计,以及帮助界面,新手引导等功能。本组打算在其基础上进行拓展,具体内容见:功能设计

计划\(\alpha\)阶段实现①扩展更多的网络层,②支持将网络封装成块,③经典模型,④更精美的可视化

\(\beta\)\(\gamma\)阶段实现⑤GPU云环境的部署,⑥集成tensorboard可视化,⑦用户登录与模型保存,⑧模型分享与交流

2.技术栈

本项目开发的技术栈结构如上图所示,具体描述如下:

A. 前端框架

之前的项目使用了完整的前端框架,包含Jquery+BootStrap+CSS+html,拖拽部分使用JqueryUI和Jsplumb,为了实现嵌套功能,会对前端拖拽部分进行修改。

  • Jquery封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互
  • bootstrap框架提供了非常丰富的CSS样式,也可以从源码定制自己所需要的样式,所以给我们造就了比较大的自定义空间
  • jQuery UI 是以 jQuery 为基础的开源 JavaScript 网页用户界面代码库。包含底层用户交互、动画、特效和可更换主题的可视控件。我们可以直接用它来构建具有很好交互性的web应用程序
  • Jsplumb适用于必须绘制图表的Web应用程序,例如类似于Visio的应用程序或工作流程设计器等。由于图表项目和连接的所有参数都是非常精细可控的

B. 后端框架

采用Django+Django rest framework进行前后端分离管理后端的数据库,为前端的展示提供保障。

另外生成的代码基于Pytorch,但上一届生成时采用了硬编码,仅仅单独针对了minst手写数据集,这部分未来会被修改,适应更加灵活的场景。

  • Django是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站!采用了MVC的框架模式,即模型M,视图V和控制器C
  • Django REST Framework可以在Django的基础上迅速实现API,并且自身还带有WEB的测试页面,可以方便的测试自己的API。使用在前后端分离的应用模式中

C. 数据库

沿用上一届架构,采用MySql数据库。由于后端采用ORM框架,因此数据库选用比较灵活。

D. Web引擎

Apache和Nginx均可。考虑采用nginx + uwsgi方式部署。

  • nginx 是一个开源的高性能的 HTTP 服务器和反向代理:处理静态文件和索引文件效果非常高;非常注重效率;稳定性高,配置简洁;并有强大的反向代理和负载均衡功能

  • uWSGI 是一个 Web 服务器,它实现了 WSGI 协议、uwsgi、http 等协议。Nginx 中HttpUwsgiModule 的作用是与 uWSGI 服务器进行交换

E. 云环境

往届由学校提供相关资源,今年受到疫情影响,暂未公布具体情况。但根据往届情况来看,使用一台服务器并将数据库、缓存库、存储内容部署在本机即可。

如果\(\alpha\)阶段任务完成情况较好,实现了主要的核心功能,我们就可以尝试使用GPU资源实现网络模型在线学习功能。

3. 接口规格(暂定)

请求方法 请求路径 路由指向 用途
1 post /api/journal/visit/ /journal/views.py/Visit 根据用户IP更新总访问量和日访问量
2 get /api/journal/statistics/ /journal/views.py/Statistics 查看后台相关数据如访问量/网络数/用户数
3 get /api/NeuralNetwork/network/?id=x /NeuralNetwork/views.py/NetworkList 获取用户所有的网络模型
4 post /api/NeuralNetwork/network/?id=x /NeuralNetwork/views.py/NetworkList 更新或创建用户网络模型
5 get /api/NeuralNetwork/network/id/ /NeuralNetwork/views.py/NetworkDetail 获取id对应的网络模型
6 put /api/NeuralNetwork/network/id/ /NeuralNetwork/views.py/NetworkDetail 从客户端向服务器传送的数据取代指定的文档的内容
7 delete /api/NeuralNetwork/network/id/ /NeuralNetwork/views.py/NetworkDetail 删除id对应网络
8 post /api/NeuralNetwork/getcode/ /NeuralNetwork/views.py/gen_code 生成代码
9 post /api/NeuralNetwork/download/ /NeuralNetwork/views.py/download_project 提供代码下载
10 post /api/user/register/ /user/views.py/UserRegister 用户注册
11 get /api/user/info/ /user/views.py/UserInfo 提供用户信息

二、分析

1. 抽象 、模块化、封装

底层数据抽象化:将底层的数据访问封装成面向对象的形态(ORM)

  • 将SQL的各类操作语句,封装成OOP的操作
  • 将数据库内的数据信息,封装成OOP对象形态,方便读写
  • 将数据库结构的变动,维护成数据库迁移(migration),方便日后的不断后续开发维护

用户视图封装:支持将网络封装成模块

  • 在用户搭建神经网络,尤其是较为复杂的网络时,不会因为网络层结构的复杂而眼花缭乱
  • 我们在经典模型中提供一些组建好的网络模型,用户可以随时拖动该模块进入框内进行连接,而不需要关系模型内部结构
  • 支持用户自己封装一些基本块,随时调用并嵌入到他们自己的模型中去,供用户自己创建模块的超参数

RESTful API

  • 传统的Web App是后端与前端写在一起。这样做的缺点是,前端和后端互相干扰,能够通过模板引擎中的参数随意修改对方的值。显然,这样的开发方式是不利于信息的封装的。

  • 我们的设计使用了RESTful API,前端只需要在特定的时候调用后端提供的API,就可以获得其想要的数据;后端只需要为前端提供API,无法干涉前端的运作方式。如此,前后端都被各自封装起来,相互透明,内部信息不会对外界暴露,只通过API来交换信息,做到了信息的封装和隐藏。

2. 界面和实现的分离

我们采用的前后端分离方案,就是由后端提供统一的RESTful API接口,前端调用以获得数据。

我们组的前端开发人员负责编写前端页面的代码,后端开发人员负责编写后端代码,两组人员之间没有交叠,可以并行开发,靠的就是这一套设计得当的API。RESTful API传递的是与语言环境无关的json格式数据,借此我们做到了完全的前后端分离。

3. 如何处理错误情况

当服务器出现意外,返回错误的信息时,前端会及时根据HTTP Status Code判断发生了什么异常,并给予用户弹窗提醒。对于最常见的没有找到目标对象的错误,前端会根据后端提供的信息,给用户以详细的提示和操作指导。

4. 应对变化的灵活性

由于前后端是分离开发的,因此在遇到新的需求或需求变更时,只需要新增或修改一下API接口,便可以前端后端同步进行开发,以实现新的需求。由于后端和前端都有良好的模块化特性,许多新需求变更只需要编写一个简单的模块,再将其嵌入整个系统便可以解决。

5. 对大量数据的处理能力

我们的项目的核心功能是在前端由可视化模型生成代码,生成过程不会产生大量的数据。同时,两次提交请求之间会有较大的间隔,模型简单且数量有限,可以应对大多数情况。

而如果我们实现在线训练功能,最主要的瓶颈还是数据模块,针对不同的模型,数据量可能会变得相当地大,如果我们提供了在线训练功能的话,需要用户将数据导入网站或者提前准备好大数据。

Google Colab已经提供了一个相当强大的在线训练平台,提供了T4的GPU和大存储空间,提供给用户在线training及inference,对于大数据,我们可以借鉴他们的处理方式。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部