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