[李劍彬 張文娟]
行李全流程跟蹤作為建設(shè)四型機場的重要組成部分,可以有效提高行李運行安全、降低行李差錯率。2019 年,民航局提出“三步走”戰(zhàn)略,2021 年底全國千萬級機場間國內(nèi)航線將實現(xiàn)行李全流程跟蹤,2025 年年底將實現(xiàn)國內(nèi)航線全覆蓋和國際航線有突破。2020 年1 月,北京召開的全國民航工作會議,工作任務(wù)明確要求,“推廣RFID行李跟蹤系統(tǒng)廣泛使用、連接成網(wǎng),逐步建成覆蓋全國的民航行李跟蹤系統(tǒng)”。
行李全流程跟蹤系統(tǒng),需要接入不同的系統(tǒng)或設(shè)備的節(jié)點數(shù)據(jù),若采用傳統(tǒng)的架構(gòu)進行設(shè)計實現(xiàn),可能會面臨跨系統(tǒng)、跨平臺數(shù)據(jù)接入問題,不能很好的接入外部數(shù)據(jù)源。另外,隨著系統(tǒng)數(shù)據(jù)量的增長,以及行李全流程追蹤外延的擴大,對系統(tǒng)的高可用性和拓展性要求越來越高,需要對業(yè)務(wù)邏輯進行分離,以適應(yīng)高并發(fā)以及異構(gòu)系統(tǒng)的交互要求,降低系統(tǒng)業(yè)務(wù)模塊的耦合度。為了更好的適應(yīng)行李全流程系統(tǒng)機場端、集團版和支線機場SASS 服務(wù)的發(fā)展需要,滿足民航局建設(shè)行李全流程跟蹤系統(tǒng)的指示精神,以及國際航協(xié)753 號決議中對行李的追蹤和信息監(jiān)控要求,本文將采用基于微服務(wù)架構(gòu)來設(shè)計和實現(xiàn)行李全流程跟蹤系統(tǒng)。
微服務(wù)架構(gòu)作為近幾年的技術(shù)熱點,是一種遵循高內(nèi)聚、低耦合的軟件開發(fā)架構(gòu),可以將系統(tǒng)的不同業(yè)務(wù)功能、業(yè)務(wù)需求,拆分為若干個支持獨立部署和拓展的服務(wù)組件,這些服務(wù)可以通過不同的語言(Java、C#、Python 或Go等)完成開發(fā),服務(wù)之間可以采用輕量化通信機制暴露接口來實現(xiàn)通信,支持多種通信協(xié)議(RPC、HTTP REST或AMQP 等),完成跨平臺服務(wù)調(diào)用。
與傳統(tǒng)單體架構(gòu)比較,微服務(wù)架構(gòu)的優(yōu)點主要有。
(1)每個服務(wù)專注于特定的功能或業(yè)務(wù)需求,服務(wù)粒度可以很??;
(2)不同服務(wù)可以采用不同的編程語言進行服務(wù)實現(xiàn);
(3)不同服務(wù)支持獨立開發(fā)、獨立部署;
(4)微服務(wù)架構(gòu)易于進行需求拓展;
(5)微服務(wù)架構(gòu)易于進行流程編排。
根據(jù)《關(guān)于加快推進千萬級機場旅客行李全流程跟蹤系統(tǒng)機場端建設(shè)的通知》的相關(guān)要求,千萬級機場的行李全流程跟蹤系統(tǒng),需要滿足值機、安檢、分揀、裝車/箱、裝機、中轉(zhuǎn)、到達等7 個基本節(jié)點的數(shù)據(jù)采集要求。
為提高機場行李處理效率、降低行李托運異常問題而出現(xiàn)的成本損耗,行李全流程跟蹤系統(tǒng)主要基于行李全過程管控為出發(fā)點,采取多源異構(gòu)數(shù)據(jù)采集解析等技術(shù),結(jié)合行李托運過程中多種多樣的監(jiān)控設(shè)備,并通過數(shù)據(jù)采集/整合/監(jiān)控/分析,達成旅客托運行李全方位追蹤、業(yè)務(wù)高效運行的目的,從而實現(xiàn)機場行李托運業(yè)務(wù)降本增效的最終目標。
本文將結(jié)合行李全流程跟蹤系統(tǒng)的實際需求以及未來發(fā)展趨勢,利用微服務(wù)架構(gòu)組件化、獨立部署、復(fù)雜度低、技術(shù)多元化等優(yōu)勢,充分考慮系統(tǒng)的高可用性和拓展性,結(jié)合高內(nèi)聚、低耦合思想,對系統(tǒng)的總體架構(gòu)、系統(tǒng)服務(wù)劃分與功能設(shè)計等內(nèi)容進行設(shè)計實現(xiàn)。
本文設(shè)計實現(xiàn)的行李全流程跟蹤系統(tǒng)采用五層架構(gòu)設(shè)計,包含應(yīng)用展示層、數(shù)據(jù)服務(wù)層、運維資源層、網(wǎng)絡(luò)通信層和數(shù)據(jù)采集層,系統(tǒng)總體架構(gòu)如圖1 所示。
圖1 系統(tǒng)總體架構(gòu)圖
系統(tǒng)采用基于Java 的微服務(wù)架構(gòu)實現(xiàn),前后端分離,充分考慮當前主流技術(shù)發(fā)展趨勢和實際業(yè)務(wù)應(yīng)用需要,選用Spring Cloud和Spring Cloud Alibaba中較為適合的微服務(wù)應(yīng)用框架,完成整體技術(shù)選型和總體架構(gòu)搭建。后臺基于 Spring Boot 進行開發(fā),為PC 端、移動端和小程序等提供接口服務(wù);前端采用H5+CSS 實現(xiàn),可根據(jù)需要適配Vue、Element UI 等前端框架。
(1)應(yīng)用展示層:系統(tǒng)采用前后端分離技術(shù)實現(xiàn),可以通過對后臺服務(wù)的組合調(diào)用,實現(xiàn)系統(tǒng)業(yè)務(wù)應(yīng)用與交互需求。本系統(tǒng)頁面功能及系統(tǒng)外部調(diào)用,均可以根據(jù)服務(wù)接口進行前端定制化開發(fā),降低接口代碼開發(fā)量,提高代碼復(fù)用率及系統(tǒng)可拓展性。
(2)數(shù)據(jù)服務(wù)層:包含微服務(wù)網(wǎng)關(guān)、各服務(wù)組件、服務(wù)治理與配置、服務(wù)監(jiān)控和DevOps 等內(nèi)容。微服務(wù)網(wǎng)關(guān)采用Spring Clound Gateway 框架實現(xiàn),提供統(tǒng)一接入、協(xié)議適配、流量管理與容錯、以及安全防護等功能,Web前端或其它應(yīng)用,訪問系統(tǒng)服務(wù)組件時,會通過訪問API網(wǎng)關(guān)進行數(shù)據(jù)傳遞,結(jié)合JWT 鑒權(quán)和Ribbon 負載均衡等框架,保障服務(wù)接口的可靠性和安全性;各服務(wù)組件為系統(tǒng)前端、應(yīng)用及對外提供服務(wù)支撐,支持集群拓展,內(nèi)部整合Swagger UI 框架,便于接口調(diào)用、調(diào)試;服務(wù)監(jiān)控、服務(wù)治理與配置,包含服務(wù)注冊、服務(wù)發(fā)現(xiàn)、服務(wù)治理、熔斷防護、鏈路追蹤等內(nèi)容,選用Nacos、Sentinel、Zipkin 等微服務(wù)框架,保證數(shù)據(jù)及服務(wù)組件的監(jiān)控、管理;DevOps 包含構(gòu)建工具Maven、代碼倉庫Git/SVN、持續(xù)集成與部署Jenkins、K8S 等開發(fā)運維一體化相關(guān)內(nèi)容,用于實現(xiàn)系統(tǒng)持續(xù)集成、持續(xù)交付、持續(xù)部署。
(3)運行資源層:包含系統(tǒng)運行所需的計算資源、存儲資源、操作系統(tǒng)和配套軟件及設(shè)施等內(nèi)容,用于滿足本系統(tǒng)正常運行所需結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)存儲、使用等要求。
(4)網(wǎng)絡(luò)通信層:為系統(tǒng)提供網(wǎng)絡(luò)通信所需資源。
(5)數(shù)據(jù)采集層:主要包含兩類數(shù)據(jù)來源,即外部系統(tǒng)和采集設(shè)備。用于實現(xiàn)航班、行李和行李狀態(tài)等系統(tǒng)基礎(chǔ)和應(yīng)用數(shù)據(jù)的采集,為行李全流程跟蹤系統(tǒng)提供原始數(shù)據(jù)支持,是系統(tǒng)最為重要的內(nèi)容之一。
行李全流程跟蹤系統(tǒng)采用微服務(wù)架構(gòu)設(shè)計實現(xiàn),系統(tǒng)基于高內(nèi)聚,低耦合的設(shè)計思想垂直切分幾個獨立的業(yè)務(wù)服務(wù),包括行李追蹤服務(wù)、用戶權(quán)限服務(wù)、基礎(chǔ)配置服務(wù)、設(shè)備管理服務(wù)、日志服務(wù)、消息服務(wù)、數(shù)據(jù)推送服務(wù)和數(shù)據(jù)采集服務(wù)等,系統(tǒng)環(huán)境如圖2 所示。
圖2 系統(tǒng)環(huán)境圖
(1)行李追蹤服務(wù),作為行李全流程跟蹤系統(tǒng)的核心服務(wù)模塊,主要功能模塊包括航班保障、行李保障、旅客保障、不正常行李查詢、綜合監(jiān)控、數(shù)據(jù)統(tǒng)計等,通過數(shù)據(jù)抽取、數(shù)據(jù)清洗、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)存儲和分析,實現(xiàn)數(shù)據(jù)的多樣性展示,展示形式包括圖表、大屏、可視化看板、3D 看板等。
(2)用戶權(quán)限服務(wù),主要用于控制各服務(wù)組件、功能模塊、系統(tǒng)操作等內(nèi)容的權(quán)限,涉及功能模塊包括用戶管理、權(quán)限管理、角色管理、服務(wù)授權(quán)及微服務(wù)網(wǎng)關(guān)接口控制等。
(3)基礎(chǔ)配置服務(wù),主要用于管理系統(tǒng)基礎(chǔ)數(shù)據(jù)信息管理,功能包括機場管理、航司管理、航站樓管理、機型管理、艙位管理、標記管理、系統(tǒng)管理、參數(shù)配置等。
(4)設(shè)備管理服務(wù),主要用于行李全流程跟蹤系統(tǒng)所涉及的節(jié)點數(shù)據(jù)采集前端設(shè)備的管理,包含設(shè)備的臺賬、監(jiān)控、記錄、狀態(tài)等功能模塊。
(5)日志服務(wù),系統(tǒng)運行過程中,會產(chǎn)生多種類型的日志數(shù)據(jù),例如操作日志、異常日志、接口日志、通信日志、數(shù)據(jù)交互日志和系統(tǒng)其它日志記錄,在本系統(tǒng)中,統(tǒng)一通過日志服務(wù)進行管理,功能包括日志展示、日志檢索、日志清理、日志審計、日志溯源等。
(6)消息服務(wù),行李全流程跟蹤過程中,會經(jīng)過多個跟蹤節(jié)點,涉及的工作場所多、范圍大,需要具備統(tǒng)一的消息傳遞機制,本服務(wù)主要用于系統(tǒng)內(nèi)外部的消息的傳遞、展示和管理,支持系統(tǒng)角色、系統(tǒng)用戶之間的消息收發(fā),涵蓋PC 端、手持智能終端,消息內(nèi)容包含通知消息、任務(wù)、預(yù)警、告警、系統(tǒng)消息等內(nèi)容。
(7)數(shù)據(jù)推送服務(wù),作為系統(tǒng)對外進行數(shù)據(jù)交互的服務(wù)組件,主要用于系統(tǒng)整體數(shù)據(jù)推送控制,包括推送規(guī)則定義、推送機制、推送頻率、轉(zhuǎn)發(fā)、接收等功能內(nèi)容,是系統(tǒng)可增值服務(wù)模塊。
(8)數(shù)據(jù)采集服務(wù),行李全流程跟蹤系統(tǒng)涉及的航班、行李、行李狀態(tài)等數(shù)據(jù),主要來源于外部系統(tǒng)或采集設(shè)備,涉及系統(tǒng)對接、通信方式、通信協(xié)議差異性較大的問題,本系統(tǒng)設(shè)計通過統(tǒng)一的數(shù)據(jù)采集服務(wù)進行實現(xiàn),支持通信方式、通信協(xié)議自定義,確保數(shù)據(jù)接入的便利性,并提供數(shù)據(jù)原始報文記錄,便于進行問題排查、定位和處理。
為了更好地確保各個微服務(wù)的獨立性,本文劃分的各個微服務(wù)模塊,與應(yīng)用層以及微服務(wù)之間的交互都是使用RESTFUL 風格,通過HTTP 協(xié)議進行的。并且,服務(wù)之間僅保留必需的調(diào)用,前端調(diào)用接口過程中,涉及服務(wù)之間業(yè)務(wù)關(guān)聯(lián)的內(nèi)容,前端能處理的,均由前端處理,例如,PC 端發(fā)送消息給具體的用戶,由前端分別調(diào)用消息服務(wù)和用戶權(quán)限服務(wù),實現(xiàn)消息發(fā)送給具體用戶;后臺數(shù)據(jù)處理過程中,服務(wù)之間業(yè)務(wù)關(guān)聯(lián)的內(nèi)容,通過其它方式能處理的,均不進行服務(wù)之間的調(diào)用,例如,行李追蹤服務(wù)產(chǎn)生消息給指定的角色,會先把消息寫入數(shù)據(jù)表,由消息服務(wù)調(diào)用消息規(guī)則引擎,發(fā)送此類消息給指定角色。
行李全流程跟蹤系統(tǒng)實現(xiàn)旅客行李全流程跟蹤,主要涉及行李出港和進港兩個核心業(yè)務(wù)流程。
如圖3 所示,行李出港流程中,本系統(tǒng)需完成值機、安檢、分揀、裝車/箱、裝機等環(huán)節(jié)的行李采集。
圖3 行李出港流程圖
如圖4 所示,行李進港流程中,進港行李可分為中轉(zhuǎn)和非中轉(zhuǎn)行李,中轉(zhuǎn)行李可使用手持或穿戴終端等方式完成信息采集;非中轉(zhuǎn)行李可以通過固定式等設(shè)備完成行李信息采集。
圖4 行李進港流程圖
針對不同的機場,每個環(huán)節(jié)可以進一步細分為一個或多個小節(jié)點,例如安檢節(jié)點,可以細分為開始安檢、完成安檢等。本系統(tǒng)充分考慮跟蹤節(jié)點細分問題,支持各環(huán)節(jié)多節(jié)點行李數(shù)據(jù)的跟蹤。
行李全流程跟蹤系統(tǒng)實現(xiàn)旅客行李的全流程跟蹤,滿足值機、安檢、分揀、裝車/箱、裝機、中轉(zhuǎn)、到達等7個基本節(jié)點數(shù)據(jù)采集要求,依賴于外部源數(shù)據(jù)的提供,包括航班、行李的基礎(chǔ)數(shù)據(jù)和各跟蹤節(jié)點采集到的行李狀態(tài)數(shù)據(jù)等。
不同機場的數(shù)據(jù)來源方式、采集節(jié)點要求都存在一定差異,本文以常見的對接系統(tǒng)進行描述,包括信息集成系統(tǒng)、離港控制系統(tǒng)、安檢信息系統(tǒng)、行李處理系統(tǒng)和航易行,以及手持式、穿戴式和固定式的行李識別數(shù)據(jù)采集設(shè)備,數(shù)據(jù)流向如圖5 所示。
圖5 數(shù)據(jù)流向圖
來源于不同系統(tǒng)或設(shè)備的原始數(shù)據(jù),會統(tǒng)一經(jīng)過數(shù)據(jù)采集服務(wù)進行處理,數(shù)據(jù)采集服務(wù)根據(jù)不同的數(shù)據(jù)來源及相應(yīng)的接口協(xié)議,通過內(nèi)部集成的規(guī)則引擎,對原始數(shù)據(jù)進行采集、解析、計算和存儲等處理,形成結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù),提供給其它微服務(wù)組件進行應(yīng)用或二次加工,最終完成旅客行李全流程跟蹤的應(yīng)用需求,如圖6 所示。
圖6 規(guī)則引擎流程圖
系統(tǒng)總體數(shù)據(jù)庫主要基于各個微服務(wù)使用需要,進行分庫設(shè)計實現(xiàn),主要劃分為行李追蹤、基礎(chǔ)配置、消息、日志、用戶權(quán)限和設(shè)備管理等數(shù)據(jù)庫,如圖7 所示。
圖7 數(shù)據(jù)庫設(shè)計圖
系統(tǒng)數(shù)據(jù)庫可兼容多種不同關(guān)系型數(shù)據(jù)庫,例如Mysql、SQL Server。此處以Mysql8.0 為例說明,數(shù)據(jù)庫可采用一主一從或一主兩從進行高可用設(shè)計,可根據(jù)現(xiàn)場實際環(huán)境需求,再次進行數(shù)據(jù)庫水平拓展、垂直拓展,例如:數(shù)據(jù)庫集群、分庫分表等。數(shù)據(jù)庫訪問緩存使用Redis,支持集群,如圖8 所示。
圖8 數(shù)據(jù)庫部署圖
本系統(tǒng)支持實體機、虛擬機及云平臺等部署方式,兼容Windows、CentOS 等操作系統(tǒng),可以根據(jù)投運機場的大小、服務(wù)器資源、業(yè)務(wù)規(guī)模等因素,靈活部署。服務(wù)器資源充足的情況下,可參考圖9 所示的高可用部署方式。
圖9 系統(tǒng)部署圖
(1)前端頁面采用Nginx 集群部署,運用反向代理、負載均衡技術(shù),確保前端的高可用性、高可靠性。
(2)API 網(wǎng)關(guān)、Nacos 和業(yè)務(wù)服務(wù)集群,結(jié)合Ribbon負載均衡、Sentinel 熔斷防護、Zipkin 鏈路追蹤等框架,自動根據(jù)系統(tǒng)運行情況進行熔斷、限流、降級等處理,方便進行鏈路追蹤、問題定位;優(yōu)化訪問請求在服務(wù)器組之間的分配,提高系統(tǒng)的響應(yīng)速度和總體性能;監(jiān)控服務(wù)的運行狀態(tài),避免單服務(wù)故障導(dǎo)致服務(wù)無法正常使用的問題,提高服務(wù)組件的安全性、可靠性和穩(wěn)定性。
(3)Redis 緩存集群部署,進一步提高系統(tǒng)訪問性能,降低服務(wù)器訪問壓力;MQ 集群,避免數(shù)據(jù)量激增時造成數(shù)據(jù)積壓的問題,確保數(shù)據(jù)處理的高效、準確。
(4)數(shù)據(jù)庫采用讀寫分離、主備熱切的部署方式,讓系統(tǒng)訪問和數(shù)據(jù)安全得到進一步保障,服務(wù)性能得到全面提升,系統(tǒng)安全性、可靠性、可用性等得到進一步加強、完善。
相對于采用單體、非微服務(wù)架構(gòu)實現(xiàn)的行李全流程跟蹤系統(tǒng),局限于機場端或單機場應(yīng)用,本文描述的基于微服務(wù)架構(gòu)的行李全流程跟蹤系統(tǒng)設(shè)計實現(xiàn),打破了傳統(tǒng)應(yīng)用的局限,聚焦行李全流程跟蹤系統(tǒng)實際使用需求,兼容單機場、機場集團和不同機場集團的多個中小機場使用場景,結(jié)合高內(nèi)聚、低耦合思想,通過服務(wù)粒度的拆分,進一步實現(xiàn)系統(tǒng)的高可靠性和高可用性,有效避免系統(tǒng)數(shù)據(jù)量增長過快導(dǎo)致系統(tǒng)響應(yīng)速度過慢或無法使用的情況。
采用微服務(wù)架構(gòu)進行行李全流程跟蹤系統(tǒng)實現(xiàn),服務(wù)模塊組件化,可以很好地適配機場系統(tǒng)多、接入復(fù)雜的問題,后續(xù)接入其它系統(tǒng)應(yīng)用時,能夠很好地降低對本系統(tǒng)的影響,只需通過增加新的服務(wù)組件,即可實現(xiàn)應(yīng)用拓展需求;另外,本系統(tǒng)業(yè)務(wù)耦合度極低,便于采用集群等高可用部署方式,可以通過集團機場部署本系統(tǒng),為支線機場提供服務(wù)應(yīng)用,降低支線機場的行李全流程跟蹤系統(tǒng)建設(shè)成本,高效完成民航旅客托運行李跟蹤大閉環(huán),解決旅客痛點,全面提升國內(nèi)機場托運行李服務(wù)質(zhì)量要求這也是本文的目的和意義之一。
本文針對民航局對行李全流程跟蹤系統(tǒng)的建設(shè)需要,結(jié)合微服務(wù)技術(shù)最新發(fā)展趨勢,通過對實際項目實施過程中相關(guān)經(jīng)驗的歸納總結(jié),設(shè)計并實現(xiàn)出了一套基于微服務(wù)架構(gòu)的行李全流程跟蹤系統(tǒng)。系統(tǒng)采用了多項關(guān)鍵技術(shù),包括基于Spring Clound 微服務(wù)架構(gòu)、Spring Clound Gateway 網(wǎng)關(guān)、Nginx 集群、JWT 鑒權(quán)、Ribbon 負載均衡、Sentinel熔斷保護、Nacos服務(wù)治理和DevOps可發(fā)運維一體化相關(guān)內(nèi)容等,解決了行李全流程跟蹤系統(tǒng)在實際應(yīng)用過程中數(shù)據(jù)來源多、數(shù)據(jù)量大和并發(fā)量多等問題,具備高拓展性、高可用性、高性能、高可靠性、高可維護性等特點。采用此架構(gòu)設(shè)計和實現(xiàn)的行李全流程跟蹤系統(tǒng),將有效輔助提高行李分揀效率,降低行李運輸差錯率,提高旅客滿意度,提升機場服務(wù)品質(zhì)及公眾形象,具備良好的推廣價值。