文/鄭冰
隨著云計(jì)算、大數(shù)據(jù)、互聯(lián)網(wǎng)的發(fā)展和普及,企業(yè)的應(yīng)用系統(tǒng)的規(guī)模越來(lái)越大,越來(lái)越復(fù)雜,給系統(tǒng)的設(shè)計(jì)開發(fā)、運(yùn)行維護(hù)等帶來(lái)了巨大的挑戰(zhàn)。因此,為了提高應(yīng)用系統(tǒng)的開發(fā)效率和維護(hù)便捷性,提出了微服務(wù)架構(gòu)思想?;谖⒎?wù)架構(gòu)技術(shù),能有效解決大型軟件單體架構(gòu)帶來(lái)的研發(fā)周期長(zhǎng)的問題,能夠快速響應(yīng)用戶需求。
基于微服務(wù)架構(gòu)的軟件信息系統(tǒng)可以按照每一個(gè)邏輯業(yè)務(wù)功能進(jìn)行原子化劃分,構(gòu)建一個(gè)邏輯獨(dú)立的應(yīng)用軟件系統(tǒng),提高每一個(gè)模塊的操作執(zhí)行效率,可以解決復(fù)雜問題,同時(shí)還可以節(jié)約硬件資源。在功能模塊化、微服務(wù)化的情況下還可以提高處理效率,解決編碼過于復(fù)雜的問題,改善編碼的應(yīng)用效果。在傳統(tǒng)的應(yīng)用系統(tǒng)設(shè)計(jì)過程中,人們需要選擇不同類型的技術(shù),但是在微服務(wù)架構(gòu)下,其可以利用中心化的組織架構(gòu),不需要過度重視某一個(gè)重點(diǎn),這樣就可以根據(jù)應(yīng)用服務(wù)范圍不同確定技術(shù)種類,實(shí)現(xiàn)一對(duì)一的技術(shù)性服務(wù),提高系統(tǒng)運(yùn)行與處理效率。本文通過總結(jié)發(fā)現(xiàn),基于微服務(wù)架構(gòu)的系統(tǒng)設(shè)計(jì)具有很多優(yōu)勢(shì),比如服務(wù)技術(shù)異構(gòu)性、服務(wù)的擴(kuò)展性和部署簡(jiǎn)單化。
微服務(wù)架構(gòu)的每個(gè)服務(wù)不是必須采用一致的語(yǔ)言或技術(shù),可以選擇一個(gè)適合的開發(fā)技術(shù)和程序設(shè)計(jì)語(yǔ)言,因此一個(gè)團(tuán)隊(duì)可以根據(jù)情況選擇最熟悉的技術(shù),這樣就可以更好地支撐當(dāng)前的應(yīng)用軟件。
目前,一個(gè)軟件系統(tǒng)的功能非常多,同時(shí)隨著系統(tǒng)運(yùn)行和使用,未來(lái)還需要添加更多的服務(wù)功能。傳統(tǒng)的系統(tǒng)架構(gòu)可擴(kuò)展性比較弱,基于微服務(wù)架構(gòu)的系統(tǒng)則可以提升擴(kuò)展性,每一個(gè)系統(tǒng)模塊都擁有獨(dú)立性,因此就可以單獨(dú)進(jìn)行擴(kuò)展,不需要涉及其他的功能模塊和底層架構(gòu),這樣就可以提高系統(tǒng)的服務(wù)能力。
圖1:基于Spring Cloud應(yīng)用平臺(tái)架構(gòu)
基于微服務(wù)架構(gòu)的系統(tǒng)可以針對(duì)服務(wù)功能進(jìn)行單獨(dú)處理,自頂向下針對(duì)系統(tǒng)的功能服務(wù)進(jìn)行劃分,每一個(gè)服務(wù)都屬于一個(gè)單獨(dú)的模塊,各個(gè)模塊之間是邏輯獨(dú)立的,因此每一個(gè)服務(wù)的部署都是單獨(dú)的,這樣就可以有效簡(jiǎn)化系統(tǒng)部署工作。在傳統(tǒng)的系統(tǒng)部署過程中,一旦某一個(gè)功能模塊發(fā)生故障或問題,就會(huì)導(dǎo)致系統(tǒng)整體無(wú)法部署,采用微服務(wù)架構(gòu)開發(fā)的系統(tǒng)則可以只關(guān)注出問題的模塊,這樣就可以提高整個(gè)系統(tǒng)的部署效率。
Spring Cloud是近幾年開始流行的微服務(wù)框架,它利用Spring Boot的開發(fā)便利性巧妙地簡(jiǎn)化了分布式系統(tǒng)基礎(chǔ)設(shè)施的開發(fā),如服務(wù)發(fā)現(xiàn)注冊(cè)、配置中心、消息總線、負(fù)載均衡、斷路器、數(shù)據(jù)監(jiān)控等,都可以用Spring Boot的開發(fā)風(fēng)格做到一鍵啟動(dòng)和部署。Spring Cloud是一個(gè)應(yīng)用非常廣泛的組件,能夠?yàn)檐浖_發(fā)帶來(lái)較多的技術(shù)支持,可以在微服務(wù)應(yīng)用架構(gòu)設(shè)計(jì)中提供標(biāo)準(zhǔn)框架,以便能夠?qū)崿F(xiàn)以微服務(wù)為架構(gòu)的基礎(chǔ)程序代碼。基于Spring Cloud微服務(wù)架構(gòu)的應(yīng)用系統(tǒng)設(shè)計(jì)過程中,首先需要?jiǎng)?chuàng)建一個(gè)Spring Cloud配置服務(wù)器,創(chuàng)建一個(gè)Java程序開發(fā)框架,在Spring Boot基礎(chǔ)上進(jìn)行系統(tǒng)構(gòu)建,然后軟件設(shè)計(jì)師就可以激活這個(gè)應(yīng)用服務(wù)功能,同時(shí)可以繼續(xù)地配置服務(wù)器,完善系統(tǒng)服務(wù)的訪問路徑。其次,系統(tǒng)設(shè)計(jì)與開發(fā)還可以利用微服務(wù)注冊(cè)技術(shù),注冊(cè)完畢之后就可以發(fā)現(xiàn)系統(tǒng)中的功能模塊,實(shí)現(xiàn)系統(tǒng)的集成和通訊傳輸,自動(dòng)化的注冊(cè)可以提高微服務(wù)架構(gòu)軟件的靈活性和部署簡(jiǎn)潔性。最后在用戶交互界面方面,使用AngularJS組件綁定數(shù)據(jù)模型和頁(yè)面變量,完成完整微服務(wù)的開發(fā)和創(chuàng)建。
隨著近些年物流業(yè)的快速發(fā)展對(duì)信息系統(tǒng)提出了更高的要求,需求變化頻度不斷提高,傳統(tǒng)大型項(xiàng)目的單體式開發(fā)模式已經(jīng)不太適應(yīng)快速的變化,需要更靈活的架構(gòu)模式。因此在企業(yè)的實(shí)踐中引入了微服務(wù)架構(gòu)模式來(lái)應(yīng)對(duì)。微服務(wù)架構(gòu)中服務(wù)的分割也是需要重點(diǎn)考量的問題。雖然服務(wù)的劃分能夠使得系統(tǒng)更靈活,但是太細(xì)粒度的分割也會(huì)使得系統(tǒng)的服務(wù)和服務(wù)之間的交互變得錯(cuò)綜復(fù)雜,難以管理。因此在構(gòu)建物流系統(tǒng)是采用了模塊級(jí)別的服務(wù)劃分,數(shù)量大約在20個(gè)左右的水平,主要?jiǎng)澐譃榛A(chǔ)服務(wù)、訂單服務(wù)、產(chǎn)品服務(wù)、運(yùn)價(jià)服務(wù)、供應(yīng)商管理服務(wù)、報(bào)表服務(wù)等等。這樣的設(shè)計(jì)模式既能夠發(fā)揮微服務(wù)的優(yōu)勢(shì)也能夠保持系統(tǒng)的易維護(hù)性。具體的應(yīng)用架構(gòu)如圖1所示。
該應(yīng)用平臺(tái)采用了6層架構(gòu)來(lái)實(shí)現(xiàn),即客戶端,網(wǎng)關(guān)層,微服層,業(yè)務(wù)層,資源存取層和資源層,并進(jìn)行了一定拓展。具體說(shuō)明如下:
提供Web應(yīng)用和GUI應(yīng)用給最終用戶使用。Web客戶端和GUI客戶端采用Http/Https協(xié)議和網(wǎng)關(guān)層通信。
為外部提供統(tǒng)一的網(wǎng)關(guān)接口,以及路由,安全控制等功能。
微服務(wù)層為所有的微服務(wù)統(tǒng)一提供一個(gè)注冊(cè)發(fā)現(xiàn)中心,并配合網(wǎng)關(guān)層對(duì)外開放API接口。每個(gè)微服務(wù)實(shí)現(xiàn)一套獨(dú)立的功能,并且可以獨(dú)自部署,橫向擴(kuò)展。
業(yè)務(wù)邏輯層是整個(gè)統(tǒng)一信息管理系統(tǒng)的核心模塊,實(shí)現(xiàn)所有的業(yè)務(wù)邏輯。本層主要包括3種組件,即:
(1)業(yè)務(wù)Biz提供統(tǒng)一的業(yè)務(wù)服務(wù)調(diào)用,包括提供給服務(wù)層調(diào)用。
(2)業(yè)務(wù)組件對(duì)象封裝一個(gè)業(yè)務(wù)功能。
(3)業(yè)務(wù)對(duì)象封裝業(yè)務(wù)模型數(shù)據(jù)。
封裝和外部資源的通信。主要提供3種類型的集成,即:
(1)數(shù)據(jù)集成,封裝數(shù)據(jù)訪問,例如數(shù)據(jù)庫(kù)和文件訪問;
(2)消息集成,封裝和消息中間件的通信,如MQ等;
(3)應(yīng)用集成,封裝和外部系統(tǒng)的交互。
系統(tǒng)的外部資源。對(duì)于集成層,同時(shí)具有3種類型的資源:數(shù)據(jù)源資源、消息資源、應(yīng)用資源。
對(duì)微服務(wù)層,業(yè)務(wù)邏輯層,資源存取層提供公共的服務(wù),主要包括緩存服務(wù),傳輸對(duì)象,文件日志,數(shù)據(jù)庫(kù)日志,權(quán)限管理,事務(wù)管理,任務(wù)調(diào)度模塊等。
業(yè)務(wù)邏輯層、集成層、基礎(chǔ)服務(wù)都在Spring的容器管理中。Spring提供依賴注入和控制反轉(zhuǎn)等功能。
基于以上應(yīng)用架構(gòu)搭建的物流信息系統(tǒng)經(jīng)過實(shí)踐證明,達(dá)到良好的性能指標(biāo)。開發(fā)人員更加專注于業(yè)務(wù)模塊的開發(fā),系統(tǒng)架構(gòu)師負(fù)責(zé)總體協(xié)調(diào)微服務(wù)的運(yùn)維,使得系統(tǒng)開發(fā)效率更高,能應(yīng)對(duì)快速變化的業(yè)務(wù)需求。
微服務(wù)架構(gòu)能有效提升應(yīng)用系統(tǒng)處理復(fù)雜事物的能力,通過高內(nèi)聚和低耦合手段簡(jiǎn)化系統(tǒng)的設(shè)計(jì)?;谖⒎?wù)的模塊具有較高的自治性,可以按照獨(dú)立實(shí)體模式存在和運(yùn)行。SpringCloud是非常優(yōu)秀的微服務(wù)架構(gòu)體系,在實(shí)踐中有廣泛的應(yīng)用,基于SpringCloud微服務(wù)架構(gòu)搭建物流信息系統(tǒng),經(jīng)過實(shí)踐證明,能夠快速適應(yīng)需求的變化,達(dá)到設(shè)計(jì)初衷,具備一定的實(shí)踐價(jià)值。