- 一、概述
- 系统架构
- 系统功能
- 技术栈
在大数据的环境下,将推荐算法应用到图书交易平台上,目的在于通过个性化指导性推荐书籍和降低获取图书成本来提升用户阅读积极性及二手书利用率。与传统的离线推荐模型训练相比,系统采用离线的书籍信息、书评数据集训练推荐结果与用户隐式行为数据处理相结合,从而提高实时推荐的效果。在二手书买卖、借阅、图书馆书籍管理多种场景下都可以提供优质服务。
系统架构
在考虑系统架构设计时,需考虑后期各个模块的可维护性和可拓展性。本系统包括三个主要的子系统模块,分别是前端展示系统、后端数据管理系统以及离线数据推荐与实时数据推荐模块,就具体系统架构如上图所示。
图中的系统总体架构设计包括展示层、应用层、数据处理层和存储层四个层次,每层详细信息如下:
(1)展示层:前端页面采用 ElementUI 样式 ui 框架和 Vue.js 框架技术进行展示页面设计,在 JS 脚本中嵌入埋点逻辑,实现用户行为采集;后端数据管理系统采用后端 Django 框架自带 Admin 交互式数据库操作系统。前后端分离的架构,数据交互采用 JSON 数据格式。
(2)应用层:后端应用主要包括用户登录、用户管理、书籍信息处理、交易实现等,采用基于 python 语言开发的 Django 后端框架, MVT 的设计模式下路由模块与视图模块实现 restful api 封装,自带 admin 交互式数据库管理系统与强大的ORM模块支持 sql 数据库增删改查操作,还具备 Security 、Session 、Auth 中间件为用户登录提供辅助,选择 Django 的原因主要考虑到其丰富的组件库与优雅的设计,十分符合系统敏捷开发与快速迭代的需求。
(3)数据处理层:该层主要包括离线数据处理及 实时数据处理模块。其中,离线处理模块在实验阶段 主要将 Book-Crossing 图书评分数据集的离线数据导入 HDFS 中,由 Spark Streaming 读取 HDFS 中的离线数据再经过 MLlib 中优化后的协同过滤算法模型迭代计算生成最终推荐结果存入 Hive 数据仓库中,再由 Spark SQL 对 Hive 中的数 据进行 TOP-N 排序,产生 TOP-N 推荐结果存入 MySQL 数据库中供展示层调用。而实时数据处理模块主要是对前端页面进行埋点,本系统的埋点范围主要包括页面跳转信息、用户在页面停留时间信息、点击信息、评分信息等构成用户隐式动作信息日志并存于 Nginx服务器日志文件中,由 pyinotify 数据采集工具采集到服务器中的日志文件上传到 Kafka 消息队列中,接下来由 Spark Streaming 对 Kafka 消息队列中的数据进行数据流处理。同样通过算法模型将最终结果存入 MySQL 数据库中,应用层可读取实时结果数据展示在个性化推荐栏中。
(4)存储层:数据存储主要包括持久层软件有 HDFS、MySQL 与 Hive 数据仓库工具,为展示层、应用层、数据处理层提供数据支撑。
| 涉及技术 | 掌握程度 | 开发周期 | 替代方案 |
|---|---|---|---|
| Vue.js+ElementUI前端开发 | 有前端开发经验 | 2 weeks | 无风险 |
| python Django后端开发 | 有后端开发经验 | 2 weeks | 无风险 |
| pyinotify 日志采集工具开发 | 功能比较简单 | 2 days | 无风险 |
| kafka消息队列集群搭建使用 | 无开发经验,但有docker集群搭建经验 | 1 week | 消息队列主要在于部署学习,替代方案为redis实现简单消息队列或后端触发kafka |
| Spark 框架使用 | Java基础薄弱,无开发经验 | 2 months | 风险点主要为协同过滤算法优化以及Spark集群搭建使用,需要大量学习成本,替代方案为python surprise推荐框架 |
| HDFS分布式文件系统 | 无使用经验 | 1 week | 主要风险点在配置使用,替代方案为io处理 |
| Hive数据仓库 | 无使用经验 | 1 week | 主要风险点在配置使用,替代方案为Mysql数据库 |
| Mysql数据库 | 有使用经验 | 2 day | 无风险 |
| Nginx服务器部署 | 有使用经验 | 2 day | 无风险 |
| uwsgi服务器部署 | 有使用经验 | 1 day | 无风险 |



