鄭響萍,蔡海軍
(浙江理工大學(xué)科技與藝術(shù)學(xué)院,浙江 紹興 312369)
物聯(lián)網(wǎng)技術(shù)的核心是網(wǎng)絡(luò)通信和感知技術(shù),實(shí)現(xiàn)人、機(jī)、物的泛在連接,提供信息感知、數(shù)據(jù)傳輸、計(jì)算處理等服務(wù)。物聯(lián)網(wǎng)起源于20 世紀(jì)90 年代末,源自美國(guó)麻省理工學(xué)院,早期以物流系統(tǒng)為背景,把所有物品通過射頻識(shí)別等信息傳感設(shè)備與互聯(lián)網(wǎng)連接起來,實(shí)現(xiàn)智能化識(shí)別和管理。在2005國(guó)際電信聯(lián)盟(International Telecommunication Union,ITU)發(fā)表的:正式確立了物聯(lián)網(wǎng)概念,報(bào)告提出信息通訊將發(fā)展到實(shí)現(xiàn)人與物、物與物之間的連接,無所不在的物聯(lián)網(wǎng)通信時(shí)代即將來臨。
隨著計(jì)算機(jī)軟硬件和網(wǎng)絡(luò)通信技術(shù)的發(fā)展,智能化設(shè)備已得到普及,現(xiàn)有中心化系統(tǒng)架構(gòu)已無法支撐快速產(chǎn)生的海量數(shù)據(jù)的傳輸、存儲(chǔ)和計(jì)算,而敏感數(shù)據(jù)因安全問題也不便傳輸?shù)街行墓?jié)點(diǎn)。本文提出容器化云原生邊緣計(jì)算解決方案,通過邊緣系統(tǒng)就近計(jì)算,減少數(shù)據(jù)傳輸?shù)木W(wǎng)絡(luò)延遲,解決數(shù)據(jù)安全問題,降低中心服務(wù)器計(jì)算和存儲(chǔ)數(shù)據(jù)量壓力。以冷鏈系統(tǒng)為例,實(shí)現(xiàn)快速響應(yīng)、計(jì)算強(qiáng)大、彈性智能的云原生邊緣計(jì)算平臺(tái)。
云原生在2013 年由Pivotal公司的Matt Stine首次提出,用以區(qū)分為云而設(shè)計(jì)的應(yīng)用和云上部署傳統(tǒng)應(yīng)用,隨后于2015 年7 月,云原生計(jì)算基金會(huì)(Cloud Native Computing Foundation,CNCF)成立,致力于云原生應(yīng)用推廣和普及。CNCF對(duì)于原生云的定義為“云原生技術(shù)有利于各組織在公有云、私有云和混合云等新型動(dòng)態(tài)環(huán)境中,構(gòu)建和運(yùn)行可彈性擴(kuò)展的應(yīng)用。云原生的代表技術(shù)包括容器、服務(wù)網(wǎng)格、微服務(wù)、不可變基礎(chǔ)設(shè)施和聲明式API(Application Programming Interface)。這些技術(shù)能夠構(gòu)建容錯(cuò)性好、易于管理和便于觀察的松耦合系統(tǒng)。結(jié)合可靠的自動(dòng)化手段,云原生技術(shù)使工程師能夠輕松地對(duì)系統(tǒng)做出頻繁和可預(yù)測(cè)的重大變更”。
云原生的核心是微服務(wù)、服務(wù)網(wǎng)格和容器化技術(shù)。業(yè)界有不少微服務(wù)的實(shí)現(xiàn)方案,Spring Cloud是常用的微服務(wù)解決方案,其提供了微服務(wù)工具集合,如服務(wù)注冊(cè)、服務(wù)發(fā)現(xiàn)、負(fù)載均衡、API網(wǎng)關(guān)等,將微服務(wù)通過Docker容器化部署,通過DevOps系列工具,持續(xù)交付部署。其整體架構(gòu)如圖1所示。
圖1 云原生邊緣計(jì)算架構(gòu)圖Fig.1 Architecture diagram of cloud native edge computing
系統(tǒng)采用Spring Cloud微服務(wù)架構(gòu),Spring Cloud是一套完整的微服務(wù)解決方案?;赟pring Boot框架實(shí)現(xiàn)了微服務(wù)容器,包含了一系列簡(jiǎn)單易用的微服務(wù)組件,例如服務(wù)治理、服務(wù)網(wǎng)關(guān)、配置中心、負(fù)載均衡、服務(wù)跟蹤等,該系列組件經(jīng)過Netflix等公司多年實(shí)踐經(jīng)驗(yàn)總結(jié)。
微服務(wù)架構(gòu)的服務(wù)提供者,通過Spring Cloud Eureka實(shí)現(xiàn)服務(wù)注冊(cè)和發(fā)現(xiàn)。Eureka是Netflix中的一個(gè)開源框架,主要提供服務(wù)注冊(cè)、服務(wù)發(fā)現(xiàn)和狀態(tài)同步三大主要功能。
服務(wù)提供者在服務(wù)啟動(dòng)時(shí),會(huì)通過Eureka Client向Eureka Server注冊(cè)服務(wù)信息,Eureka Server會(huì)保存該服務(wù)提供者的服務(wù)信息,為后續(xù)服務(wù)消費(fèi)者提供查找服務(wù)。服務(wù)消費(fèi)者在服務(wù)啟動(dòng)時(shí),會(huì)通過Eureka Client向Eureka Server獲取服務(wù)注冊(cè)表,并緩存到本地,默認(rèn)情況下每30 秒更新一次注冊(cè)表,以便消費(fèi)者從本地獲取服務(wù)地址,直接調(diào)用服務(wù)提供者的服務(wù)。這種方式可以有效支撐分布式節(jié)點(diǎn)的彈性擴(kuò)容和縮容,服務(wù)提供者可根據(jù)服務(wù)能力的需求調(diào)配數(shù)量,對(duì)于物聯(lián)網(wǎng)應(yīng)用來說,終端數(shù)量的增減非常頻繁,彈性擴(kuò)容能力尤為重要,如圖2所示。
圖2 服務(wù)注冊(cè)和發(fā)現(xiàn)Fig.2 Service registration and discovery
系統(tǒng)服務(wù)提供者為分布式微服務(wù)部署,多節(jié)點(diǎn)服務(wù)通過Spring Cloud Ribbon實(shí)現(xiàn)負(fù)載均衡。Spring Cloud Ribbon是一個(gè)基于超文本傳輸協(xié)議(Hyper Text Transfer Protocol,HTTP)和傳輸控制協(xié)議(Transmission Control Protocol,TCP)的客戶端負(fù)載均衡工具,它基于Netflix Ribbon實(shí)現(xiàn)。服務(wù)消費(fèi)者從Eureka獲取到服務(wù)注冊(cè)表后,服務(wù)消費(fèi)者獲得多個(gè)服務(wù)提供者的服務(wù)地址,消費(fèi)者在發(fā)起服務(wù)器請(qǐng)求時(shí),Ribbon提供負(fù)載均衡能力,將請(qǐng)求分?jǐn)偟讲煌姆?wù)提供者,如圖3所示。
圖3 負(fù)載均衡Fig.3 Load balancing
Ribbon提供的負(fù)載均衡算法有多種,包括輪詢、隨機(jī)、最小并發(fā)量和最小活躍數(shù)等,同時(shí)還支持自定義算法,在非異構(gòu)服務(wù)器節(jié)點(diǎn)場(chǎng)景下,最常用的是輪詢算法??紤]到物聯(lián)網(wǎng)存在多云和異構(gòu)服務(wù)器的情況,需要一種優(yōu)化算法,而基于動(dòng)態(tài)反饋的負(fù)載均衡算法更適合這種場(chǎng)景下使用。根據(jù)服務(wù)處理反饋,利用滑動(dòng)窗口算法,動(dòng)態(tài)調(diào)配負(fù)載任務(wù),有利于集群服務(wù)的穩(wěn)定和性能最大化。
服務(wù)的調(diào)用基于HTTP協(xié)議,Spring Cloud Feign封裝了HTTP調(diào)用服務(wù),F(xiàn)eign是基于Netflix Feign實(shí)現(xiàn),整合了Spring Cloud Ribbon和Spring Cloud Hystrix。
Feign提供了快捷、優(yōu)雅的方式調(diào)用服務(wù),就像調(diào)用本地方法一樣。通過整合Ribbon負(fù)載均衡和Hystrix延遲與容錯(cuò)服務(wù),讓微服務(wù)集群能夠均衡提供服務(wù),且當(dāng)服務(wù)出現(xiàn)單點(diǎn)問題時(shí),不至于產(chǎn)生整體服務(wù)雪崩,避免級(jí)聯(lián)故障,有效提升分布式系統(tǒng)的穩(wěn)定性。
物聯(lián)網(wǎng)邊緣計(jì)算服務(wù)下,集群環(huán)境復(fù)雜、集群規(guī)模龐大,需要整合多云環(huán)境,服務(wù)易出現(xiàn)單節(jié)點(diǎn)不可用或宕機(jī),當(dāng)不采取容錯(cuò)措施時(shí),易產(chǎn)生因單節(jié)點(diǎn)故障而引起整個(gè)集群不可用現(xiàn)象,如A服務(wù)調(diào)用B服務(wù),當(dāng)B服務(wù)不可用時(shí),A服務(wù)也將不可用,這種級(jí)聯(lián)現(xiàn)象稱為雪崩效應(yīng),級(jí)聯(lián)層次越多,容錯(cuò)需求就越大。而Feign在提供HTTP調(diào)用服務(wù)外,還通過Hystrix提供降級(jí)和熔斷,服務(wù)B出現(xiàn)超時(shí)或不可用現(xiàn)象,可快速返回錯(cuò)誤信息,通過FallbackFactory等方法,將服務(wù)降級(jí)為備選方法,保證集群的整體穩(wěn)定。
該系統(tǒng)集群環(huán)境間是隔離的,集群間服務(wù)通過統(tǒng)一的服務(wù)網(wǎng)關(guān)對(duì)外提供服務(wù)能力,服務(wù)網(wǎng)關(guān)為Spring Cloud Zuul,Zuul是Netflix開源的API網(wǎng)關(guān)服務(wù),提供動(dòng)態(tài)路由、監(jiān)控、彈性、安全等邊緣服務(wù)框架。網(wǎng)關(guān)Zuul作為整個(gè)集群服務(wù)的唯一出口,增加了接口鑒權(quán)服務(wù),只有帶有授權(quán)信息的消費(fèi)者才可調(diào)用,為整個(gè)集群增加了一道防護(hù),如圖4所示。
圖4 服務(wù)網(wǎng)關(guān)Fig.4 Services gateway
本方案通過Spring Cloud微服務(wù)化后,服務(wù)數(shù)量增加至十幾個(gè),物聯(lián)網(wǎng)系統(tǒng)服務(wù)相對(duì)較為復(fù)雜,涉及多云環(huán)境部署。而隨著業(yè)務(wù)的發(fā)展,應(yīng)用集群服務(wù)節(jié)點(diǎn)數(shù)可達(dá)上百個(gè),傳統(tǒng)部署的成本非常高,一方面單服務(wù)器多進(jìn)程資源利用率低;另一方面,多云異構(gòu)環(huán)境下,服務(wù)器配置、操作系統(tǒng)等環(huán)境都不盡相同。運(yùn)維人員需要掌握每一臺(tái)服務(wù)器的特性,去針對(duì)性地優(yōu)化和配置,運(yùn)維難度和人力消耗極大。同時(shí)隨著服務(wù)高峰和低谷的波動(dòng),服務(wù)器的數(shù)量需求是彈性的,動(dòng)態(tài)調(diào)整服務(wù)數(shù)量也是一個(gè)極大的難題。
綜上所述,該系統(tǒng)采用Docker容器化技術(shù)部署方案。容器化是一種虛擬化技術(shù),用來隔離運(yùn)行在主機(jī)上不同的進(jìn)程,使進(jìn)程之間、進(jìn)程和宿主操作系統(tǒng)相互隔離、互不影響。Docker將異構(gòu)的服務(wù)器環(huán)境部署為統(tǒng)一虛擬環(huán)境,將應(yīng)用創(chuàng)建為鏡像服務(wù),部署到任一虛擬環(huán)境下。利用Kubernetes等容器編排工具,可實(shí)現(xiàn)快速擴(kuò)容和縮容,提高集群彈性能力。
該系統(tǒng)包含十幾個(gè)微服務(wù)應(yīng)用,場(chǎng)景下應(yīng)用數(shù)量將更多,容器化可簡(jiǎn)化部署的復(fù)雜度,但部署的數(shù)量級(jí)依舊很大,DevOps可有效解決以上問題。DevOps是指通過工具協(xié)助,快速高效地完成應(yīng)用的生命周期管理,實(shí)現(xiàn)應(yīng)用系統(tǒng)快速交付和部署。DevOps工具很多,本方案采用Jenkins與Kubernetes相結(jié)合,使用Docker容器技術(shù),通過Jenkins持續(xù)集成工具編譯和構(gòu)建鏡像,并通過Kubernetes容器化編排工具,部署到Docker容器化集群節(jié)點(diǎn)中,實(shí)現(xiàn)服務(wù)節(jié)點(diǎn)的監(jiān)控、快速部署、擴(kuò)容和縮容。
本方案將傳統(tǒng)單中心系統(tǒng)架構(gòu)優(yōu)化為云原生微服務(wù)邊緣計(jì)算架構(gòu)。邊緣計(jì)算架構(gòu)是指在需求所在地或數(shù)據(jù)源頭的附近,提供最近端的服務(wù),把原本中心節(jié)點(diǎn)的應(yīng)用計(jì)算服務(wù),移至網(wǎng)絡(luò)的邏輯邊緣節(jié)點(diǎn)來處理,是一種分散式運(yùn)算架構(gòu)。將大型中心節(jié)點(diǎn),拆分成更小、更易管理、處理更快的就近計(jì)算節(jié)點(diǎn)。就近邊緣計(jì)算節(jié)點(diǎn)能有效解決中心節(jié)點(diǎn)遠(yuǎn)程傳輸帶來的網(wǎng)絡(luò)延遲、數(shù)據(jù)安全等問題,在靠近數(shù)據(jù)源頭處提供智能分析計(jì)算,減少時(shí)延,提升效率,提高安全隱私保護(hù)。邊緣計(jì)算獲取海量數(shù)據(jù)后,快速完成數(shù)據(jù)清洗和脫敏,將少量有效數(shù)據(jù)傳輸給中心節(jié)點(diǎn)。
本方案以冷鏈系統(tǒng)為例,包括冷鏈車載系統(tǒng)、冷鏈倉(cāng)儲(chǔ)系統(tǒng)和冷鏈管理中心系統(tǒng)三部分。由于生鮮、醫(yī)療用品等物品對(duì)溫度極其敏感,在路途和倉(cāng)儲(chǔ)中需要嚴(yán)格監(jiān)控溫濕度、運(yùn)輸管理人員健康情況等指標(biāo)。系統(tǒng)須在每臺(tái)運(yùn)輸設(shè)備和每個(gè)冷鏈倉(cāng)庫(kù)安裝多個(gè)溫濕度傳感器等智能設(shè)備,將溫濕度、人員健康信息、運(yùn)輸車輛和倉(cāng)儲(chǔ)數(shù)據(jù),實(shí)時(shí)傳輸?shù)奖镜叵到y(tǒng)進(jìn)行計(jì)算和預(yù)警,并將匯總數(shù)據(jù)傳輸至冷鏈管理中心系統(tǒng),其整體系統(tǒng)設(shè)計(jì)如圖5所示。
圖5 系統(tǒng)介紹Fig.5 System introduction
邊緣系統(tǒng)包括冷鏈運(yùn)輸車和冷鏈倉(cāng)庫(kù)溫濕控系統(tǒng)。
每一臺(tái)冷鏈運(yùn)輸車部署數(shù)個(gè)智能溫控設(shè)備和一臺(tái)主機(jī),智能設(shè)備采集運(yùn)輸物品溫濕度和運(yùn)輸人員健康信息,將數(shù)據(jù)傳輸?shù)杰囕d主機(jī)部署的溫控系統(tǒng),溫控系統(tǒng)實(shí)時(shí)計(jì)算獲取到的溫度和濕度數(shù)據(jù),保證溫度濕度在合理范圍內(nèi)。如運(yùn)輸物品溫濕度或運(yùn)輸人員健康參數(shù)出現(xiàn)不達(dá)標(biāo),馬上預(yù)警給運(yùn)輸人員和中心云平臺(tái)進(jìn)行調(diào)控。溫度和濕度的規(guī)則由中心云平臺(tái)設(shè)定并投放到車載系統(tǒng),因此冷鏈運(yùn)輸車的溫濕度采集頻率可以提升到毫秒級(jí),實(shí)現(xiàn)實(shí)時(shí)監(jiān)控。將溫濕度統(tǒng)計(jì)到中心云平臺(tái)設(shè)定的周期數(shù)據(jù)后再統(tǒng)一上報(bào),可減小中心云平臺(tái)的數(shù)據(jù)壓力。
冷鏈運(yùn)輸車車載溫控邊緣系統(tǒng)包括數(shù)據(jù)收集、規(guī)則服務(wù)、數(shù)據(jù)上報(bào)、報(bào)警服務(wù)和數(shù)據(jù)管理存儲(chǔ)等服務(wù)。系統(tǒng)為Spring Cloud微服務(wù)化架構(gòu),服務(wù)間調(diào)用通過Feign實(shí)現(xiàn),為便于遠(yuǎn)程快速更新升級(jí),服務(wù)通過Docker容器化部署,如圖6所示。
圖6 車載溫控系統(tǒng)Fig.6 Vehicle temperature control system
倉(cāng)庫(kù)部署溫濕控邊緣系統(tǒng)包括智能設(shè)備、數(shù)據(jù)采集、監(jiān)控管理平臺(tái)、倉(cāng)庫(kù)管理系統(tǒng)、物流管理系統(tǒng)等。智能溫控設(shè)備上傳的數(shù)據(jù),同樣在規(guī)則服務(wù)中完成風(fēng)控預(yù)警計(jì)算,而采集到的數(shù)據(jù)樣本將在本地完成數(shù)據(jù)清洗和整理,匯總后上報(bào)給中心云平臺(tái)。
服務(wù)為Spring Cloud微服務(wù)架構(gòu),根據(jù)倉(cāng)庫(kù)的大小,安裝一定數(shù)量的智能設(shè)備。隨著智能溫控設(shè)備安裝數(shù)量的增加,數(shù)據(jù)收集服務(wù)和規(guī)則服務(wù)等需要部署多個(gè)節(jié)點(diǎn),通過容器化集群部署,只需要增加鏡像進(jìn)程即可實(shí)現(xiàn)服務(wù)節(jié)點(diǎn)的增加,如圖7所示。
圖7 倉(cāng)庫(kù)智能管理系統(tǒng)Fig.7 Warehouse intelligent management system
中心化平臺(tái)包括數(shù)據(jù)收集、數(shù)據(jù)運(yùn)算和存儲(chǔ)、數(shù)據(jù)中臺(tái)、業(yè)務(wù)管理平臺(tái)等。邊緣計(jì)算系統(tǒng)減少了中心化平臺(tái)采集的數(shù)據(jù),將采集數(shù)據(jù)周期從毫秒級(jí)數(shù)據(jù)降低到分鐘級(jí),整體數(shù)據(jù)運(yùn)算量減少數(shù)倍,但邊緣系統(tǒng)數(shù)量多,整體采集的數(shù)據(jù)依然巨大。數(shù)據(jù)清洗和計(jì)算節(jié)點(diǎn)數(shù)量隨著運(yùn)輸車輛和倉(cāng)庫(kù)數(shù)量的變化而不斷增加,高峰期與低谷期數(shù)量可能會(huì)有數(shù)倍之多。為使中心化云平臺(tái)能具有高彈性計(jì)算能力,平臺(tái)采用Kubernetes作為容器化編排工具,通過其Replication Controller對(duì)Pod副本數(shù)的控制能力,可以快速增縮節(jié)點(diǎn)數(shù),從而彈性地增加和減少集群的計(jì)算能力。中心化平臺(tái)容器集群如圖8所示。
圖8 中心化平臺(tái)容器集群Fig.8 Centralized platform container cluster
中心化云平臺(tái)通過Zuul網(wǎng)關(guān)提供數(shù)據(jù)收集等HTTP接口服務(wù),通過Netflix設(shè)定降級(jí)和熔斷,避免雪崩效應(yīng)。
本方案采用阿里云服務(wù)器ECS部署,采用一臺(tái)2核4 GB服務(wù)器、四臺(tái)2核8 GB云服務(wù)器和一臺(tái)MySQL關(guān)系型數(shù)據(jù)庫(kù);在2核4 GB服務(wù)器上搭建Jenkins環(huán)境、Harbor、Maven倉(cāng)庫(kù)和GitLab等管理工具;在四臺(tái)2核8 GB服務(wù)器上搭建Kubernetes集群環(huán)境和容器化環(huán)境。
微服務(wù)包括冷鏈車載系統(tǒng)、冷鏈倉(cāng)儲(chǔ)系統(tǒng)和冷鏈管理中心系統(tǒng)三大系統(tǒng)。構(gòu)建Eureka代碼上傳到GitLab,通過Jenkins拉取Git代碼并打包成Docker鏡像上傳到Harbor,最后Jenkins執(zhí)行Kubernetes插件,使Kubernetes拉取鏡像創(chuàng)建服務(wù)。構(gòu)建集群Eureka雙節(jié)點(diǎn)Eureka1和Eureka2。以同樣的方式搭建Zuul網(wǎng)關(guān)雙節(jié)點(diǎn)Zuul1和Zuul2,提供8080訪問端口提供服務(wù)?;A(chǔ)服務(wù)搭建完成后,部署數(shù)據(jù)清洗服務(wù)Data ETL雙節(jié)點(diǎn),其余業(yè)務(wù)系統(tǒng)采用同樣方式部署雙節(jié)點(diǎn)。
打包部署完成后,在任意兩臺(tái)2核8 GB服務(wù)器上部署Nignx節(jié)點(diǎn),對(duì)外提供80端口,通過反向代理指向Zuul網(wǎng)關(guān)的8080端口,其余端口由防火墻控制攔截,防止集群被惡意攻擊。
本方案采用物聯(lián)網(wǎng)邊緣計(jì)算與云原生的核心服務(wù),構(gòu)建了一套冷鏈系統(tǒng),通過Spring Cloud微服務(wù)架構(gòu)和Docker容器化技術(shù),使用Kubernetes、Jenkins等DevOps工具,實(shí)現(xiàn)系統(tǒng)的高效部署和快速增縮節(jié)點(diǎn)。該系統(tǒng)具有高性能、高穩(wěn)定性和高擴(kuò)容性,為物聯(lián)網(wǎng)場(chǎng)景提供了一套安全、彈性、高效和穩(wěn)定的解決方案。