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