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