羅軍鋒,馮興利,洪丹丹
(西安交通大學 網絡信息中心,陜西 西安710049)
創(chuàng)新人才培養(yǎng)模式,核心問題是教學管理模式的改革和創(chuàng)新。因為它所體現的辦學理念和管理特征,直接影響到人才培養(yǎng)的質量和效益。順應國家高考招生制度從現有的“學校+專業(yè)”平行模式轉變?yōu)椤皩I(yè)+學校”的平行志愿填報模式、允許學生自主選擇專業(yè)、實行完全學分制等三大人才培養(yǎng)改革趨勢,是建立適應知識經濟時代人才培養(yǎng)需要的教學管理模式和當前教學改革的一項十分重要的任務。
為了支撐學校人才培養(yǎng)改革的要求,我校從2016年開始建設新的教學管理平臺,這種新型的教學管理平臺不僅適應新時代人才培養(yǎng)的改革要求,而且采用目前先進的軟件體系架構——微服務的架構,滿足教學業(yè)務對系統的高可靠性、高適應性、高并發(fā)性等需要。
本文試圖從微服務的定義和特點出發(fā),介紹了新教學管理平臺的建設目標和特點,分析了這種新教學管理平臺的幾個關鍵技術、核心應用以及未來的挑戰(zhàn)對策等。
按照 Martin Fowler的定義,微服務是一個軟件架構模式,是通過開發(fā)一系列小型服務的方式來實現的一個應用。每一個這樣的小服務通常都是運行在自己的進程里面,并且通過輕量級的HTTP API方式進行通訊。這些服務通常會以業(yè)務模塊為界限,能夠被單獨開發(fā)部署,往往都會用自動化的部署工具來進行產品的發(fā)布。微服務的主要特點[1]包括:
微服務是松耦合的,可以獨立打包、部署、升級、回滾和彈性伸縮,不依賴其他微服務,不同的開發(fā)團隊可以并行開發(fā)和部署,避免了牽一發(fā)而動全身,提高了效率。
微服務可以按獨立進程去部署,既可以將多個相同的微服務部署到不同的服務器上,也可以在一臺服務器上部署多個微服務實例,具備高可靠的水平擴展能力。
可針對具體業(yè)務特性和團隊技能為一個服務選擇最合適的語言、框架和數據庫。
面向國家重大教育教學改革和學校實際教學要求,以服務廣大教師、學生和教學資源為根本,以實現教與學全生命周期更加規(guī)范化、精細化、精準化、國際化管理為方向,需要建立一個符合學校人才培養(yǎng)的模式,適應學校教育教學改革要求、體現先進教學管理理念,能夠為學校教學質量的提升提供具備強有力支撐能力的教學管理平臺。
新的教學管理平臺必須支持的內容包括:①支持大類招生與分流管理;②支持完全學分制下教學管理和選課制度;③支持“通識教育+寬口徑專業(yè)教育”的個性化培養(yǎng)方案;④支持本碩博貫通式培養(yǎng)的教學要求;⑤支持學生自主選擇專業(yè)、課程和授課教師,及彈性學制下的學籍管理制度;⑥支持校、院、系三級教學組織架構下靈活的教學組織管理與服務;⑦支持各類教學資源的管理與績效分析。
新的教學管理平臺緊緊圍繞學校教學管理的業(yè)務,建設“學生”、“課程”、“方案”、“成績”、“教學資源”等教學業(yè)務核心基礎數據庫,同時制定規(guī)范的、標準的編碼規(guī)則。以“微服務”的架構,“組件式”的設計框架和思路,梳理建設學校教務系統的各大業(yè)務服務應用中心。
在新的教學管理平臺建設中,我們引入了基于微服務架構的體系框架,以解決傳統平臺的諸多問題,新的教學管理平臺的體系框架如圖1所示。
圖1 新教學管理平臺總體框架圖
該平臺主要由數據層、服務組件層 、業(yè)務組件層、用戶訪問層組成。數據層以主數據管理平臺為基礎,為上層提供所需的數據服務,包括數據的存儲服務、轉換服務、清理服務等等;服務組件層是將通用的業(yè)務規(guī)則、資源調度、選課算法模型、教學評價模型進行抽象打包,形成通用的組件為各類教學業(yè)務提供服務,這樣的好處就是將算法、模型從煩瑣的業(yè)務邏輯中解脫出來,后期算法模型的改變不會影響到業(yè)務邏輯的處理;業(yè)務組件層主要負責各類教務業(yè)務的處理;用戶訪問層為各類用戶提供人性化的服務。本平臺采用了目前流行的、開源的Spring Cloud來實現,其中的關鍵技術主要包括:
拆分一般包括橫向拆分、縱向拆分。縱向拆分是總結出系統中所有通用的服務,橫向拆分是根據業(yè)務的不同進行的拆分。高校教務日常運行業(yè)務是非常復雜的,系統建設首先面臨的問題就是針對教學業(yè)務的服務拆分,通過認真梳理,依據“先縱再橫”的原則進行拆分。最終我們將整個教學業(yè)務劃分為8個中心,劃分的基本原則是每個中心相對獨立。每個中心圍繞一個業(yè)務主題,具體再拆分為若干個服務,如課程中心里面包括課程管理服務、課程查詢服務、開課服務等等。最終形成了8個中心83個服務。詳細如表1所示。
表1 新教務系統業(yè)務拆分詳細表
微服務架構中保證服務的運行要解決以下兩大問題:第一個就是服務消費方如何發(fā)現服務的提供方;第二個就是服務的消費方如何以某種負載均衡策略訪問服務提供方實例。這些問題主要是通過引入代理來解決,根據代理在架構中的位置,目前有3種架構,經過分析,我們使用了以下這種架構(見圖2)。這種模式一般需要獨立的服務注冊中心組件配合,服務啟動時自動注冊到注冊中心并定期報心跳,客戶端代理則發(fā)現服務并做負載均衡。
圖2 客戶端嵌入式代理模式
在Spring Cloud中,Eureka負責微服務架構中服務治理功能,實現服務實例的自動化注冊與發(fā)現;Ribbon是負載均衡器,負責自動從Eureka Server發(fā)現服務,然后基于某種負載均衡算法幫助服務消費者去請求服務。這兩個就提供了服務運行的基本基礎,再加上Zuul的動態(tài)路由、HyStrix這個熔斷器避免發(fā)生雪崩等,共同保障了服務的整體運行平穩(wěn)。圖3就是在Spring Cloud中的完整運行架構。[2]
圖3 微服務平臺運行架構
為了更好地發(fā)揮微服務的優(yōu)點,最大限度地減少業(yè)務需求變動對系統的影響,在應用組建與Web應用上實現分離,如圖4所示。
圖4 Web應用、業(yè)務組建與領域模型組建的關系圖
新教務管理平臺采用“應用-組件分離架構”,將表現層與業(yè)務邏輯層徹底解耦,組件通過API(Webservice方式),支撐多個應用。
(1)Web應用層直接面向用戶訪問,提供了教務平臺所需的全部用戶交互界面,技術語言構成上基本全為Html/CSS/JS,通過調用組件提供的API,來實現業(yè)務邏輯與數據讀寫。
(2)組件層只提供 API接口(Webservice 方式),不提供可視化用戶界面,其中組件層又根據業(yè)務相關度,分為業(yè)務組件和基礎通用型組件。
(3)各個Web應用之間都是獨立無耦合調用的。一個業(yè)務組件提供的API支撐多個應用 (如課程中心,支撐課程查詢、課程管理、課程申請等多個應用)。
如針對課程中心,具體應用的用戶角色功能如圖5所示:
圖5 課程中心業(yè)務用戶角色功能圖
在課程中心,通過對學校教學業(yè)務的梳理,我們認為給院系一級主要提供課程查詢、新開課申請,給師生提供的主要是課程查詢;給教務處提供的就相對復雜,包括課程的管理、查詢、新開課的申請,課程管理又細化為課程停開、課程的增刪改查等。
通過分析,這三類用戶都提供查詢服務,只是權限大小、范圍不同,因此,我們將有關權限的功能全部抽象出來,放到平臺的基礎通用組件中,供全平臺調用。針對課程中心上面提到的課程查詢服務,我們認為其不僅是為課程中心提供服務,還要為其他系統,如選課系統提供服務,因此設計為業(yè)務通用組件,其接口是業(yè)務域開放;其他的服務,我們均設計為業(yè)務組件,其接口是組件內開放,這兩種形成標準的接口供上層調用,最終將業(yè)務與展現實現分離。
圖6 課程中心應用組件的功能和接口關系圖
最終,為滿足課程中心系列用戶總體功能需求,形成的應用和組件的功能及接口劃分如圖6所示。
如圖6所示,課程查詢這個服務,我們根據查詢定位的不同,提供兩種接口,接口kcQueryAll提供返回所有列表形式的課程,kcQuery這個接口提供返回單個課程表單形式的詳細信息的課程;根據展現層不同的需求,調用不同的接口,這兩個接口均通過操作底層數據庫課程表T_KC_KCB來提供需要的結果。經過梳理,課程中心這個組件共提供17個不同的與課程有關的接口,包括課程的增刪改查等??傊?,通過課程中心這個組件,我們就將課程相關的接口建立起來了,這樣方便了上面各個微服務具體應用的調用。
本文結合學校教務的實際改革需要,提出了一種基于微服務架構的教務平臺的建設思路。這個平臺不僅能夠解決教務實際運行中業(yè)務多變的實際需求,而且能夠大大減少開發(fā)成本,縮短開發(fā)周期,截至目前,系統運行穩(wěn)定,很好地支持了學校人才培養(yǎng)改革。