基于Spring Boot的源码资源托管平台设计与实现
2021-02-04戴家树杨星雨林晓康
戴家树,徐 涛,杨星雨,林晓康
(安徽工程大学计算机与信息学院,安徽芜湖 241000)
0 引言
在编程和信息技术爆炸性发展的21世纪,以互联网为核心的计算机技术已经渗透到了各行各业.阅读源码是提高从业人员技术水平的一条公认的必经之路.一般的源码资源托管平台操作繁琐,用户体验和发现优质源码的能力不足,与此同时越来越多的开发者开始重新关注基于云的开发者生态系统,这与未来的源码资源托管平台的发展潜力完全一致.
为了解决上述现况,在基于Spring Boot的源码资源托管平台[1]中,普通用户具有前端查看、主页、已下载代码、用户中心、发布代码、失效代码、资源管理等功能;管理员具有统计信息、资源管理、资源类型管理、用户管理、评论管理、友情链接管理等功能,同时还外加了推荐系统以便帮助用户发现优质源码.拥有这样一个平台,可以对提升自身能力、扩展眼界有巨大帮助.
1 系统分析
1.1 设计定位
想要了解一种技术,都存在一定的入门壁垒,这不利于技术的发展和革新,所以作为推广源码资源的平台,其操作应该是无门槛、简单的.它可以满足无论从事何种开发的开发者,都可以从该网站上获取相应的源码以供阅读学习[2],获取经验教训,找寻灵感,认识各个领域的大牛.其次,作为一种托管平台,用户不必实时带着自己的笔记本来回奔波,只需要从平台云端下载托管的代码,就可以免除物理机器的限制和地域的隔离,使同行之间的交流变得十分方便,解放开发者的思绪.最后,该平台还需要拥有发现优质源码的能力,给用户减少时间成本并获得良好的体验.
1.2 数据库设计结构
该系统使用MySQL[3]数据库,按照基本业务需求设计了7张表,分别是资源类型表、源码资源表、评论表、消息表、用户表、用户下载和友情链接表.根据实际的需求,分别针对源码资源表和用户表、源码资源表和资源类型表设置相应的外键,实现连表查询等基本数据操作.同时为了保证系统数据的完整性要求,在用户修改资源内容等方便设置事务,并使事务符合ACID要求,数据库E-R图1所示.
1.3 功能需求
系统包括前端和后端两个部分,前端的功能设计有:前端查看、我的主页、已下载代码、用户中心、发布代码、失效代码、资源管理等基本功能;后端的功能设计包括:统计信息、资源管理、资源类型管理、用户管理、评论管理、友情链接管理等基本功能,最后为了实现快速找寻优质代码的需求,增加的各类榜单前端展示功能;此外为了提高智能性,在系统中使用基于ALS算法的离线推荐功能,使系统智能化.其系统业务如图2所示:
1.4 性能需求
为保证源码资源托管平台可以稳定、安全、高效的运行,结合企业实际情况,系统应当达到以下性能需求:系统由于通信的需求会存在一定的延迟,并且需要等待系统响应时间,因此为了能够缩短这一部分代码执行时间,将其压缩到系统能够接受的限度、同时也应该兼顾多线程和高并发的需要.系统的安全性也是重中之重.系统须保证数据安全,防止数据异常和非法访问数据.为了让用户有更好的体验,系统的操作应该是简单和提示信息应该是一目了然的.
2 技术支撑
2.1 Spring Boot技术
该系统的基础框架是Spring Boot,基于其Maven插件,可以创建可执行的JARs和WARs;内嵌Tomcat容器,可以提供自动配置的“starter”项目对象模型以简化Maven配置;开发中自动配置Spring容器以提供准备好的特性,不需要XML配置.
2.2 Redis数据缓存
在数据存取时,使用Redis数据库完成[4].Redis是一个高性能的键值数据库,在使用时,首先初始化Redis模板,返回值实例化存储对象;之后判断Redis是否有目标资源列表;若Redis里没有资源列表,则去数据库中查询,将该资源推入相应的Redis资源类型列表;最后分页资源列表并返回当前页.
2.3 Shiro安全框架
在安全方面采用Shiro框架[5].首先验证身份信息,给予角色管理权限;在使用Shiro的配置类时:首先,一个URL可以配置多个Filter,使用逗号分割;其次,当设置多个过滤器时,全部验证通过,才视为通过;最后,部分过滤器可以指定参数其中必须设立securityManager,如果不设置,默认会自动寻找工程根目录下的login.jsp页面.在过滤链的定义中,从上往下执行,一般将/**放在最下面,authc 所有的url必须认证通过才能访问,anon所有的url可以匿名访问.
2.4 Lucene引擎搜索
全文搜索引擎采用Lucene技术.在使用Lucene搜索引擎技术[6]时,首先创建一个索引目录,然后创建一个分词器实例对象,用来找配置文件;之后创建一个索引工具的配置对象;最后创建索引,写出工具类.在使用时:为了防止脏数据的产生,设立一个互斥锁;之后引用上面创建的索引工具;在代码上传时获得上传的对象信息;最后将对象信息交给索引工具.
2.5 基于ALS的离线推荐算法
在系统智能化设计中,鉴于ALS算法是非常成熟的推荐算法之一,它的实现代码是面向大众开源的且已经有相当的巨大数据规模来训练选择更优质的模型,提高推荐的准确度.利用该算法设定的离线统计算法和离线推荐算法周期性的进行结果统计与保存,计算的结果在一定时间周期内是固定不变的,变更的频率取决于算法调度的频率.
3 系统设计与实现
3.1 注册登录模块
登录模块是系统的基础模块.在用户的登录与注册模块,为系统管理员和普通用户的详细的信息支持.该模块为系统管理员与普通用户之间建立起数据桥梁,通过用户填写个人信息完成用户注册,在登录时通过用户的注册账号和密码匹配是否正确完成登录.值得注意的是,在密码中由于在安全方面的考虑,采用md5算法对密码加密.这就在用户完成注册后,密码被md5加密,在登录时,用户提交的密码需要被md5算法加密后得到的字符串与数据库中的密码比较验证.
3.2 用户发布资源模块
该模块是系统的核心模块之一,在这个模块主要是用户来发布自己的代码链接和代码介绍.在这一过程中,用户需要选择自己代码的类型、发布的代码链接(连接需要经过系统自动审核判断它是否失效)、设置关键字和详细信息,设置积分等.在用户按了发布按钮后,管理员就会审核代码.若无敏感信息,即审核通过,在前端显示,该模块流程图如图3所示:
图3 用户发布资源模块流程图Fig.3 Flow Chart of User Publishing Resource Module
3.3 用户下载及评论模块
用户可以通过博客中对代码的描述选择是否要下载代码,若下载代码只要不是免费的资源都需要扣除相应的积分.用户评论模块与管理员审核评论是一体的.该模块是系统的后端模块之一,在这个模块主要管理员为了审核用户发布的评论.用户不能评论自己的代码和资源.更有利于管理员对评论的综合管理.当管理员通过审核后,评论可以在前端显示.
3.4 用户资源管理模块
该模块是系统的后端模块,在这个模块主要用户管理自己的代码资源链接和代码介绍是否需要修改和删除,并在前端显示自己所发布资源的各类信息和当前资源的状态(是否通过审核在前端可见),用户还有代码文档中细节修改的功能,并能快速提交,帮助用户管理代码资源.在资源修改部分,主要可以修改代码或资源的下载链接、下载积分、所属类型、是否删除等基本功能.满足用户在第一次发布后的多次修改需求.该模块页面如图4所示:
图4 用户资源管理前端页面展示Fig.4 Front Page Display of User Resource Management
3.5 管理员管理资源模块
该模块是系统的后端模块,在这个模块主要管理员为了审核用户发布的代码链接和代码介绍是否存在敏感信息——审核通过,在前端显示.除了审核以外,管理代码也可以设置该资源是否免费、是否热门、是否应该被删除,同时还有查看等功能,帮助管理员管理代码资源.与资源管理类似,在资源类型管理中主要添加、删除或修改资源种类,也可以通过Lucene搜索引擎,模糊搜索资源种类.同时对已发布的资源可以进行查看、编辑和删除等操作功能,完善了管理员的管理范围.该模块页面如图5所示:
图5 管理员管理资源前端页面展示Fig.5 Front Page Display of Administrator Management
3.6 基于ALS算法的离线推荐
离线推荐服务是综合用户所有的历史数据,利用设定的离线统计算法和离线推荐算法周期性的进行结果统计与保存,计算的结果在一定时间周期内是固定不变的,变更的频率取决于算法调度的频率[7].离线推荐服务主要计算一些可以预先进行统计和计算的指标,为实时计算和前端业务相应提供数据支撑.离线推荐服务主要分为统计推荐、基于隐语义模型的协同过滤推荐以及基于内容和基于Item-CF的相似推荐[8].对于模型,这并不一定是最优的参数选取,所以我们需要对模型进行评估.通常的做法是计算均方根误差(RMSE),考察预测评分与实际评分之间的误差.
(1)
有了RMSE,我们可以就可以通过多次调整参数值,来选取RMSE最小的一组作为我们模型的优化选择.
4 系统测试
4.1 测试环境
基于 Spring Boot 的源码资源托管平台使用 IntelliJ IDEA 在 Windows10 操作系统上启动运行,JDK为 jdk1.8,浏览器使用QQ浏览器开发版.
4.2 测试方法与内容
系统测试采用黑盒测试和白盒测试[9]相结合的方式,根据系统页面上的功能菜单以及需求进行功能测试.针对本平台,采用故障检测机制[10]判断其可靠性.
4.3 测试结果
通过对源码托管平台的测试,基本上达到了预期生成代码加快开发效率的目的,系统页面管理性以及系统拓展性在测试过程中表现优秀.
5 结论与展望
经过详细的设计、开发、测试,基于Spring Boot的源码资源托管平台已上线.通过深入考察并分析了源码资源托管平台的可发展空间,然后对该系统进行概要设计和详细设计,最终实现了基于Spring Boot源码资源托管平台.经过功能测试和负载测试,系统运行结果均良好.