蘇海鏈,沈雨絲,諶祖滕,張常斌,賴光均
(景德鎮學院,江西 景德鎮 333000)
Dubbo+Zookeeper是近年來比較流行的分布式服務的解決方案之一。Dubbo是Alibaba開源的分布式服務框架,主要是為了解決如何在網絡中安全地傳遞服務,也就是網絡通信的安全問題,不是提供方提供服務,就是消費方消費服務。Zookeeper則是一個服務中心,提供服務發現和注冊的功能,解決服務管理難的問題。它集成了分布式技術中的分布式服務,分布式服務顧名思義就是將服務分別存放在不同服務器上,根據服務占用資源的不同來分配服務器資源,通過網絡進行連接。而本方案將考試的核心功能放置在高性能的云服務器上,將不需要占用太多資源的登陸注冊、修改密碼、數據管理等功能放置在本地電腦上,以達到提高軟件響應速度和運行效率的目的。
傳統的醫師自我檢測考試往往采用筆試的方式,由于執業醫師考試周期長,會導致物質成本和時間成本較大,醫師模擬考試軟件就可以解決這一問題,用戶可以通過碎片化的時間檢測學習成果,并且可以不限地點只需要有網絡。只需要一套完整的題庫,考試試卷就可以由計算機自動生成和批改,節約時間成本,讓學習效率大幅度提高,用戶只需要專注于對知識掌握程度的測驗而不需要在考慮如何去獲取合適試卷,一切都可以由軟件自動完成。用戶可以通過軟件快速查看到考試的成績,也可以隨時隨地的生成試卷進行考試,不需要固定的時間和地點,在有互聯網的地方就可以進行考試。
基于分布式技術的臨床醫師模擬考試軟件使用Spring Boot框架進行開發。這一框架是近年來比較流行的微服務框架,在其中可以快捷地集成分布式技術,同時在Spring Boot框架中集成了SSM框架,而SSM框架則是非常流行的JavaEE企業級框架。本方案就是以Spring Boot框架集成的SSM框架搭建后端管理界面,然后集成分布式技術dubbo+zookeeper。這兩個分布式技術是比較流行的技術,使用方便快速,其優點是開發效率高、運行速度快、軟件負載高、開發成本低[1]。
①登錄注銷功能:超級管理員進行登錄,Shiro會接管賬號密碼并對賬號密碼進行核對,核對無誤則進入軟件后端。
②權限管理功能:超級管理員可以對管理員用戶和普通用戶進行降權和升權操作。
③題庫管理功能:超級管理員可以對題庫進行增刪改查的操作,可以生成excel表格。
④試卷管理功能:超級管理員可以對試卷進行增刪改查的操作,可以生成excel表格。
⑤用戶管理功能:超級管理員可以對用戶進行增刪改查的操作,可以生成excel表格。
⑥歷史考試記錄管理功能:超級管理員可以對歷史記錄進行查看并且管理。
⑦修改密碼功能:超級管理員可以對管理員和自身進行密碼管理,可以對指定用戶實施一鍵密碼還原。
⑧發布公告功能:超級管理員可以發布公告,公告會顯示在軟件首頁上。
①登錄注銷功能:與超級管理員相似進行登錄,Shiro會接管賬號密碼并對賬號密碼進行核對,核對無誤則進入軟件后端。
②試卷管理功能:超級管理員可以對試卷進行增刪改查的操作,可以查看試卷預生成,并生成excel表格。
③用戶管理功能:超級管理員可以對用戶進行增刪改查的操作,可以生成excel表格。
④歷史考試記錄管理功能:超級管理員可以對歷史記錄進行查看并且管理。
⑤修改密碼功能:管理員對自身進行密碼管理,并可以對指定用戶實施一鍵密碼還原。
⑥發布公告功能:超級管理員可以發布公告,公告會顯示在軟件首頁上
①考試功能:用戶登錄后可以選擇試卷進行測試。
②錯題查看功能:軟件會記錄下考試對應的錯題。并給出正確答案。
本系統采用SOA思想搭建,即面向服務的架構,集成了分布式技術中的分布式服務,使用Spring Boot框架進行開發,以Spring Boot框架集成的SSM框架搭建后端管理界面,然后集成分布式技術dubbo+zookeeper,使用Shiro安全框架,以及Maven進行依賴的管理,進行數據庫的設計,然后再使用逆向工程生成我們需要的代碼[2]。總體分為三層架構,控制層、服務層和數據存儲層。
控制層:服務的消費者,當相應的url請求過來,controller控制器就會去調用service公開的接口服務,使用SpringMVC框架實現,以Servlet為核心,負責接收前端數據并將處理好的數據傳遞給前端。
服務層:處理對應的業務邏輯,被消費者調用,消費者只知道暴露的接口,而不知道真正的實現類,實現類是真正業務邏輯的實現,對數據庫進行相對應的操作。
數據存儲層:采用主流的Mysql數據庫,Mysql是關系型數據庫管理系統,使用結構化查詢語言也就是SQL語言進行數據庫管理。持久化框架使用基于Java的Mybatis框架,其高度可定制化的SQL語句,高效的存儲過程以及高級的對象關系映射使得代碼編寫更加簡潔方便。

圖1 系統架構
軟件采用Dubbo+zookeeper分布式架構管理,Dubbo主要使用RPC實現服務的調用,即客戶端和服務端共用一個接口(將接口打成一個jar包,在客戶端和服務端引入這個jar包),客戶端調用這個接口,服務端實現這個端口的功能,中間的網絡通信交給框架去實現,而Zookeeper作為服務注冊中心,提供服務的發現和注冊功能,監控各個服務之間的狀態信息[3]。
通常情況下,D u b b o 節點主要有P r o v i d e r、Consumer、Registry、Monitor、Container等五種角色。Provider主要是服務的提供方,提供服務所需要公開的接口,通過注冊服務實現多個服務進行負載均衡,提高服務的并發量,同時避免出現服務的單點故障的發生,提高服務器的容錯率。Consumer主要是服務的調用方,調用服務公開的接口,本次技術上的調用采用的是最少活躍調用數負載均衡,相比于其他的負載均衡算法,該算法可以在服務機器上自動地實現性能低的機器所被調用的服務的次數更少,性能高的機器被調用的服務的次數就更高,從而實現整個集群整體性能的穩定。Registry主要是服務的注冊中心,通過將多個服務注冊到多個服務中心處,提高服務的容錯,做到一臺服務宕機,整體的服務依舊能繼續運行,同時在服務中心處實現,該技術使用Zookeeper實現,通過Zookeeper的心跳檢測機制,可以在自定義時間去檢測該服務是否處于存活狀態,同時在服務下線之后,通過服務的消費端的監測,實現自動的調整服務的負載均衡,避免出現服務的雪崩現象,導致整體的服務宕機,使用Zookeeper技術是為后續的大數據Hadoop框架使用Zookeeper做一致性。Monitor則是統計服務的調用次數和調用時間的監控中心,通過服務的調用次數,動態的進行性能優化,在服務調用次數較少的時間內,進行服務的更新,程序bug的修復。Container是服務運行容器,使用的是Spring容器,是運行服務的提供者,通過Spring容器,將服務動態地放入容器中,用于服務消費者進行調用服務[4]。
Spring Boot提供了特有的啟動器機制,并與此同時使用Maven這一管理工具,簡化了我們使用第三方jar包的流程。我們只需要通過Maven配置文件導入我們所需的啟動器就可以直接在項目中使用而不需要配置。
Spring Boot內置了SpringMVC框架,SpringMVC是一個嚴格遵循MVC模式的框架,以Servlet為核心,負責接收前端數據并將處理好的數據傳遞給前端。同時,Spring Boot還集成了Tomcat服務器,開發者在使用時就無需再外部導入服務器軟件,所以,Spring Boot是目前開發的首選框架。
該技術全部部署于Linux系統下,通過使用Linux命令和shell腳本語言來實現項目的自動化部署,同時自動收集日志文件,并定期刪除日志文件,防止日志文件過多導致服務器的內存溢出,造成服務器的崩潰。
用戶在登錄框中輸入用戶名、密碼和驗證碼點擊登錄,驗證碼功能使用JS實現,采用前端攔截的措施,使用正則表達式進行用戶名和密碼的格式限制,驗證碼無誤。前端通過Ajax方式使用post請求向后端傳輸登錄信息。后端的登陸驗證則是由shiro框架實現的。后端取到用戶名和密碼,使用如下代碼執行登錄驗證[5]。
控制層核心代碼:

數據庫采取云端存儲的形式,使用WEB架構的、以PHP語言為基礎的、對于MySQL的管理工具。它借由Web接口可以成為一個簡易方式輸入繁雜SQL語法的較佳途徑,尤其要處理大量資料的匯入及匯出更為方便。其中一個更大的優勢在于,由于phpMyAdmin跟其他PHP程式一樣在網頁服務器上執行,可以在任何地方使用這些程式產生的網頁,也就是于遠端管理MySQL數據庫,方便建立、修改、刪除數據庫及資料表。也可借由phpMyAdmin建立常用的PHP語法,方便編寫網頁時所需要的SQL語法正確性。將單一用戶表分成用戶和管理員表的原因是為了方便節約性能。當進行簡單權限管理時,超級管理員管理普通管理員而不會對用戶進行權限管理,對于普通用戶來說只需要使用功能即可。而用戶管理也不需要對用戶的權限進行更改,并且唯一具有權限管理的功能的角色只有超級管理員這一角色。其他表的設計都是為了實現對應的功能,也是為了體現數據約束的完整性[6]。
本方案使用MySQL數據庫作為唯一數據庫,設計8張數據表,分別是章節表(chapter:存放章節信息)、班級表(examclass:存放班級信息)、考卷類型表(examtype:存放試卷類型信息)、用戶表(examuser:存放用戶的賬戶信息)、考卷信息表(library:存放試卷信息的數據)、管理員表(manager:記錄管理員的各項數據)、試題表(question:存放試題信息)、考試記錄表(record:存放考試記錄)。
至此,本方案的功能基本完善,普通用戶和管理員用戶的功能也基本完成。它使用的Spring Boot框架,開發便捷,軟件功能也相對完善。它在設計之初還有許多不完善的地方,開發過程中遇到的難點重點主要有:①前期layui框架和Spring Boot使用的默認模板引擎的資源沖突問題,它會導致前端頁面顯示時出現顯示錯誤,使用靜態資源過濾解決了這個問題;②顯示的渲染問題,由于使用動態的渲染,導致使用編輯信息的功能時會使后端獲取的數據無法顯示或者顯示不完全,解決方法是在渲染表格和彈窗時添加數據,然后等所有數據加載完成后,重載表格和彈窗;③文件上傳功能也是重難點之一,復雜文件的上傳并且是在同一頁面上使用兩個并行的表單上傳文件,并返回對應路徑,遇到的問題是使用Ajax方式上傳文件會遇到文件上傳失敗或者文件獲取不到的問題。解決方法就是使用Ajax時嚴格限制上傳格式,并且在后端獲取時使用復雜文件對象接收,使用IO流的形式將文件存放到磁盤的固定位置。
開發過程中,本方案的創新點有:①使用Spring Boot框架集成dubbo+zookeeper分布式技術的應用;②使用文件上傳功能,使題庫豐富且多樣化;③使用前端框架layui搭建后端管理模塊,頁面美觀且響應速度快。