施鷺
(蕪湖職業(yè)技術(shù)學(xué)院 安徽省蕪湖市 241006)
云文檔系統(tǒng)主要為了滿足師生可以實(shí)時(shí)的、便捷的將課程教學(xué)過程中的文檔、作業(yè)文件等保存起來,便于自己隨時(shí)隨地查看,同時(shí),通過賬號管理,讓師生擁有自己獨(dú)立的存儲空間,文件資料存儲安全可靠。文檔系統(tǒng)中,能夠?yàn)閹熒峁┓窒砦臋n,收藏文檔,點(diǎn)贊,評論等社交類功能,使得云文檔系統(tǒng)更好的增加一些用戶的粘性。
云文檔系統(tǒng)的用戶角色分為兩類即可,普通用戶(學(xué)生用戶或者教師用戶)和管理員。普通用戶通過該系統(tǒng)完成注冊后,進(jìn)行郵箱激活賬號,登錄系統(tǒng)后,可以查看自己的筆記本列表,進(jìn)行查看筆記列表,創(chuàng)建筆記本,新建筆記等基本的數(shù)據(jù)操作。同時(shí),可以查看到別人分享的筆記,點(diǎn)贊或?qū)e人分享的筆記收藏。對于自己的筆記本和筆記,可以進(jìn)行移到回收站,清空回收站操作。
系統(tǒng)的管理員角色在系統(tǒng)初始化運(yùn)行的時(shí)候自動(dòng)配置完成,管理員可以查看到系統(tǒng)中的全部用戶數(shù)據(jù)、博客數(shù)據(jù),提供多種方式的數(shù)據(jù)檢索,對用戶和筆記數(shù)據(jù)可以刪除或標(biāo)記無效。此外,系統(tǒng)還應(yīng)該提供用戶密碼找回、重置密碼等功能。
云文檔系統(tǒng)在滿足用戶使用的基本功能的前提下,充分考慮到笨系統(tǒng)應(yīng)用在高校校園內(nèi)的這一實(shí)際應(yīng)用場景,利用學(xué)校內(nèi)部云機(jī)房實(shí)現(xiàn)系統(tǒng)的分布式部署,系統(tǒng)的技術(shù)架構(gòu)需要設(shè)計(jì)合理、高可用,滿足一定量的用戶并發(fā)需求。軟件設(shè)計(jì)上采用前后端分離開發(fā),其中,使用Java 語言開發(fā)服務(wù)器程序,并部署在高配置的核心機(jī)房Web 服務(wù)器上,向外部提供開發(fā)的Restful 接口。前端的開發(fā)分為PC 端程序和微信小程序端,使用當(dāng)前流行、性能較好的Vue 開發(fā),小程序段使用微信官方提供的技術(shù)棧并結(jié)合WeUI 組件庫完成高效的前端程序開發(fā)。數(shù)據(jù)存儲方面,基于大數(shù)據(jù)Hbase 數(shù)據(jù)庫集群存儲普通用戶的筆記本數(shù)據(jù)和筆記數(shù)據(jù),因此需要組織高校內(nèi)的各個(gè)系部機(jī)房,組件Hadoop 分布式集群,這種模式的好處是充分利用已有硬件資源的存儲能力和計(jì)算能力,同時(shí)也預(yù)留了系統(tǒng)后期的擴(kuò)展空間,困難點(diǎn)是需要高校行政管理參與進(jìn)來,來協(xié)調(diào)安排各個(gè)系部管理機(jī)房服務(wù)器的日常維護(hù)工作。
數(shù)據(jù)的存儲和計(jì)算利用校內(nèi)網(wǎng),從安全和經(jīng)濟(jì)角度,將Web應(yīng)用服務(wù)器部署在校內(nèi)外的核心機(jī)房,通過端口映射技術(shù),使用外網(wǎng)普通用戶可訪問云文檔系統(tǒng)(認(rèn)證和授權(quán)后)。整個(gè)系統(tǒng)的拓?fù)浣Y(jié)構(gòu)如圖1所示。
HBase 是一個(gè)分布式的、面向列的開源數(shù)據(jù)庫,HBase 不同于一般的關(guān)系數(shù)據(jù)庫,它是一個(gè)適合于非結(jié)構(gòu)化數(shù)據(jù)存儲的數(shù)據(jù)庫,利用HBase 技術(shù)可在廉價(jià)PC Server 上搭建起大規(guī)模結(jié)構(gòu)化存儲集群。
圖1:系統(tǒng)的拓?fù)浣Y(jié)構(gòu)
HBase 集群的搭建利用了校園內(nèi)部機(jī)房閑置的多臺服務(wù)器完成,HBase 集群的安裝部署過程是:
(1)選好Linux 服務(wù)器,設(shè)計(jì)規(guī)劃好集群各個(gè)節(jié)點(diǎn)主機(jī)的主機(jī)名、地址分配,配置好基本的網(wǎng)絡(luò)參數(shù)、地址等;
(2)配置時(shí)間服務(wù)器,同步集群各個(gè)節(jié)點(diǎn)的日期時(shí)鐘;
(3)配置完成Hadoop 集群;
(4)配置完成zookeeper 集群;
(5)上傳HBase 安裝程序,解壓縮,按照設(shè)計(jì)方案,修改各個(gè)配置文件;
(6)啟動(dòng)HBase 集群;
(7)測試訪問HBase 集群。
云文檔系統(tǒng)的管理后臺使用SpringBoot+SpringSecurity 開發(fā)完成,前端使用Vue 技術(shù)棧完成。軟件的設(shè)計(jì)采用前后端分離方式,后端負(fù)責(zé)與底層數(shù)據(jù)庫交互,提供給前端開放的REST 接口。通過HTTP 請求的不同類型的請求方式(GET、POST、PUT、DELETE)完成對數(shù)據(jù)的增刪改查,數(shù)據(jù)的交換格式使用容易解析的JSON,可以較好的將數(shù)據(jù)與具體的業(yè)務(wù)實(shí)現(xiàn)細(xì)節(jié)隔離開,提供完整有效的操作返回狀態(tài)參數(shù),有效的解除了前后端的耦合性,同時(shí)也方便系統(tǒng)的功能修改和后期功能的擴(kuò)展。
本系統(tǒng)的數(shù)據(jù)存儲,根據(jù)系統(tǒng)架構(gòu)設(shè)計(jì),使用了Hbase 數(shù)據(jù)庫、MySQL 數(shù)據(jù)庫和Redis 數(shù)據(jù)庫。其中,Hbase 數(shù)據(jù)庫存儲了所有用戶的文檔數(shù)據(jù),文檔數(shù)據(jù)考慮到系統(tǒng)后期的可擴(kuò)展性,因此是基于校園內(nèi)部可用的存儲節(jié)點(diǎn)構(gòu)建出的Hbase 集群來存儲數(shù)據(jù)的。MySQL 數(shù)據(jù)庫部署在校園的核心機(jī)房內(nèi)部,主要是存儲所有教師用戶、學(xué)生用戶的賬號信息、核心的業(yè)務(wù)數(shù)據(jù)信息等。Redis 緩存數(shù)據(jù)庫中,存儲了用戶和自己筆記本的對應(yīng)數(shù)據(jù)信息,加快了用戶在加載云文檔系統(tǒng)首頁的速度。
表1:云筆記本表whit_book
表2:whit_document
HBase 數(shù)據(jù)庫表主要有用戶的云筆記本表whit_book、用戶的云筆記表whit_document。
表1 中,Rowkey 的設(shè)計(jì)是用戶id 加上一個(gè)時(shí)間戳值,列簇bookInfo,包含筆記本名字bookName 列,筆記本創(chuàng)建時(shí)間creatTime 列,筆記本狀態(tài)status 列,該筆記本下包含關(guān)聯(lián)的筆記(云文檔)列,documentList 列,該列是一個(gè)json 數(shù)據(jù)格式的數(shù)組,每一個(gè)json 對象元素記錄一個(gè)文檔的摘要信息,包含文檔的行鍵rowkey,文檔的標(biāo)題、創(chuàng)建時(shí)間createTime、文檔的狀態(tài)status 等。
表2 中,Rowkey 的設(shè)計(jì)是用戶id 加上一個(gè)時(shí)間戳值,列簇documentInfo,包含文檔的標(biāo)題title 列,文檔創(chuàng)建的時(shí)間createTime 列,文檔的狀態(tài)status 列,文檔的完整內(nèi)容content 列等。
MySQL 關(guān)系數(shù)據(jù)庫的表設(shè)計(jì),首先主要是和用戶、角色、權(quán)限相關(guān)的表,除此之外,云文檔業(yè)務(wù)相關(guān)的表有:云筆記本表、云文檔表、用戶收藏文檔表、用戶刪除文檔表等。
用戶表sys_user、權(quán)限表sys_permission、角色表sys_role、菜單表sys_menu、用戶角色關(guān)系表sys_user_role、角色權(quán)限關(guān)系表sys_role_permission、角色菜單關(guān)系表sys_role_menu。本系統(tǒng)的權(quán)限模塊共涉及到7 張表。
云文檔系統(tǒng)的最終用戶,可以在校內(nèi)網(wǎng)登陸使用本系統(tǒng),也可以在校外網(wǎng)絡(luò),通過部署在公網(wǎng)云上的服務(wù)器,映射到內(nèi)網(wǎng)的私有Web 服務(wù)器,在登陸的時(shí)候,通過賬號和密碼,查詢用戶表sys_user 進(jìn)行校驗(yàn),完成用戶身份認(rèn)證,返回的JSON 格式的數(shù)據(jù)中,同時(shí)包含有該用戶的角色歸屬和權(quán)限列表,在客戶端本地化保存后實(shí)現(xiàn)授權(quán)等操作。
用戶是用戶登陸系統(tǒng),完成認(rèn)證后,查看到該用戶所有筆記。在頁面的JavaScript 代碼部分,通過頁面全局加載方法($(function(){})),采用ajax 方式調(diào)用云文檔系統(tǒng)的后臺,查詢用戶所有筆記本列表。后臺通過登錄名loginName 從redis 中查詢出筆記本列表信息,返回給前臺。如果redis 中查不到,則需要向HBase 中查詢,同時(shí)將HBase 中查詢到的數(shù)據(jù),緩存到redis 中。
增加筆記本功能,用戶點(diǎn)擊增加筆記本按鈕,輸入筆記本名稱,點(diǎn)擊確定,ajax 發(fā)起后臺請求。后臺接受參數(shù)為“筆記本名稱”,生成信息,存到redis 和HBase 中。此處會(huì)產(chǎn)生事務(wù),由于HBase不支持事務(wù),需要在這里自行設(shè)計(jì)事務(wù)處理機(jī)制:HBase 存儲成功,此事務(wù)成功,HBase 存儲失敗,刪除redis 中的內(nèi)容,返回失敗。
修改筆記本名稱,雙擊筆記本名稱,彈出修改筆記本對話框,重新輸入名稱,點(diǎn)擊確定,發(fā)起ajax 請求后臺接受參數(shù),修改redis 和HBase 信息,接著事務(wù)的處理同上。
刪除筆記本,點(diǎn)擊刪除按鈕,確定刪除,發(fā)起ajax 請求,后臺查詢筆記本中是否包含筆記信息,如果包含,提示刪除先筆記,如果不包含,刪除redis 和HBase 中的筆記本即可,接著事務(wù)的處理同上。
查詢筆記本下的所有文檔(筆記),點(diǎn)擊筆記本時(shí),查詢筆記本下的所有文檔(筆記)。通過筆記本rowKey 到redis 中查詢筆記列表,如果redis 查詢不到,從HBase 中查詢,同時(shí)緩存數(shù)據(jù)到redis。
新建云文檔,點(diǎn)擊新建文檔按鈕,輸入新文檔名稱,點(diǎn)擊確定,發(fā)起ajax 請求,后臺接收參數(shù)“云文檔名稱”,生成信息,存到redis 和HBase。
查看文檔內(nèi)容,點(diǎn)擊文檔的標(biāo)題,發(fā)起ajax 請求信息,查詢文檔內(nèi)容。后臺接受到云文檔的rowKey,從HBase 中查詢該文檔的內(nèi)容,返還頁面。
修改云文檔,點(diǎn)擊云文檔后,在右側(cè)顯示欄會(huì)顯示云文檔的內(nèi)容,修改內(nèi)容或者云文檔名稱后,點(diǎn)擊保存按鈕,發(fā)起ajax 請求,后臺修改云文檔內(nèi)容。
刪除云文檔,點(diǎn)擊云文檔刪除按鈕,點(diǎn)擊確定,發(fā)起ajax 請求,后臺接收參數(shù),當(dāng)前云文檔rowkey,回收站接收云文檔rowkey,將云文檔刪除到回收站。
本系統(tǒng)利用校園內(nèi)部網(wǎng)絡(luò)和閑置服務(wù)器設(shè)備,構(gòu)建了基于Hbase 的云文檔系統(tǒng),系統(tǒng)的重點(diǎn)在于整合的優(yōu)質(zhì)的Java 生態(tài)圈開發(fā)技術(shù),自主設(shè)計(jì)實(shí)現(xiàn)了一套供高校師生用戶使用的云文檔系統(tǒng),基本滿足了用戶教學(xué)活動(dòng)、學(xué)習(xí)生活中文檔資料的保存、查看、搜索、分享管理等工作。本系統(tǒng)的后期,考慮開發(fā)更多的擴(kuò)展功能,提供用戶粘性,同時(shí)可以研究實(shí)現(xiàn)多端登錄系統(tǒng),用戶的文檔數(shù)據(jù)的協(xié)同同步、文檔數(shù)據(jù)分享至微信用戶和微信朋友圈等問題。