王日磊,陳 奎,張娜娜
(航空工業西安航空計算技術研究所,陜西 西安 710000)
目前,面向服務的架構具有迅速上線、高可靠、服務間松耦合的優點。JAVA作為純面向對象的語言使得開發人員更容易理解原始需求、編寫程序,并且良好的可移植性可以減少后續的部署和運行壓力;JAVA具備豐富的原生類庫,可以提升開發人員開發效率;JAVA提供對Web應用開發的支持;JAVA具有較好的安全性和健壯性,所以結合JAVA和SOA架構開發的系統就具有良好的可移植性、高效的部署性等優點。本文基于SOA模型和J2EE技術設計并實現以服務為中心的項目管理系統。本文提出基于服務為中心的系統實現技術和方法,可以為其他以服務為中心的系統實現提供方法指導和借鑒。
本章節介紹面向服務架構和J2EE技術的概念及優點,為后續章節提供技術指導。
面向服務架構(Service-Oriented Architecture,SOA)雖然近幾年被廣泛應用于各行業的數字系統和平臺建設中,但是SOA的思想已經在20世紀90年代就被Gartner(高德納)全球最具權威的IT研究與顧問咨詢公司提出來。當時各大企業都逐步建設或引入IT系統用于提升業務流程的效率,但是大多數IT系統均是定制化的,提供的功能和平臺是綁定的。Gartner通過調研提出,對于商業或企業業務流程來說,IT系統的單元應該是服務,這個服務是獨立的,不能與系統強耦合,只有這樣,IT系統才具備更高的彈性能力。當前,服務化企業架構被廣泛應用,IT系統提供的獨立的服務可以快速滿足企業的業務需求。同時,SOA也是一種系統模型,不同于傳統以提供功能為主的系統模型,SOA模型是以服務為基礎,這些服務既可以是單獨面向用戶的功能,又可以是不同應用程序一起聯合提供的功能。在SOA模型中,可以通過定義高質量接口描述對這些功能定義為服務,再通過定義契約和規定將這些服務聯系起來。因為這些服務是站在業務流程的角度定義的,所以并沒有與底層的系統和平臺緊耦合,這樣的服務系統模型就可以滿足現代業務流程經常發生變化的場景。因此,受市場情況、國家政策、第三方伙伴或其他各種因素的影響,都會導致業務流程頻繁發生變更。
SOA具備兩個基本特點。第一個特點是每個服務都是獨立的業務實體。B/S架構因為其便利的訪問特征,所以大多數IT系統均會提供Internet的訪問機制,但網絡環境的不可靠性,導致經常會發生丟包、斷連等情況,使服務的穩定性受到很大的挑戰。SOA認為,服務作為獨立的業務實體,要能提供穩定可靠的訪問,假如服務出現故障也能具備自我恢復的能力,結合常見的主備機制、集群化部署、事務處理等技術實現服務的穩定、獨立運行。第二個特點是基于文本進行消息傳遞,在網絡環境中,大量的系統的操作系統或設計不同,其架構均不一致,無法采用二進制進行消息傳遞,而且不同的操作系統、平臺定義的數據也不相同,導致服務之間無法開展正常的消息傳遞,因為文本消息不涉及具體的處理邏輯,所以只能通過文本進行消息傳遞。
為了正常提供服務,SOA模型除定義服務之外,也描述了如何設計、部署和運行服務。其中,服務注冊庫用來登記和存儲每個服務的描述信息。服務網關可以用來解決不同應用環境之間服務無法相互識別的問題。服務總線就像一條公共高速公路,為用戶提供透明的服務。服務組裝引擎是用來組裝不同的服務,最終滿足和完成實際的業務。服務運行環境是指管理服務部署、運行所需要的資源。
BS架構(瀏覽器和服務器架構模式)的系統是隨著Internet技術的流行而被廣泛應用,具備便利的訪問性,同時服務器端承載業務和數據存儲,減少了客戶端的主機負載。為了實現BS架構,JAVA EE技術孕育而生,它能快速實現Web服務并盡快部署上線,同時因JAVA本身的優點使得基于J2EE開發出來的Web服務具備良好的移植性,為提供端到端的安全架構模型解決了Internet安全性問題。
J2EE的Web開發技術包括應用服務器運行各種Web應用,同時對EJB(Enterprise Java Beans,企業級應用程序的組件)、Servlet(小服務程序)、JSP(JAVA服務網頁)、XML(可擴展標記語言)等技術予以全面支持。
(1)EJB,提供讓客戶端使用遠程分布式對象的框架,極大地簡化具有良好的可擴充性的企業級應用的開發。EJB組件結構是基于組件的分布式計算結構,是分布式應用系統中的組件。
(2)Servlet,一般被稱為小服務程序或服務連接器,是用Java編寫的服務器端程序,具有獨立于平臺和協議的特性,主要功能在于交互式地瀏覽和生成數據,生成動態Web內容[1]。
(3)JSP,是一種動態網頁技術標準。JSP部署于網絡服務器上,可以響應客戶端發送的請求,并根據請求內容動態地生成HTML、XML或其他格式文檔的Web網頁,然后返回給請求者[2]。XML可擴展標記語言是標準通用標記語言,是一種允許用戶定義標記源語言,支持標記數據、定義數據類型[3],XML具備擴展性良好、內容與格式松耦合、嚴格遵循語法等特點。
JAVA消息服務JMS(Java Message Service) 是Java提供的面向消息中間件(MOM)的API(應用程序編程接口),主要用來支持服務之間的異步通信。JMS支持發布/訂閱模式和隊列模式。其中,發布/訂閱模式借鑒了現實生活中的出版社(發布圖書)和讀者(訂閱圖書),消息的消費者(讀者)訂閱自己關注的消息(圖書)即可,消息生產者(出版社)生產(出版)消費者(讀者)關注的新消息(新書) 后,會通知消費者(讀者) 接受處理。在JMS發布/訂閱模式中,通常以Topic(主題)標識消息,是一對多的模式,意味著同一個主題可以同時被多個消費者訂閱和消費。在JMS隊列模型中,通常以Queue name標識消息,是一對一的模型。在生產者和消費者都是在集群的環境中,通常需要將這兩種模式結合使用,因此情況會復雜很多,而且需要考慮容錯性、負載均衡、消息一致性、消息優先級等復雜的問題。
上文提出的面向服務架構,是針對高校中常見的項目管理系統進行分析,并且梳理了常見的基礎業務服務概念。通常,項目系統需要確保項目工作端到端完成全程閉環管理,可以將系統功能劃分為以下3個部分。
(1)任務計劃。項目管理主要對任務進行管理,任務管理主要包含任務計劃的管理。一是任務計劃管理。其中,任務計劃需要實現任務計劃的分級管理,主要是為了解決多級任務矩陣關聯問題。二是支持從任務導出項目,實現任務與項目的關聯。三是有任務就需要進行任務推進、任務督辦,所以任務需要在每個關鍵節點得到驗證。四是任務計劃存在不同的類別和優先級,所以任務計劃需要劃分為校級、部門級任務計劃。五是任務計劃需要實現對應的報表功能,主要包括任務月度、季度、年度報表展示及動態呈現。六是任務過程跟蹤管理,主要包括任務進度管理、任務報送、任務完成情況及榮譽上報等功能。
(2)項目管理。完整的項目管理體系有助于在項目維度端到端跟蹤項目的狀態、監控項目的進展、識別項目的關鍵風險。針對項目維度的管理包括項目管理過程、項目范圍定義與計劃、項目進度管理、項目費用管理、項目質量管理、項目團隊管理、項目信息管理、項目風險管理及分項管理。
(3)指標管理。項目管理需要有對應的指標評估項目的效果,所以需要支持指標管理,包括建立指標庫及指標關聯項目、任務,支持實時跟進項目、查看任務完成情況及指完成率。此外,指標庫需要實現統計歸類、查詢、修改、維護、關聯等功能,還需要細化指標類型(質量指標、數量指標、其他指標),基于季度、年度等不同的時間維度,分析基于指標類型的指標完成率。
基于SOA模型和J2EE技術,針對上述系統進行分析,可以將系統技術模型設計劃分為服務運行時環境層、業務子系統、服務層、服務中心、服務引擎(如圖1所示)。

圖1 基于SOA模型的項目管理系統架構
(1)服務運行環境層。主要包含數據庫、操作系統、Web運行容器、工作流引擎等。數據庫采用MySQL數據庫,MySQL數據庫具有免費、開源、性能良好、支持多線程且占用資源少、安全可靠的特點,主要用于業務數據、服務數據的持久化存儲,定義數據類型及數據之間的關系邏輯,同時為服務子系統、系統服務總線提供統一的數據庫訪問接口。
(2)操作系統。主要分為Linux和Windows,其中Linux主要運行系統服務端,包含Web服務器、工作流服務器等。Windows主要是客戶在主機上通過瀏覽器訪問系統的前臺頁面。Tomcat主要運行J2EE開發的各種Web服務器。Activiti是一個工作流引擎,支持參考實際業務流程將原來復雜的業務系統中的流程重新定義并運行,當后續實際業務流程發生變更時,只需要重新配置工作流,能提升系統的健壯性。Spring Cloud是許多框架的集合,主要基于Spring Boot降低分布式系統的基礎平臺開發難度,包含常見的服務發現、服務注冊、消息總線等,可以較好地支持SOA模型開發。
(3)系統服務總線。主要用于異步通信場景,即消息發送后可以立即收到響應結果,區別于同步通信模式(消息發送后需要等待對端系統返回處理結果)。本系統主要采用ActiveMQ實現系統服務總線,ActiveMQ是目前業界比較流行的開源消息總線且支持JMS規范。
(4) 服務子系統。使用JavaSeverlet(JAVA服務程序技術)技術實現業務流程中最主要的4個子系統,即任務計劃、項目管理、指標管理、考核管理。這些子系統主要是對業務邏輯進行封裝和實現,并定義對應的調用接口供系統和服務總線調用。
(5)服務層。主要提供常見的公共服務,如日志服務、企業微信服務、告警等公共服務。與服務子系統不同的是,服務層主要關心公共的和經常被調用訪問的服務,如果某業務服務需要經常被其他服務或第三方系統調用,就需要將這些服務放置在服務層。服務層也通過系統服務總線調用服務子系統。
(6)服務中心。使用Zookeeper(分布式應用程序協調服務)技術實現。Zookeeper可以解決分布式系統中多個進程之間的同步限制,防止出現臟讀的協調服務,例如分布式鎖。由于Zookeeper中的數據是存儲在內存當中的,因此它十分高效。服務提供者需要向Zookeeper進行服務注冊,服務提供者需要提供主機名、端口號、服務名稱等。本地一般用Map緩存已經注冊的服務,也可以用文件的形式保存到本地,當網絡抖動等原因重新恢復連接Zookeeper時,需要從緩存取出重新注冊。服務消費者向Zookeeper發出訂閱請求服務提供者時,服務消費者在第一次收到服務提供的響應消息后,會將響應存入緩存中。如果再次請求相同的服務時,則不需要再次請求Zookeeper,可以直接訪問緩存,提升了響應速度。如果后續服務提供者發生變更,服務消費者就會收到變更通知,此時重新請求并更新本地緩存。
(7)服務組裝引擎層。主要使用Activiti(開源的自動化業務工作流引擎)技術實現,此時服務不同于技術實現層,是指現實業務流程,比如審批一個項目的端到端流程,使用Activity的流程設計器可定義業務流程,并標記對應調用的服務,定義數據可以持久化存儲在MyBatis數據庫中,同時Activiti可以與Spring進行良好的集成,也能很好地管理事務和表達式解析等。
(8) Portal(前臺界面)。主要使用VUE框架實現,VUE是一款前端框架,去掉原來JavaScript中繁瑣的DOM(文檔對象模型)操作,提高代碼編碼速度。與MVC模型(模型-視圖-控制器模型)能實現模型到視圖的單向展示,VUE是基于 MVVM(Model—View—ViewModel,模型-視圖-視圖模型)模型,支持數據模型與視圖的雙向綁定,可以使開發者編程重點放在數據上,提升前臺代碼的質量和展示效果。
第三方系統和第三方數據庫主要是指當前已經建設完成的系統和數據庫。管理系統可以直接通過第三方服務開放的API進行服務訪問,如果第三方服務是本校內建立的,可以考慮后續將其服務也注冊到統一的服務中心,提升服務的管理和訪問質量。第三方數據庫可以通過數據庫訪問接口提供訪問。
最終項目管理平臺架構技術基于J2EE的Web技術和SOA模型,使用SpringCloud、Zookeeper、Activity、VUE等流程的技術和模架實現一個簡單易用、多層次的安全設計、靈活的自定義、穩定可靠等特點的項目管理系統。
通過介紹SOA框架和J2EE的Web技術,提出基于J2EE的Web技術和面向服務框架的技術,針對常見項目管理系統的需求開展分析,引入業界流程的工作流、服務總線和前臺框架技術,給出管理系統的設計模型,并基于以上技術最終實現一個面向服務的項目管理系統。此系統以服務為中心,具備快速上線、高可靠和服務間松耦合的特點。系統當前基于傳統部署的方式開發與發布環境復雜,配置繁瑣,下一步研究需要引入服務的容器化技術,并且實現環境和項目統一部署,快速遷移。