施鹭
(芜湖职业技术学院 安徽省芜湖市 241006)
云文档系统主要为了满足师生可以实时的、便捷的将课程教学过程中的文档、作业文件等保存起来,便于自己随时随地查看,同时,通过账号管理,让师生拥有自己独立的存储空间,文件资料存储安全可靠。文档系统中,能够为师生提供分享文档,收藏文档,点赞,评论等社交类功能,使得云文档系统更好的增加一些用户的粘性。
云文档系统的用户角色分为两类即可,普通用户(学生用户或者教师用户)和管理员。普通用户通过该系统完成注册后,进行邮箱激活账号,登录系统后,可以查看自己的笔记本列表,进行查看笔记列表,创建笔记本,新建笔记等基本的数据操作。同时,可以查看到别人分享的笔记,点赞或将别人分享的笔记收藏。对于自己的笔记本和笔记,可以进行移到回收站,清空回收站操作。
系统的管理员角色在系统初始化运行的时候自动配置完成,管理员可以查看到系统中的全部用户数据、博客数据,提供多种方式的数据检索,对用户和笔记数据可以删除或标记无效。此外,系统还应该提供用户密码找回、重置密码等功能。
云文档系统在满足用户使用的基本功能的前提下,充分考虑到笨系统应用在高校校园内的这一实际应用场景,利用学校内部云机房实现系统的分布式部署,系统的技术架构需要设计合理、高可用,满足一定量的用户并发需求。软件设计上采用前后端分离开发,其中,使用Java 语言开发服务器程序,并部署在高配置的核心机房Web 服务器上,向外部提供开发的Restful 接口。前端的开发分为PC 端程序和微信小程序端,使用当前流行、性能较好的Vue 开发,小程序段使用微信官方提供的技术栈并结合WeUI 组件库完成高效的前端程序开发。数据存储方面,基于大数据Hbase 数据库集群存储普通用户的笔记本数据和笔记数据,因此需要组织高校内的各个系部机房,组件Hadoop 分布式集群,这种模式的好处是充分利用已有硬件资源的存储能力和计算能力,同时也预留了系统后期的扩展空间,困难点是需要高校行政管理参与进来,来协调安排各个系部管理机房服务器的日常维护工作。
数据的存储和计算利用校内网,从安全和经济角度,将Web应用服务器部署在校内外的核心机房,通过端口映射技术,使用外网普通用户可访问云文档系统(认证和授权后)。整个系统的拓扑结构如图1所示。
HBase 是一个分布式的、面向列的开源数据库,HBase 不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库,利用HBase 技术可在廉价PC Server 上搭建起大规模结构化存储集群。
图1:系统的拓扑结构
HBase 集群的搭建利用了校园内部机房闲置的多台服务器完成,HBase 集群的安装部署过程是:
(1)选好Linux 服务器,设计规划好集群各个节点主机的主机名、地址分配,配置好基本的网络参数、地址等;
(2)配置时间服务器,同步集群各个节点的日期时钟;
(3)配置完成Hadoop 集群;
(4)配置完成zookeeper 集群;
(5)上传HBase 安装程序,解压缩,按照设计方案,修改各个配置文件;
(6)启动HBase 集群;
(7)测试访问HBase 集群。
云文档系统的管理后台使用SpringBoot+SpringSecurity 开发完成,前端使用Vue 技术栈完成。软件的设计采用前后端分离方式,后端负责与底层数据库交互,提供给前端开放的REST 接口。通过HTTP 请求的不同类型的请求方式(GET、POST、PUT、DELETE)完成对数据的增删改查,数据的交换格式使用容易解析的JSON,可以较好的将数据与具体的业务实现细节隔离开,提供完整有效的操作返回状态参数,有效的解除了前后端的耦合性,同时也方便系统的功能修改和后期功能的扩展。
本系统的数据存储,根据系统架构设计,使用了Hbase 数据库、MySQL 数据库和Redis 数据库。其中,Hbase 数据库存储了所有用户的文档数据,文档数据考虑到系统后期的可扩展性,因此是基于校园内部可用的存储节点构建出的Hbase 集群来存储数据的。MySQL 数据库部署在校园的核心机房内部,主要是存储所有教师用户、学生用户的账号信息、核心的业务数据信息等。Redis 缓存数据库中,存储了用户和自己笔记本的对应数据信息,加快了用户在加载云文档系统首页的速度。
表1:云笔记本表whit_book
表2:whit_document
HBase 数据库表主要有用户的云笔记本表whit_book、用户的云笔记表whit_document。
表1 中,Rowkey 的设计是用户id 加上一个时间戳值,列簇bookInfo,包含笔记本名字bookName 列,笔记本创建时间creatTime 列,笔记本状态status 列,该笔记本下包含关联的笔记(云文档)列,documentList 列,该列是一个json 数据格式的数组,每一个json 对象元素记录一个文档的摘要信息,包含文档的行键rowkey,文档的标题、创建时间createTime、文档的状态status 等。
表2 中,Rowkey 的设计是用户id 加上一个时间戳值,列簇documentInfo,包含文档的标题title 列,文档创建的时间createTime 列,文档的状态status 列,文档的完整内容content 列等。
MySQL 关系数据库的表设计,首先主要是和用户、角色、权限相关的表,除此之外,云文档业务相关的表有:云笔记本表、云文档表、用户收藏文档表、用户删除文档表等。
用户表sys_user、权限表sys_permission、角色表sys_role、菜单表sys_menu、用户角色关系表sys_user_role、角色权限关系表sys_role_permission、角色菜单关系表sys_role_menu。本系统的权限模块共涉及到7 张表。
云文档系统的最终用户,可以在校内网登陆使用本系统,也可以在校外网络,通过部署在公网云上的服务器,映射到内网的私有Web 服务器,在登陆的时候,通过账号和密码,查询用户表sys_user 进行校验,完成用户身份认证,返回的JSON 格式的数据中,同时包含有该用户的角色归属和权限列表,在客户端本地化保存后实现授权等操作。
用户是用户登陆系统,完成认证后,查看到该用户所有笔记。在页面的JavaScript 代码部分,通过页面全局加载方法($(function(){})),采用ajax 方式调用云文档系统的后台,查询用户所有笔记本列表。后台通过登录名loginName 从redis 中查询出笔记本列表信息,返回给前台。如果redis 中查不到,则需要向HBase 中查询,同时将HBase 中查询到的数据,缓存到redis 中。
增加笔记本功能,用户点击增加笔记本按钮,输入笔记本名称,点击确定,ajax 发起后台请求。后台接受参数为“笔记本名称”,生成信息,存到redis 和HBase 中。此处会产生事务,由于HBase不支持事务,需要在这里自行设计事务处理机制:HBase 存储成功,此事务成功,HBase 存储失败,删除redis 中的内容,返回失败。
修改笔记本名称,双击笔记本名称,弹出修改笔记本对话框,重新输入名称,点击确定,发起ajax 请求后台接受参数,修改redis 和HBase 信息,接着事务的处理同上。
删除笔记本,点击删除按钮,确定删除,发起ajax 请求,后台查询笔记本中是否包含笔记信息,如果包含,提示删除先笔记,如果不包含,删除redis 和HBase 中的笔记本即可,接着事务的处理同上。
查询笔记本下的所有文档(笔记),点击笔记本时,查询笔记本下的所有文档(笔记)。通过笔记本rowKey 到redis 中查询笔记列表,如果redis 查询不到,从HBase 中查询,同时缓存数据到redis。
新建云文档,点击新建文档按钮,输入新文档名称,点击确定,发起ajax 请求,后台接收参数“云文档名称”,生成信息,存到redis 和HBase。
查看文档内容,点击文档的标题,发起ajax 请求信息,查询文档内容。后台接受到云文档的rowKey,从HBase 中查询该文档的内容,返还页面。
修改云文档,点击云文档后,在右侧显示栏会显示云文档的内容,修改内容或者云文档名称后,点击保存按钮,发起ajax 请求,后台修改云文档内容。
删除云文档,点击云文档删除按钮,点击确定,发起ajax 请求,后台接收参数,当前云文档rowkey,回收站接收云文档rowkey,将云文档删除到回收站。
本系统利用校园内部网络和闲置服务器设备,构建了基于Hbase 的云文档系统,系统的重点在于整合的优质的Java 生态圈开发技术,自主设计实现了一套供高校师生用户使用的云文档系统,基本满足了用户教学活动、学习生活中文档资料的保存、查看、搜索、分享管理等工作。本系统的后期,考虑开发更多的扩展功能,提供用户粘性,同时可以研究实现多端登录系统,用户的文档数据的协同同步、文档数据分享至微信用户和微信朋友圈等问题。