1.总体框架设计图
客户端可以是PC或者是手机,通过Nginx服务器实现了HTTPS,负载均衡,反向代理,再加上云服务器集群的搭建系统的性能得到了一定的提升,同时服务中也会调用一些第三方的开放平台的api,双机热备架构的redis让缓存层的稳定性也得到一定的提升,持久化层中MySQL用来存储基本的信息,而MongoDB用来存储评论,提问信息。
1.1 进一步说明
1.整个系统的前端可分为三部分,第一是用户使用的小程序,第二是后台管理的小程序,第三是后台管理的网站,通过调用RESTful风格的API增强了系统的可扩展性,并且采用了HTTPS协议增加了安全性。
2.在Web Application Server中一共可以分为如下五个子系统,推荐系统会调用高德开放平台的API提供的位置服务与百度AI开放平台的API短文本匹配服务,而根据按期推荐的需求(查看以往期要消耗coin),两个服务要相互调用。
3.内容审核服务调用了阿里云开放平台的内容审核API,提供了初步的审核服务,后期还有特定内容人工审核的二次审核,问答、评论服务系统中问答,评论内容均会通过审核服务。信息发布系统中调用了阿里云的OSS服务提供了图像存储的服务。
4.绝大多数的查询请求会经过缓存层,增加了系统的性能,降低了数据库的压力,而双机热备的架构也增强了缓存层的性能。
数据持久化层中根据问答评论数量大价值密度低的特点选择了MongoDB来存储问答评论信息,而不是所有信息都存储在关系型数据库中。
2.系统的技术选型、开发环境,包括所采用的框架、第三方组件
- 技术选型:Java8+Mysql+MongoDB+Redis+Nginx(此处无Http服务器软件是因为使用了spring boot框架,自带tomcat)
- 开发环境:Windows 下IntelliJ IDEA+Google浏览器
- 生产环境:一台Nginx服务器,三台Web Application服务器,一台云Redis服务器,一台云Mysql服务器,一台MongoDB云服务器
- 框架:Spring boot+Spring Data Jpa + Spring Security + layUI
- 第三方插件:Maven + FastJson + LogBack +lombok
3.核心重点或技术难点
3.1 推荐系统
3.1.1相关性特征:将被发布者的个性标签基本标签,好友评论,通过短文本匹配等的方式得出具体可以转化为至少是次序级的数据,同时用户可以自己进行推荐设置,进而实现与内容特征的匹配
3.1.1 热度特征,根据用户的被浏览数,被点赞数,粉丝数三个方面来对被发布的用户进行排序,当冷启动时热度特征变得尤为重要
3.1.2环境特征,此处主要通过确定的经纬度获取指定半径内的大学将符合条件的用户纳入推荐库,并且实现实时的更新推荐库(不同地区登陆小程序实时更新推荐)
3.1.5协同特征,当推荐数量少时,将具有相似内容特征的用户的推荐库比较,分析不同用户间的相似性
3.2提高推荐系统反应速度
3.2.1根据推荐是以1期每天的业务需求,运用缓存提前将推荐结果计算出存入缓存中,同时运用缓存将访问第三方平台的token和其他查询请求(此处主要指queryByUserId)进行缓存,并且同时将服务器进行了横向的scale
3.2.2 评论量大,且价值密度低,如果直接存入MySQL中由于数据量过大可能会要对数据库进行scale out,不如直接采用文档型NoSql中的MongoDB来存储
3.2.3 对web server application进行了scale out搭建了集群提高了并发能力
3.2.4采用第三方平台oss服务来存储大量的图片,而不是自己搭建或者直接存入web application server中。
4.安全
4. 1外部安全
1.采用了HTTPS协议,比传统的HTTP要安全的多
2.对用户微信号等信息进行了加密处理
4.2内容安全
1.对用户头像,图片均会进行内容审核
2.好友评论内容审核
3.提问内容先平台审核,后被提问者审核
5.系统上线与运维
运维:系统架构中的数据库均采用云数据库,各种性能得到了一定的保证,并且利用OSS服务实现了Mysql数据库的主动备份,再者redis的双机热备架构也再次提升了缓存的稳定性而云服务器集群的搭建也大大提升了web Application的性能与可靠性