鄭曉健 鄭曉蘭
摘? 要: 介紹一種微服務(wù)架構(gòu)的測量設(shè)備溯源管理系統(tǒng)的設(shè)計。通過微服務(wù)架構(gòu)與傳統(tǒng)單體架構(gòu)的對比,分析了微服務(wù)架構(gòu)的優(yōu)勢和設(shè)計原則,將其運用于企業(yè)測量設(shè)備溯源系統(tǒng)中,實現(xiàn)了系統(tǒng)的設(shè)備管理、設(shè)備檢定管理、設(shè)備溯源審批管理和系統(tǒng)信息維護等功能。由于采用Spring Could微服務(wù)架構(gòu),使得系統(tǒng)具有良好的可擴展性,方便后期維護。
關(guān)鍵詞: 軟件體系結(jié)構(gòu); 微服務(wù)架構(gòu); 分布式應(yīng)用; 測量設(shè)備溯源; Spring Could
中圖分類號:TP393? ? ? ? ? 文獻標(biāo)識碼:A? ? ?文章編號:1006-8228(2021)05-06-04
Design of measurement equipment traceability system of microservice architecture
Zheng Xiaojian1, Zheng Xiaolan2
(1. School of Electrical and Information Engineering, Oxbridge College, Kunming University of Science and Technology, Kunming, Yunnan 650106, China; 2. Yunnan Institute of Metrology and Testing Technology)
Abstract: This paper introduces the design of a measurement equipment traceability management system of microservice architecture. By comparing the microservice architecture with the traditional monolith architecture, the advantages and design principles of the microservice architecture are analyzed. The microservice architecture is applied to the enterprise measurement equipment traceability system, and the functions of equipment management, equipment verification management, equipment traceability approval management and system information maintenance are realized. Due to the use of Spring Could microservice architecture, the system has a good scalability and is convenient for later maintenance.
Key words: software architecture; microservice architecture; distributed application; traceability of measurement equipment; Spring Could
0 引言
近年來隨著供給側(cè)結(jié)構(gòu)性改革的推進,企業(yè)對產(chǎn)品質(zhì)量的把控能力的要求愈加重視,對生產(chǎn)環(huán)節(jié)中質(zhì)量監(jiān)控的重要設(shè)備,測量儀器的監(jiān)管更加嚴(yán)格。在這方面國家計量法有相應(yīng)規(guī)定,所有企事業(yè)單位的測量儀器要定期檢定,要求達到國家量值規(guī)定的統(tǒng)一標(biāo)準(zhǔn),并出具檢定證書后方可進入下一使用周期,同時要求測量儀器在整個使用期內(nèi)的檢定結(jié)果都能追根溯源。在此情況下,各企業(yè)檢定部門對測量儀器溯源管理系統(tǒng)有著廣泛的需求。
目前一些大中型企業(yè)正推行一體化管理戰(zhàn)略,對于信息系統(tǒng)在其功能擴展、快速迭代、快速部署、持續(xù)可用性等方面的要求越來越高。然而,企業(yè)已有的信息系統(tǒng)多數(shù)是采用傳統(tǒng)的單體式架構(gòu)開發(fā),要實現(xiàn)期望的目標(biāo)還存在較大距離。本文采用基于Spring Cloud微服務(wù)架構(gòu)[1-3]對測量儀器溯源管理系統(tǒng)進行架構(gòu)設(shè)計可以有效實現(xiàn)既定的目標(biāo)。
1 微服務(wù)架構(gòu)
傳統(tǒng)Java Web架構(gòu)以單體式架構(gòu)為主,用于開發(fā)小型系統(tǒng)比較適合[3-5]。將系統(tǒng)的所有功能打包為WAR包或jar包里,部署到Web容器中。但隨著系統(tǒng)功能的擴展、業(yè)務(wù)需求的擴展和迭代,單體應(yīng)用會變得越來越復(fù)雜[6-7],并造成項目的維護和部署的工作量增加[7-8]。因為代碼的藕合能使修改相關(guān)業(yè)務(wù)的代碼時需要修改整個項目,而且由于結(jié)構(gòu)的問題,魯棒性和穩(wěn)定性也會很差[8]。
微服務(wù)架構(gòu)設(shè)計將企業(yè)應(yīng)用拆分,解耦成為功能獨立的一系列服務(wù)實體,而且每個服務(wù)可以單獨開發(fā)和迭代,再以獨立的進程形式部署,各微服務(wù)間通過統(tǒng)一的、輕量化的通信協(xié)議進行交流,實現(xiàn)協(xié)同工作。從而使采用微服務(wù)架構(gòu)設(shè)計的軟件產(chǎn)品交付更加方便,實現(xiàn)有效地拆分應(yīng)用,快速開發(fā)和部署系統(tǒng)的目的[8-10]。微服務(wù)架構(gòu)和單體式架構(gòu)對比[11-13]如圖1所示。微服務(wù)架構(gòu)具有的優(yōu)勢已經(jīng)在Amazon、Netflix、百度外賣、上交所、58到家、騰訊等國內(nèi)外企業(yè)的分布式應(yīng)用系統(tǒng)的開發(fā)[14-16]實踐中得到體現(xiàn)。
1.1 分布式應(yīng)用
應(yīng)用系統(tǒng)被拆分成多個微服務(wù)的子系統(tǒng),每個微服務(wù)實現(xiàn)一項業(yè)務(wù),構(gòu)成具有完整功能的分布式應(yīng)用系統(tǒng)。每個微服務(wù)專注于單一功能,通過良好的接口清晰地表述服務(wù)邊界。比如測量儀器溯源管理系統(tǒng)中的測量設(shè)備管理服務(wù),只需要處理測量設(shè)備的業(yè)務(wù)相關(guān)的邏輯。由于各個微服務(wù)功能單一,所以開發(fā)復(fù)雜度也降低,因此一些小型開發(fā)團隊可以采用漸近式的開發(fā)方法,逐個的開發(fā)微服務(wù),并保持較高的開發(fā)效率。比起SOA,微服務(wù)的粒度更小,甚至每個操作都可以成為一個微服務(wù),讓功能邊界更加明確。
1.2 高度內(nèi)聚自治
每個微服務(wù)從開發(fā)、測試、部署、運維、擴展升級等都可以獨立完成[17-18],包括數(shù)據(jù)庫也可以在每個微服務(wù)中獨立設(shè)置。在開發(fā)上,每個微服務(wù)的業(yè)務(wù)邏輯必須密切相關(guān)、高度內(nèi)聚,使模塊的代碼量和邏輯復(fù)雜度得到控制。每個微服務(wù)有一套完整的開發(fā)流程,使成為獨立的項目,便于進行項目管理??梢赃M行異構(gòu)開發(fā),各個服務(wù)可以選擇不同技術(shù)平臺,使得每個微服務(wù)的實現(xiàn)與其他服務(wù)無關(guān),服務(wù)之間松散耦合,每一個服務(wù)可以采用最高效的、最適合的開發(fā)語言、工具和技術(shù),實施高效地開發(fā)。
微服務(wù)在物理實體、服務(wù)、數(shù)據(jù)存儲上獨立部署,還要考慮各個微服務(wù)的負(fù)載平衡,實現(xiàn)分布式應(yīng)用的目標(biāo),使之能在短時間內(nèi)部署為具有高可拓展性和可靠性的應(yīng)用。
在運行和維護方面,獨立部署使得可以對各微服務(wù)進行獨立維護,維護范圍和復(fù)雜度都可以降低。另外,微服務(wù)間的通信協(xié)議統(tǒng)一,盡量采用異步模式進行通信。
1.3 可伸縮
由于各服務(wù)之間是高度解耦的,所以可根據(jù)實際情況,按需分配資源,進行功能擴展和裁剪,并且不會影響其他服務(wù),提高了系統(tǒng)的伸縮能力。
1.4 高容錯性
由于各個微服務(wù)為相互獨立的進程,某個微服務(wù)存在的故障不會影響到其他微服務(wù),不易產(chǎn)生單體架構(gòu)系統(tǒng)常有的一個功能失敗整個系統(tǒng)大面積癱瘓的局面。在微服務(wù)平臺中如有故障的微服務(wù)停用,其他微服務(wù)照常能夠運行。系統(tǒng)維護時只需要集中精力對出問題的微服務(wù)進行修復(fù),縮短了恢復(fù)的時間,使問題的蔓延限制在最小范圍。
2 分布式微服務(wù)架構(gòu)設(shè)計
2.1 功能模塊設(shè)計
系統(tǒng)功能模塊設(shè)計的主要任務(wù)是拆分微服務(wù),也是微服務(wù)架構(gòu)設(shè)計的重點。拆分時應(yīng)圍繞業(yè)務(wù)功能進行,原則是保持每個功能的高內(nèi)聚和低耦合[6-8]。各個微服務(wù)的粒度以功能相關(guān)性為基礎(chǔ),盡量減少各微服務(wù)間的依賴性,保證各個微服務(wù)的業(yè)務(wù)邏輯的獨立性和完整性??梢圆捎梅治鰳I(yè)務(wù)依賴關(guān)系、設(shè)計公共業(yè)務(wù)微服務(wù)、系統(tǒng)業(yè)務(wù)微服務(wù)化的步驟拆分系統(tǒng)[8]。設(shè)計時,接口要明確,由于微服務(wù)相互會產(chǎn)生調(diào)用,為了避免由于微服務(wù)接口的變化而造成必須修改其他微服務(wù)的局面,應(yīng)該考慮各種變化的可能性,使接口更加通用和靈活。
按照計量規(guī)程將測量設(shè)備的生命周期分為五個階段:新購、待審、溯源監(jiān)控、停用和退出,并且構(gòu)成不間斷的檢定周期直至設(shè)備報廢,而且各個階段的任務(wù)獨立。根據(jù)這些業(yè)務(wù)特點,按照企業(yè)用戶提出的功能需求,系統(tǒng)的主要功能要包括測量設(shè)備建檔、測量設(shè)備檢定、測量設(shè)備溯源審批的全過程。本文根據(jù)用戶提出的功能需求,將系統(tǒng)的主要業(yè)務(wù)拆分為:設(shè)備信息管理、設(shè)備檢定管理、設(shè)備溯源審批管理、系統(tǒng)信息服務(wù)等。
⑴ 設(shè)備信息微服務(wù)
設(shè)備信息微服務(wù)負(fù)責(zé)將新購置的設(shè)備納入溯源管理,涉及設(shè)備的信息維護全過程。主要完成設(shè)備信息的建立、查詢、修改等管理,其中建立設(shè)備信息完成設(shè)備基本信息檔案的建立。設(shè)備基本信息包括設(shè)備號、設(shè)備名稱、出廠編號、購入日期、設(shè)備狀態(tài)等。查詢設(shè)備信息要求提供對系統(tǒng)中所有設(shè)備的基本信息的一般查詢和組合模式查詢。設(shè)備信息修改完成設(shè)備檔案信息的維護。用戶要求可以在多個檢定點進行設(shè)備溯源管理,并保持?jǐn)?shù)據(jù)一致性。
⑵ 設(shè)備檢定微服務(wù)
設(shè)備檢定微服務(wù)是設(shè)備整個生命周期中溯源管理工作的主要部分,包括:檢定設(shè)備、審批新設(shè)備、查看到期設(shè)備、查詢檢定歷史四項功能。檢定設(shè)備時,通過簡捷的查詢方法快速查到要檢定的設(shè)備,顯示該設(shè)備的所有基本信息,然后查看設(shè)備的所有歷史檢定記錄或停用記錄,根據(jù)檢定結(jié)果給出設(shè)備檢定結(jié)論,建立設(shè)備檢定記錄。新設(shè)備審批時,同樣先要查詢到待審批的設(shè)備,然后根據(jù)檢定結(jié)果和相關(guān)數(shù)據(jù)給出檢定結(jié)論,建立審批設(shè)備記錄。查看到期設(shè)備時,可以查看到溯源提前期內(nèi)所有設(shè)備,查看設(shè)備待檢情況和具體統(tǒng)計數(shù)據(jù)。查詢檢定歷史時,可以輸入不同條件查詢設(shè)備檢定記錄,查看該設(shè)備的檢定歷史信息。
⑶ 設(shè)備溯源審批微服務(wù)
設(shè)備溯源審批微服務(wù)包括:溯源審批、設(shè)備監(jiān)控、設(shè)備停用、設(shè)備退出、溯源記錄等部分。溯源審批時,先查看設(shè)備基本信息和檢定數(shù)據(jù),給出審批結(jié)論,然后登記審批和溯源信息。設(shè)備監(jiān)控管理目的是建立設(shè)備監(jiān)控記錄,記錄設(shè)備監(jiān)控信息。設(shè)備停用管理和設(shè)備退出要求可以查看系統(tǒng)中設(shè)備停用和退出記錄,進行狀態(tài)監(jiān)控。
⑷ 系統(tǒng)用戶管理微服務(wù)
系統(tǒng)信息維護微服務(wù)的主要功能包括:系統(tǒng)基礎(chǔ)信息管理、用戶訪問權(quán)限管理等。
2.2 系統(tǒng)架構(gòu)設(shè)計
本系統(tǒng)使用Spring Cloud框架實現(xiàn)。Spring Cloud的核心功能包括分布式/版本化配置、服務(wù)注冊和發(fā)現(xiàn)、路由、服務(wù)于服務(wù)間的調(diào)用、負(fù)載均衡、斷路器、分布式消息傳遞等。Spring Cloud是一系列框架的集合。它具有高質(zhì)量、穩(wěn)定性、可持續(xù)性、便捷性等特性,使用Spring Cloud架構(gòu)可以節(jié)省系統(tǒng)基礎(chǔ)模塊的開發(fā),并且可以很容易的進行微服務(wù)系統(tǒng)的實施。
本系統(tǒng)的前端通過Vue框架實現(xiàn)界面,后臺由各個微服務(wù)組成的微服務(wù)群集構(gòu)成,每個微服務(wù)之間相互獨立?;谶@樣的結(jié)構(gòu)實現(xiàn)了系統(tǒng)的部署,如圖2所示。
服務(wù)發(fā)現(xiàn)框架Eureka負(fù)責(zé)實現(xiàn)SpringCloud的服務(wù)發(fā)現(xiàn)和管理功能,由服務(wù)注冊中心、服務(wù)注冊及發(fā)現(xiàn),服務(wù)注冊的接口三部分組成,網(wǎng)關(guān)和各個服務(wù)模塊都需要注冊到服務(wù)注冊發(fā)現(xiàn)中心,實現(xiàn)服務(wù)注冊和服務(wù)發(fā)現(xiàn)功能。系統(tǒng)由Eureka來獲取注冊的微服務(wù),實現(xiàn)請求轉(zhuǎn)發(fā)功能。Zuul是服務(wù)網(wǎng)關(guān),所有到達Zuul請求或信息通過前、中、后三級過濾器實現(xiàn)靈活的雙向路由,完成前端請求與后端服務(wù)的通信。網(wǎng)關(guān)通過路由配置來建立消息和微服務(wù)的對應(yīng),所有消息集中到網(wǎng)關(guān),經(jīng)由網(wǎng)關(guān)將消息轉(zhuǎn)發(fā)到對應(yīng)的微服務(wù)。負(fù)載均衡由Ribbon組件實現(xiàn)。Hystrix是監(jiān)控和熔斷器,通過服務(wù)接口設(shè)置的標(biāo)簽,實現(xiàn)對接口的監(jiān)控。Hystrix Dashboard是監(jiān)控組件,獲取用戶控制需求,監(jiān)控各個服務(wù)運行情況。Feign是Ribbon和Hystrix的服務(wù)調(diào)用組件。系統(tǒng)的運行流程[18]是: