遲明秋
(徐州醫(yī)科大學(xué) 現(xiàn)代教育技術(shù)中心,江蘇 徐州 221004)
本文介紹的高校內(nèi)網(wǎng)平臺軟件的主要服務(wù)對象為大學(xué)教師、學(xué)生以及校外有關(guān)單位人員。其提供的服務(wù)內(nèi)容也主要圍繞師生展開?,F(xiàn)有的應(yīng)用包括成績查詢教務(wù)系統(tǒng)、一卡通校園卡消費(fèi)查詢,以及更加復(fù)雜的辦公自動化(Office Automation,OA)流程管理系統(tǒng)等。在本文中,我們將分別從系統(tǒng)軟硬件架構(gòu)兩方面來闡述高校內(nèi)網(wǎng)門戶軟件平臺(基于東軟產(chǎn)品),并對其設(shè)計(jì)的優(yōu)劣提出評價(jià)。
高校內(nèi)網(wǎng)門戶軟件平臺其主要目的是建立高校各個(gè)業(yè)務(wù)軟件系統(tǒng)的匯聚中心,通過中央認(rèn)證服務(wù)[1](Central Authentication Service,CAS)間接聯(lián)入集成其他業(yè)務(wù)系統(tǒng),并利用其靈活的模塊化的界面管理功能,有選擇地摘取其他業(yè)務(wù)系統(tǒng)的相關(guān)信息并顯示在主界面上,例如公共通知、郵件信息、校內(nèi)新聞、個(gè)人辦公房產(chǎn)等等。高校內(nèi)網(wǎng)門戶軟件平臺同時(shí)還自帶一些常用服務(wù)功能,例如:萬年歷、站內(nèi)信等等。這些功能可能與某些業(yè)務(wù)系統(tǒng)有重疊,在該軟件的部署實(shí)施過程中,軟件開發(fā)團(tuán)隊(duì)將根據(jù)客戶情況進(jìn)行選擇,然后針對特定需求對程序進(jìn)行修改。這些需求就要求校園內(nèi)網(wǎng)平臺具備良好的可擴(kuò)展性、靈活的界面特征。根據(jù)觀察和分析,東軟的產(chǎn)品基本上兼?zhèn)淞溯^好的可擴(kuò)展性和一定的界面靈活性。
東軟研發(fā)的這款高校內(nèi)網(wǎng)門戶軟件平臺在系統(tǒng)整體架構(gòu)方面是典型的多層Web應(yīng)用,這種分層式架構(gòu)有利于軟件應(yīng)用的更改和發(fā)布。在此Web應(yīng)用程序中,有兩個(gè)程序同時(shí)運(yùn)行:(1)存在于服務(wù)器上并響應(yīng)HTTP請求的代碼。(2)存在于瀏覽器中并響應(yīng)用戶輸入的代碼。哪些代碼應(yīng)該在服務(wù)器上運(yùn)行,哪些代碼在瀏覽器端執(zhí)行,是Web開發(fā)人員在開始編寫應(yīng)用程序時(shí)必須決定的許多問題之一。在東軟公司制作的此款高校內(nèi)網(wǎng)平臺軟件中,服務(wù)器端代碼具備以下特征:服務(wù)器端的語言/框架如Java或C#,這些代碼應(yīng)該在服務(wù)器上運(yùn)行并響應(yīng)HTTP創(chuàng)建用戶最終看到的頁面,這一部分內(nèi)容是由在網(wǎng)絡(luò)服務(wù)器apache上運(yùn)行的Java產(chǎn)生HTMLl發(fā)送到瀏覽器,產(chǎn)生的HTMLl與JavaScript配合后運(yùn)行。服務(wù)器端的語言還生成XML或者Json等純數(shù)文件,提供并配合JavaScript 使用,其他還包括存儲持久性數(shù)據(jù)文件或戶配置文件。以上是服務(wù)器端代碼特征,而客戶端代碼則應(yīng)具備以下特征,首先其所使用的語言包括:HTMLL,CSS和JavaScript,在此基礎(chǔ)上,還有許多第三方開發(fā)的基于[CSS[HTMLLJS]語言的框架和類庫可以使用,最后由用戶瀏覽器解析成展示內(nèi)容。
高校內(nèi)網(wǎng)平臺軟件服務(wù)器端的Java程序開發(fā)主要遵循SOLID原則,當(dāng)設(shè)計(jì)類和模塊時(shí),遵守 SOLID原則[2]可以讓軟件更加健壯和穩(wěn)定。
S—SRP單一職責(zé)原則,表明一個(gè)類有且只有一個(gè)職責(zé)。一個(gè)類就像容器一樣,它能添加任意數(shù)量的屬性、方法等。然而,如果你試圖讓一個(gè)類實(shí)現(xiàn)太多,很快這個(gè)類就會變得笨重。
O—OCP開放封閉原則指出,一個(gè)類應(yīng)該對擴(kuò)展開放,對修改關(guān)閉。
L—LSP里氏替換原則指出,派生的子類應(yīng)該是可替換基類的,也就是說任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn)。
I—ISP接口隔離原則,表明類不應(yīng)該被迫采用無法使用的方法,也就是說一個(gè)接口應(yīng)該擁有盡可能少的行為。
D—DIP依賴倒置原則,表明高層模塊不應(yīng)該依賴低層模塊;相反,他們應(yīng)該依賴抽象類或者接口。
在數(shù)據(jù)庫設(shè)計(jì)上高校內(nèi)網(wǎng)的數(shù)據(jù)庫設(shè)計(jì)重復(fù)考慮到國內(nèi)省屬高校的組織結(jié)構(gòu),人員管理,與其他系統(tǒng)的數(shù)據(jù)共享和交換,遵循國家以及教育委員會制定的數(shù)據(jù)庫命名法則。該項(xiàng)目選用Oracle為數(shù)據(jù)庫工具軟件,并在數(shù)據(jù)中心建設(shè)過程中,從他業(yè)務(wù)系統(tǒng)中獲取核心業(yè)務(wù)數(shù)據(jù)初步建立數(shù)據(jù)倉庫,存儲經(jīng)過過濾的業(yè)務(wù)系統(tǒng)的歷史數(shù)據(jù),為學(xué)校決策系統(tǒng)和未來的大數(shù)據(jù)分析平臺(常熟理工的校園情報(bào)分析軟件與360網(wǎng)神軟件)提供數(shù)據(jù)支持,分析并明確了各個(gè)業(yè)務(wù)系統(tǒng)集成必須使用的通用共享數(shù)據(jù)字典,以解決數(shù)據(jù)孤島問題。
單點(diǎn)登錄,東軟高校內(nèi)網(wǎng)軟件的一個(gè)核心組件是CAS,它執(zhí)行Web的單點(diǎn)登錄協(xié)議,其目的是允許用戶訪問多個(gè)應(yīng)用程序,同時(shí)只提供一次證書(例如用戶ID和密碼),它還允許Web應(yīng)用程序在不訪問用戶的安全憑據(jù)(如密碼)的情況下對用戶進(jìn)行認(rèn)證。從結(jié)構(gòu)上看CAS包含兩個(gè)部分:CAS Server和CAS Client。CAS Server需要獨(dú)立部署,主要負(fù)責(zé)對用戶的認(rèn)證工作;CAS Client負(fù)責(zé)處理對客戶端受保護(hù)資源的訪問請求,當(dāng)用戶需要登錄時(shí),重定向到CAS Server,東軟高校內(nèi)網(wǎng)平臺CAS 最基本的協(xié)議通信過程遵循以下流程。
(1)用戶初次請求門戶;(2)門戶在服務(wù)器端沒有找到用戶Session讓用戶重新定向到統(tǒng)一認(rèn)證服務(wù)器;(3)用戶輸入正確的用戶名和密碼;(4)統(tǒng)一認(rèn)證服務(wù)器讓用戶重新定向回門戶,請注意,重新定向的地址含有一個(gè)Ticket參數(shù);(5)(在門戶返回頁面之前)門戶拿著Ticket請求統(tǒng)一認(rèn)證系統(tǒng),換取用戶信息(一個(gè)Ticket只能用一次);(6)統(tǒng)一認(rèn)證系統(tǒng)返回用戶信息.
CAS Client與受保護(hù)的客戶端軟件應(yīng)用(例如辦公自動化系統(tǒng))部署在一起,以過濾的方式保護(hù)受限制的用戶資源。對于訪問受保護(hù)資源的每個(gè)Web請求,CAS Client會分析該請求的HTTP請求中是否包含Service Ticket,如果沒有,則說明當(dāng)前用戶尚未登錄,于是將請求重定向到指定好的CAS Server登錄地址,并傳遞Service也就是要訪問的目的的資源地址,以便登錄成功過后轉(zhuǎn)回該地址。用戶在第3步中輸入認(rèn)證信息,如果登錄成功,CAS Server隨機(jī)產(chǎn)生一個(gè)相當(dāng)長度、唯一的、不可偽造的 Service Ticket,并緩存以待將來驗(yàn)證,之后系統(tǒng)自動重定向到Service所在地址,并為客戶端瀏覽器設(shè)置一個(gè)Ticket Granted Cookie,CAS Client在拿到Service和新產(chǎn)生的Ticket過后,在第5步中與 CAS Server進(jìn)行身份核實(shí),以確保Service Ticket的合法性。在該協(xié)議中,所有與CAS的交互均采用SSL協(xié)議,以確保ST和TGC的安全性。協(xié)議工作過程中會有兩次重定向的過程,但是CAS Client與CAS Server之間進(jìn)行Ticket驗(yàn)證的過程對于用戶是透明的。另外,CAS 協(xié)議中還提供了Proxy(代理)模式,以適應(yīng)更加高級、復(fù)雜的應(yīng)用場景,具體介紹可以參考CAS 官方網(wǎng)站上的相關(guān)文檔。
該軟件系統(tǒng)部署的網(wǎng)絡(luò)環(huán)境是比較復(fù)雜的,要兼顧考慮安全和設(shè)備性能兩方面,在實(shí)際的運(yùn)用中,某些主機(jī)需要對外提供服務(wù),為了更好地提供服務(wù),同時(shí)又要有效地保護(hù)內(nèi)部網(wǎng)絡(luò)的安全。在高校內(nèi)網(wǎng)平臺軟件項(xiàng)目中,我們將這些需要對外開放的主機(jī)與內(nèi)部的眾多網(wǎng)絡(luò)設(shè)備分隔開來,根據(jù)不同的需要,有針對性地采取相應(yīng)的隔離措施,這樣便能在對外提供友好的服務(wù)的同時(shí)最大限度地保護(hù)了內(nèi)部網(wǎng)絡(luò)。針對不同資源提供不同安全級別的保護(hù),可以構(gòu)建一個(gè)DMZ區(qū)域[3],DMZ可以為主機(jī)環(huán)境提供網(wǎng)絡(luò)級的保護(hù),能減少為不信任客戶提供服務(wù)而引發(fā)的危險(xiǎn),是放置公共信息的最佳位置。DMZ是架設(shè)在服務(wù)器與客戶端之間的一個(gè)中間媒介,出于網(wǎng)絡(luò)安全因素的考慮,在Firewall控制下不是所有的端口都能夠允許被外網(wǎng)自由訪問。Corporate network中開放了https端口號443和http端口號80,而Automation network開放了端口102,它的作用是負(fù)責(zé)Semantic communication。Automation network與Corporate network之間無法通過端口直接互聯(lián),這正是防火墻所要起到的保證網(wǎng)絡(luò)安全的作用。為了讓兩個(gè)網(wǎng)絡(luò)之間能夠安全互聯(lián),DMZ起到了一個(gè)中間服務(wù)器的作用。Corporate network和Automation network可以把無安全隱患的信息放置到DMZ數(shù)據(jù)庫上提供給外網(wǎng)訪問。
在東軟公司負(fù)責(zé)的高校內(nèi)外軟件平臺項(xiàng)目中,部署了基于反向代理的負(fù)載均衡,應(yīng)用軟件Nginx是一個(gè)Web服務(wù)器,它可以被用來作為反向代理服務(wù)器,負(fù)載平衡器和HTTP緩存。反向代理(Reverse Proxy)方式是指以代理服務(wù)器來接受Internet上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給Internet上請求連接的客戶端,此時(shí)代理服務(wù)器對外就表現(xiàn)為一個(gè)反向代理服務(wù)器。Nginx使用異步事件驅(qū)動的方法來處理請求,Nginx的模塊化事件驅(qū)動架構(gòu)可以在高負(fù)載下提供更可預(yù)測的性能。HTTP代理與Web服務(wù)器特性,Nginx的編寫性能明顯優(yōu)于Apache Web服務(wù)器。在為靜態(tài)文件提供服務(wù)時(shí),Nginx使用的內(nèi)存比Apache要少得多,并且每秒可以處理大約4倍的請求。
東軟的高校內(nèi)網(wǎng)項(xiàng)目,采用流行的多層架構(gòu)、Nginx網(wǎng)絡(luò)服務(wù)器、Database服務(wù)器,此項(xiàng)目使用Ngnix軟件進(jìn)行負(fù)載平衡,沒有考慮使用硬件進(jìn)行負(fù)載平衡如NetGear load balancer[4]。
總結(jié),東軟的高校內(nèi)網(wǎng)軟件平臺在代碼設(shè)計(jì)上采用了當(dāng)下比較先進(jìn)的設(shè)計(jì)思路,兼顧了穩(wěn)定,安全的需求,并考慮了擴(kuò)展性和模塊化。在硬件配置上考慮了用戶流量的擴(kuò)展,在網(wǎng)絡(luò)規(guī)劃上平衡考慮到了網(wǎng)絡(luò)安全和用戶流量,可以認(rèn)為其是一款優(yōu)秀的軟件和比較成功的項(xiàng)目。