舒德偉 許后磊 陳亞軍 周洪波
摘要:微服務(wù)架構(gòu)模式(Microservices Architecture Pattern)目前越來越被大眾所接受,其目的是將大型的、復(fù)雜的、長期運行的應(yīng)用程序構(gòu)建為一組相互配合的服務(wù),每個服務(wù)獨成體系單獨發(fā)布,也可以整合發(fā)布,每個服務(wù)之間都可以得到很好的局部改良。目前微服務(wù)在大公司的應(yīng)用也非常廣泛,例如亞馬遜、Google、Facebook,Alibaba等,伴隨移動互聯(lián)網(wǎng)信息化的飛速發(fā)展,不同系統(tǒng)之間的數(shù)據(jù)服務(wù)會越來越多,系統(tǒng)之間的封閉性造成了大量重復(fù)開發(fā)工作,采用微服務(wù)架構(gòu)可以很好的解決這個問題。河長制信息管理系統(tǒng)是在黨中央全面推行河長制的大背景下,服務(wù)于地方政府,用于管理各地河渠湖庫的信息管理系統(tǒng),基于此考慮,在構(gòu)建河長制信息管理系統(tǒng)過程中采用Spring Boot微服務(wù)架構(gòu)的設(shè)計與研究是有必要和參考意義的。
關(guān)鍵詞:河長制;微服務(wù)架構(gòu);Spring Boot
中圖分類號:TP311.52 文獻標識碼:A 文章編號:1007-9416(2018)02-0144-03
隨著計算機技術(shù)的快速發(fā)展,Web開發(fā)技術(shù)和體系發(fā)生了深刻的變化,從早期的HTML靜態(tài)網(wǎng)頁到CGI的引入,再從web編程的腳本語言PHP/ASP/JSP,到今天大家耳熟能詳?shù)腏2EE/.Net,伴隨著不同系統(tǒng)之間的數(shù)據(jù)服務(wù)的越來越多,使用傳統(tǒng)的整體式架構(gòu)(Monolithic Architecture)應(yīng)用開發(fā)系統(tǒng),如CRM、ERP等大型應(yīng)用,隨著新需求的不斷增加,企業(yè)更新和修復(fù)大型整體式應(yīng)用變得越來越困難;許多企業(yè)在SOA投資中得到的回報有限,SOA可以通過標準化服務(wù)接口實現(xiàn)能力的重用,但對于快速變化的需求,受到整體式應(yīng)用的限制,有時候顯得力不從心;隨著應(yīng)用云化的日益普及,生于云端的應(yīng)用具有與傳統(tǒng)IT不同的技術(shù)基因和開發(fā)運維模式,伴隨著上述問題的不斷凸出,微服務(wù)架構(gòu)的思想應(yīng)運而生,微服務(wù)是一種架構(gòu)風(fēng)格,一個大型復(fù)雜軟件應(yīng)用由一個或多個微服務(wù)組成。系統(tǒng)中的各個微服務(wù)可被獨立部署,各個微服務(wù)之間是松耦合的。每個微服務(wù)僅關(guān)注于完成一件任務(wù)并很好地完成該任務(wù)。在所有情況下,每個任務(wù)代表著一個小的業(yè)務(wù)能力,微服務(wù)架構(gòu)的思考是從與整體應(yīng)用對比而產(chǎn)生的。圖1中很好的描述了整體應(yīng)用和微服務(wù)之間的區(qū)別。
1 微服務(wù)架構(gòu)
1.1 微服務(wù)架構(gòu)綜述
微服務(wù)架構(gòu)(Microservice Architect)是一種架構(gòu)模式,它提倡將單塊架構(gòu)的應(yīng)用劃分成一組小的服務(wù),服務(wù)之間互相協(xié)調(diào)、互相配合,為用戶提供最終價值。每個服務(wù)運行在其獨立的進程中,服務(wù)與服務(wù)間采用輕量級的通信機制互相溝通。每個服務(wù)都圍繞著具體業(yè)務(wù)進行構(gòu)建,并且能夠被獨立的部署到生產(chǎn)環(huán)境、類生產(chǎn)環(huán)境等,旨在通過將功能分解到各個離散的服務(wù)中以實現(xiàn)對解決方案的解耦。
1.2 微服務(wù)架構(gòu)的優(yōu)點
(1)微服務(wù)通過分解巨大單體式應(yīng)用為多個服務(wù)方法解決了復(fù)雜性問題。在功能不變的情況下,應(yīng)用被分解為多個可管理的分支或服務(wù)。每個服務(wù)都有一個用RPC-或者消息驅(qū)動API定義清楚的邊界。微服務(wù)架構(gòu)模式給采用單體式編碼方式很難實現(xiàn)的功能提供了模塊化的解決方案,由此,單個服務(wù)很容易開發(fā)、理解和維護。
(2)這種架構(gòu)使得每個服務(wù)都可以有專門開發(fā)團隊來開發(fā)。開發(fā)者可以自由選擇開發(fā)技術(shù),提供API服務(wù)。當然,許多公司試圖避免混亂,只提供某些技術(shù)選擇。然后,這種自由意味著開發(fā)者不需要被迫使用某項目開始時采用的過時技術(shù),他們可以選擇現(xiàn)在的技術(shù)。甚至于,因為服務(wù)都是相對簡單,即使用現(xiàn)在技術(shù)重寫以前代碼也不是很困難的事情。
(3)微服務(wù)架構(gòu)模式是每個微服務(wù)獨立的部署。開發(fā)者不再需要協(xié)調(diào)其它服務(wù)部署對本服務(wù)的影響。這種改變可以加快部署速度。UI團隊可以采用AB測試,快速的部署變化。微服務(wù)架構(gòu)模式使得持續(xù)化部署成為可能。
(4)微服務(wù)架構(gòu)模式使得每個服務(wù)獨立擴展。你可以根據(jù)每個服務(wù)的規(guī)模來部署滿足需求的規(guī)模。甚至于,你可以使用更適合于服務(wù)資源需求的硬件。比如,你可以在EC2 Compute Optimized instances上部署CPU敏感的服務(wù),而在EC2 memory-optimized instances上部署內(nèi)存數(shù)據(jù)庫。
1.3 微服務(wù)架構(gòu)的缺點
(1)微服務(wù)應(yīng)用是分布式系統(tǒng),由此會帶來固有的復(fù)雜性。開發(fā)者需要在RPC或者消息傳遞之間選擇并完成進程間通訊機制。更甚于,他們必須寫代碼來處理消息傳遞中速度過慢或者不可用等局部失效問題。當然這并不是什么難事,但相對于單體式應(yīng)用中通過語言層級的方法或者進程調(diào)用,微服務(wù)下這種技術(shù)顯得更復(fù)雜一些。
(2)應(yīng)用系統(tǒng)中同時給多個業(yè)務(wù)分主體更新消息很普遍。這種交易對于單體式應(yīng)用來說很容易,因為只有一個數(shù)據(jù)庫。在微服務(wù)架構(gòu)應(yīng)用中,需要更新不同服務(wù)所使用的不同的數(shù)據(jù)庫。使用分布式交易并不一定是好的選擇,不僅僅是因為CAP理論,還因為今天高擴展性的NoSQL數(shù)據(jù)庫和消息傳遞中間件并不支持這一需求。最終你不得不使用一個最終一致性的方法,從而對開發(fā)者提出了更高的要求和挑戰(zhàn)。
2 Spring Boot分析
Spring Boot是在Spring4.0的基礎(chǔ)上產(chǎn)生的,其中“Boot”的意思就是“引導(dǎo)”,意在簡化開發(fā)模式,使開發(fā)者快速開發(fā)出基于Spring的應(yīng)用。Spring Boot并不是Spring官方的框架模式,而是由Pivotal團隊二次開發(fā)并提供。它的設(shè)計目的就是為了簡化Spring應(yīng)用的初始搭建以及開發(fā)過程。Spring Boot的出現(xiàn)使得開發(fā)人員不再拘泥于繁瑣的模板化的配置,可以快速搭建應(yīng)用。該框架據(jù)有以下特點:
(1)自動配置Spring;不需要配置Spring的數(shù)據(jù)源、連接池、事務(wù)通知等類加載初始化等信息,Spring Boot會自動將這些信息配置完畢。配置過程如圖2所示。
(2)Spring Boot將原有的XML配置改為Java配置,將bean注入改為使用注解注入的方式(@Autowire),并將多個xml、properties配置濃縮在一個appliaction.yml配置文件中。
(3)簡化Maven配置,整合常用依賴;Spring Boot的依賴整合了常用的開發(fā)庫,例如spring-webmvc、jackson-json、validation-api和tomcat等。當我們引入核心依賴時,Spring Boot會自引入其他依賴。開發(fā)人員不用手動添加web相關(guān)的jar包依賴,只需要引入Spring Boot為我們提供的核心依賴即可。
(4)可自動嵌入中間件插件;Spring Boot的核心依賴中包含了Server服務(wù)的基本jar,當我們需要什么中間件時,只需替換相關(guān)的Spring Boot中間件依賴即可,Spring Boot會幫我們識別中間件。
(5)提供應(yīng)用狀態(tài);Spring Boot還提供了應(yīng)用的指標,健康檢查和外部配置等運行狀態(tài),便于開發(fā)人員觀察項目目前運行的情況。
3 微服務(wù)架構(gòu)在河長制信息系統(tǒng)中的應(yīng)用
3.1 河長制信息系統(tǒng)應(yīng)用背景
為認真貫徹落實《中共中央辦公廳 國務(wù)院辦公廳<關(guān)于全面推行河長制的意見>的通知》,按照云南省委、省政府全面推行河長制的安排部署,結(jié)合昆明市亟待全面深化河長制的實際需求,2017年4月21日,昆明市制定了《昆明市全面深化河長制工作實施方案》(以下簡稱“方案”),全面深化河長制?!斗桨浮诽岢鲆⑺募壓娱L五級治理體系和三級督察督導(dǎo)制度,并提出了全面深化河長制的六大工作要求:一要推動河長制工作內(nèi)涵由單純治河治水向整體優(yōu)化生產(chǎn)生活方式轉(zhuǎn)變;二要推動河長制工作理念由管理向治理升華;三要推動河長制工作范圍由河道單線作戰(zhàn)向區(qū)域聯(lián)合作戰(zhàn)拓展;四要推動河長制工作方式由事后末端處理向事前源頭控制延伸;五要推動河長制工作監(jiān)督由單一監(jiān)督向多重監(jiān)督改進;六要推動河(渠)湖庫保護治理由政府為主向社會共治轉(zhuǎn)化。同時,《方案》制定了六大主要工作任務(wù),即:加強水資源保護,加強河湖庫水域岸線管理保護,加強水污染防治,加強水環(huán)境治理,加強水生態(tài)修復(fù),加強執(zhí)法監(jiān)管。最后,《方案》明確提出了要“建立完善信息管理系統(tǒng)”:結(jié)合智慧昆明建設(shè),2017年12月底前,基本建成全市河(渠)湖庫管理大數(shù)據(jù)信息平臺。建立河(渠)湖庫管理信息系統(tǒng),逐步實現(xiàn)信息上傳、任務(wù)派遣、督辦考核、應(yīng)急指揮數(shù)字化管理。建立河(渠)湖庫管理地理信息系統(tǒng)平臺,加強水域環(huán)境動態(tài)監(jiān)測,實現(xiàn)基礎(chǔ)數(shù)據(jù)、涉河工程、水域岸線、水質(zhì)監(jiān)測等信息化、系統(tǒng)化。建立實時、公開、高效的河長即時通信平臺,將日常巡查、問題督辦、情況通報、責(zé)任落實、信息公開等納入信息一體化管理。
3.2 河長制信息系統(tǒng)微服務(wù)架構(gòu)設(shè)計
河長制信息管理系統(tǒng)從總體架構(gòu)上分為五層結(jié)構(gòu),即用戶層、應(yīng)用服務(wù)層、支撐層、資源層、信息采集層,架構(gòu)圖如圖3所示。
用戶層主要針對的是系統(tǒng)的使用人群設(shè)定,包括各級河長、督察督導(dǎo),各級河長辦公室,各有關(guān)責(zé)任單位以及社會公眾。
應(yīng)用服務(wù)層是系統(tǒng)的核心業(yè)務(wù)實現(xiàn)層。主要包含內(nèi)外網(wǎng)門戶網(wǎng)站的建設(shè),由各業(yè)務(wù)相關(guān)的應(yīng)用系統(tǒng)服務(wù)組成,包含河長制信息管理平臺和河湖監(jiān)管移動平臺。
支撐層為上層應(yīng)用服務(wù)層提供各種支撐服務(wù),應(yīng)用支撐層包含了統(tǒng)一身份認證、統(tǒng)一數(shù)據(jù)接收、統(tǒng)一數(shù)據(jù)服務(wù)、服務(wù)管理平臺、大數(shù)據(jù)分析平臺、數(shù)據(jù)匯集共享平臺、GIS平臺及系統(tǒng)管理平臺。
資源層主要包括基礎(chǔ)信息、地理信息、水質(zhì)監(jiān)測信息、巡查管護信息、水資源信息、采砂信息、水源地信息、生態(tài)信息、污染應(yīng)急信息、執(zhí)法信息等,是系統(tǒng)數(shù)據(jù)存儲的資源平臺。
信息采集層主要包括原有系統(tǒng)數(shù)據(jù)的導(dǎo)入、已建監(jiān)測站點的數(shù)據(jù)接入和錄入、新建監(jiān)測站點的數(shù)據(jù)接入和錄入、移動端上傳數(shù)據(jù)的接收處理。
結(jié)合以上功能描述,基于微服務(wù)的架構(gòu)思路,將以上的整體應(yīng)用可分解為不同子系統(tǒng)數(shù)據(jù)服務(wù)的集合,其中包括系統(tǒng)權(quán)限設(shè)置數(shù)據(jù)服務(wù)、河湖渠泊(段)及其他基礎(chǔ)信息數(shù)據(jù)服務(wù)、制度創(chuàng)新(文件上傳)數(shù)據(jù)服務(wù)、考核評價數(shù)據(jù)服務(wù)、督導(dǎo)督察數(shù)據(jù)服務(wù)、監(jiān)測網(wǎng)絡(luò)數(shù)據(jù)服務(wù)、辦公管理數(shù)據(jù)服務(wù)。河長制信息管理系統(tǒng)微服務(wù)功能圖如圖4所示,數(shù)據(jù)服務(wù)提供固定的REST風(fēng)格的接口,為整個平臺搭建提供基礎(chǔ)數(shù)據(jù)支撐。
(1)系統(tǒng)權(quán)限設(shè)置數(shù)據(jù)服務(wù):提供了用戶、角色、資源、行政區(qū)劃、部門、菜單項的基礎(chǔ)信息管理。并提供靈活的權(quán)限配置,不同用戶擁有不同的菜單和資源。
(2)河湖渠泊(段)及其他基礎(chǔ)信息數(shù)據(jù)服務(wù):提供了河流、渠道、湖泊、水庫、河段、渠段、湖段、庫段、取水口、監(jiān)測站、河長公示信息、河長公示牌、保護區(qū)、保留區(qū)、限制開發(fā)區(qū)、開發(fā)利用區(qū)、灌區(qū)、水文監(jiān)測站、水質(zhì)監(jiān)測站等相關(guān)基礎(chǔ)設(shè)施的基本信息管理。
(3)制度創(chuàng)新(文件上傳)數(shù)據(jù)服務(wù):提供了不同類型文件的上傳下載查看打印等文件通用功能。
(4)考核評價數(shù)據(jù)服務(wù):提供了對不同角色不同部門的考核目標定義和目標考核,實現(xiàn)了自定義考核評價不同項分值設(shè)定與自動化打分流程。
由此可見,上述功能相對獨立,適合引用基于SpringBoot的微服務(wù)框架,每個服務(wù)之間都開放給其他服務(wù)接口,微服務(wù)和微服務(wù)之間通過Rest API接口進行通信?;诖宋⒎?wù)架構(gòu)我們構(gòu)建了昆明市河長制智慧服務(wù)平臺,并在云南省各地州成功復(fù)制推廣,實踐證明,微服務(wù)架構(gòu)設(shè)計是可行的,有效的。
4 結(jié)語
本文系統(tǒng)的介紹了微服務(wù)架構(gòu)的發(fā)展背景和概念,并結(jié)合傳統(tǒng)架構(gòu)和微服務(wù)之間進行了對比,分別闡述了微服務(wù)的優(yōu)勢和劣勢,然后對SpringBoot從概念和優(yōu)缺點進行了介紹,最合介紹了昆明市河長制開發(fā)背景,結(jié)合實際系統(tǒng)應(yīng)用詳細了介紹了河長制智慧服務(wù)平臺的設(shè)計理念。
目前在微服務(wù)的架構(gòu)實踐中,處于起步階段,還有很大的發(fā)展空間,我們將在后期的河長制系統(tǒng)建設(shè)中不斷摸索并完善。
參考文獻
[1]王磊.微服務(wù)架構(gòu)與實踐[M].電子工業(yè)出版社,2016.
[2]紐曼.微服務(wù)設(shè)計[M].人民郵電出版社,2016.
[3]王曉龍,關(guān)毅.計算機自然語言處理[M].清華大學(xué)出版社,2005.
[4]張峰.應(yīng)用SpringBoot改變web應(yīng)用開發(fā)模式[J].科技創(chuàng)新與應(yīng)用,2017,(23):193-194.
[5]溫曉麗,蘇浩偉,陳歡,鄒大畢.基于SpringBoot微服務(wù)架構(gòu)的城市一卡通手機充值支撐系統(tǒng)研究[J].電子產(chǎn)品世界,2017,(10):59-62.