邵黎明
摘? 要:長(zhǎng)期擴(kuò)展性系統(tǒng)具有獨(dú)立模塊成型快、系統(tǒng)發(fā)展時(shí)間長(zhǎng)、模塊迭代頻繁的特點(diǎn)。因此將獨(dú)立模塊服務(wù)化、采用可插拔的服務(wù)注冊(cè)機(jī)制并通過(guò)完善的權(quán)限控制和認(rèn)證實(shí)現(xiàn)新舊服務(wù)之間的通訊,進(jìn)而在提高數(shù)據(jù)和服務(wù)的復(fù)用性避免重復(fù)開發(fā)的同時(shí)保證了每個(gè)獨(dú)立服務(wù)的高可用性。分布式系統(tǒng)的CAP理論要求在架構(gòu)的設(shè)計(jì)前期對(duì)CP和AP作出抉擇,而由于民航的領(lǐng)域特性,對(duì)于高可用和分區(qū)容錯(cuò)性的要求遠(yuǎn)大于一切,因此以AP為原則的去中心化設(shè)計(jì)成為首選。
關(guān)鍵詞:服務(wù)注冊(cè);微服務(wù);高可用;去中心化;民航領(lǐng)域
中圖分類號(hào):TP302? ? ? ? 文獻(xiàn)標(biāo)志碼:A? ? ? ? ?文章編號(hào):2095-2945(2019)09-0069-02
Abstract: The long-term extensibility system has the characteristics of fast independent module forming, long system development time and frequent module iteration. Therefore, the independent module is serviced, the pluggable service registration mechanism is adopted, and the communication between the old and the new services is realized through perfect authority control and authentication. In turn, it can improve the reusability of data and services to avoid repeated development while ensuring the high availability of each independent service. The CAP theory of distributed systems requires a choice between CP and AP in the early stage of architecture design, but because of the domain characteristics of civil aviation, the requirements for high availability and partition fault tolerance are far greater than anything else. Therefore, the decentralized design based on the principle of AP has become the first choice.
Keywords: service registration; micro-service; high availability; decentralization; civil aviation field
基于關(guān)系性數(shù)據(jù)庫(kù)開發(fā)的傳統(tǒng)單機(jī)應(yīng)用不存在分區(qū)所以不需要考慮分區(qū)容錯(cuò)性、僅有一個(gè)可用服務(wù)、數(shù)據(jù)通過(guò)單個(gè)數(shù)據(jù)庫(kù)訪問(wèn)具備強(qiáng)一致性。但是隨著業(yè)務(wù)的拓展,這種單機(jī)應(yīng)用將會(huì)越來(lái)越多,系統(tǒng)之間的相互通信一般采取接口方式,而接口的增加無(wú)疑會(huì)導(dǎo)致系統(tǒng)風(fēng)險(xiǎn)的增加并且對(duì)各個(gè)不同系統(tǒng)和不同系統(tǒng)的接口維護(hù)將會(huì)異常困難,并且維護(hù)的工作量也是隨著系統(tǒng)的增加不斷的加大;如果把各個(gè)獨(dú)立系統(tǒng)集成為單個(gè)系統(tǒng)則需要考慮:(1)系統(tǒng)是
否能承載各終端訪問(wèn)壓力;(2)各個(gè)獨(dú)立應(yīng)用的開發(fā)時(shí)間
是否可以在接近的時(shí)間內(nèi)完成;(3)當(dāng)系統(tǒng)容量達(dá)到某個(gè)
量級(jí)時(shí),是否具備完善的監(jiān)控管理機(jī)制。
1 基于微服務(wù)的民航基礎(chǔ)服務(wù)系統(tǒng)的研究
本文介紹以大數(shù)據(jù)為依托的微服務(wù)架構(gòu)應(yīng)用,構(gòu)建高效、用戶體驗(yàn)良好、抗壓能力強(qiáng)、能滿足用戶多元化需求的民航基礎(chǔ)服務(wù)系統(tǒng),并介紹對(duì)碎片化系統(tǒng)的整理方案。該方案在對(duì)微服務(wù)深入研究的基礎(chǔ)上運(yùn)用其對(duì)服務(wù)的注冊(cè)與發(fā)現(xiàn)機(jī)制有效管理服務(wù)層的依賴關(guān)系并結(jié)合實(shí)際業(yè)務(wù)完成對(duì)服務(wù)的授權(quán)與鑒權(quán),方案包括數(shù)據(jù)呈量級(jí)增長(zhǎng)時(shí)的處理辦法和對(duì)數(shù)據(jù)的有效利用。在滿足民航基礎(chǔ)服務(wù)系統(tǒng)向公網(wǎng)方向發(fā)展的安全、穩(wěn)定等必要條件下,實(shí)現(xiàn)了系統(tǒng)的可伸縮、多終端兼容。
1.1 行業(yè)需求
民航相關(guān)服務(wù)越來(lái)越多,服務(wù)的管理越來(lái)越困難,小服務(wù)資源的浪費(fèi)等問(wèn)題逐漸顯現(xiàn),此時(shí)行業(yè)迫切需要增加一個(gè)調(diào)度中心基于訪問(wèn)壓力實(shí)時(shí)管理集群容量,整合應(yīng)用服務(wù),使系統(tǒng)之間互聯(lián)互通,提高資源的利用率。
1.2 民航基礎(chǔ)服務(wù)系統(tǒng)建設(shè)方案
微服務(wù)架構(gòu)對(duì)管轄內(nèi)的服務(wù)進(jìn)行有效的治理是它有別于RPC或其他分布式系統(tǒng)架構(gòu)的關(guān)鍵特點(diǎn),為適應(yīng)未來(lái)民航IT系統(tǒng)的不斷增長(zhǎng)而建立基于微服務(wù)的民航基礎(chǔ)服務(wù)系統(tǒng)。
系統(tǒng)設(shè)計(jì)方面以微服務(wù)的“去中心化”為核心思想,按照業(yè)務(wù)對(duì)系統(tǒng)進(jìn)行分類管理,根據(jù)依賴關(guān)系對(duì)服務(wù)分層下層應(yīng)用不允許逆向調(diào)用,嚴(yán)格把控?cái)?shù)據(jù)流向。整個(gè)架構(gòu)分為基礎(chǔ)服務(wù)、接入服務(wù)、調(diào)用服務(wù)、業(yè)務(wù)系統(tǒng)、統(tǒng)一門戶、數(shù)據(jù)服務(wù)六個(gè)版塊,各個(gè)版塊之間統(tǒng)一采用rest風(fēng)格的http協(xié)議通信。
(1)基礎(chǔ)服務(wù)包含服務(wù)的注冊(cè)“中心”和配置“中心”,注冊(cè)服務(wù)通過(guò)將自身注冊(cè)到其他的注冊(cè)服務(wù)上創(chuàng)建副本去中心化,配置服務(wù)通過(guò)自我復(fù)制創(chuàng)建副本集去中心化,同時(shí)將自身注冊(cè)到注冊(cè)服務(wù)的副本集為其他各部提供啟動(dòng)時(shí)的配置;可以由運(yùn)維人員切換生產(chǎn)環(huán)境和開發(fā)環(huán)境的配置,統(tǒng)一的環(huán)境配置使系統(tǒng)管理更加高效,開發(fā)人員也無(wú)需知曉具體的數(shù)據(jù)庫(kù)連接密碼等敏感信息。
(2)接入服務(wù)負(fù)責(zé)對(duì)接入應(yīng)用的鑒權(quán)與授權(quán)以及通過(guò)配置中心的相關(guān)配置限制接入應(yīng)用的調(diào)用頻次以保障被調(diào)用服務(wù)的安全。權(quán)限控制可以采用完美契合rest無(wú)狀態(tài)特性的OAuth2和JWT的組合方案,在應(yīng)用申請(qǐng)接入時(shí)可在后臺(tái)配置一個(gè)Token來(lái)控制當(dāng)前接入應(yīng)用的訪問(wèn)權(quán)限、時(shí)效和訪問(wèn)頻次;當(dāng)前應(yīng)用在調(diào)用其他服務(wù)時(shí)攜帶自己的Token,同時(shí)也要擁有解析允許訪問(wèn)本應(yīng)用Token的能力。服務(wù)網(wǎng)關(guān)在Nginx+Lua和spring cloud的Zuul中選擇后者,因?yàn)镹ginx雖然以單線程多路復(fù)用提供了比Zuul更加高效的服務(wù)但是Zuul擁有Spring生態(tài)的支持,開發(fā)和維護(hù)都更加方便。
(3)負(fù)載均衡和容錯(cuò)保護(hù)是提高系統(tǒng)可用性的措施之一,負(fù)載均衡也可以使用Nginx和Lua來(lái)實(shí)現(xiàn),但同樣選用spring cloud中集成了負(fù)責(zé)負(fù)載均衡的Ribbon,同時(shí)Ribbon還帶來(lái)對(duì)非spring boot應(yīng)用的支持,作為一個(gè)民航基礎(chǔ)系統(tǒng),應(yīng)該具備對(duì)其他rest風(fēng)格應(yīng)用的兼容特性以確保盡可能的接入如ASP.Net開發(fā)的應(yīng)用服務(wù)。容錯(cuò)保護(hù)又包括服務(wù)熔斷和服務(wù)降級(jí)等措施,當(dāng)系統(tǒng)協(xié)同運(yùn)行過(guò)程中出現(xiàn)某個(gè)服務(wù)整體無(wú)法調(diào)用或響應(yīng)時(shí)間長(zhǎng)的時(shí)候,為保障用戶能在可接受時(shí)間內(nèi)得到回饋需要對(duì)服務(wù)分情況的進(jìn)行降級(jí)或熔斷;降級(jí)是將當(dāng)前服務(wù)在路由節(jié)點(diǎn)中的位置向后推移,熔斷則是當(dāng)超時(shí)或無(wú)法調(diào)用時(shí)路由到其他服務(wù)中。
(4)數(shù)據(jù)服務(wù)提供緩存、關(guān)系型數(shù)據(jù)庫(kù)、分布式文件系統(tǒng)的支持,如果后期數(shù)據(jù)量確實(shí)很大,也有大數(shù)據(jù)計(jì)算的需求還可以加入Spark。緩存采用K-V內(nèi)存數(shù)據(jù)庫(kù)Redis提高數(shù)據(jù)層的并發(fā)處理能力;關(guān)系型數(shù)據(jù)庫(kù)可選擇開源的MySql配合應(yīng)用層數(shù)據(jù)分片框架Sharding-Jdbc做數(shù)據(jù)庫(kù)的讀寫分離、分庫(kù)分表集群,也可以選擇MyCat作為關(guān)系型數(shù)據(jù)庫(kù)中間件來(lái)提供分庫(kù)分表和讀寫分離的功能,前者的好處是不需要單獨(dú)維護(hù)一個(gè)數(shù)據(jù)庫(kù)中間件,也不用考慮中間件的可用性和并發(fā)處理能力,后者的好處是開發(fā)方無(wú)需關(guān)心數(shù)據(jù)庫(kù)存儲(chǔ)能力問(wèn)題,兩種方案都解決了持續(xù)增長(zhǎng)數(shù)據(jù)的存儲(chǔ)問(wèn)題;分布式文件系統(tǒng)使用MongoDB,后續(xù)如果集成Spark則構(gòu)成一個(gè)完整的大數(shù)據(jù)解決方案。
(5)業(yè)務(wù)系統(tǒng)是需要協(xié)同工作的服務(wù)的整合,各個(gè)應(yīng)用服務(wù)集群提供各自相對(duì)獨(dú)立的功能,同時(shí)也需要考慮響應(yīng)時(shí)間和運(yùn)營(yíng)維護(hù)的復(fù)雜程度。
(6)統(tǒng)一門戶在微服務(wù)架構(gòu)中具有對(duì)業(yè)務(wù)應(yīng)用生命周期的支撐作用,當(dāng)相對(duì)獨(dú)立的業(yè)務(wù)應(yīng)用越來(lái)越多時(shí),這些微服務(wù)程序都將不再依賴應(yīng)用服務(wù)器,不依賴傳統(tǒng)應(yīng)用服務(wù)器則會(huì)導(dǎo)致應(yīng)用服務(wù)器提供管理控制臺(tái)無(wú)法正常工作,所以微服務(wù)的運(yùn)行管理需要有統(tǒng)一的管理門戶。統(tǒng)一集中的微服務(wù)門戶,可以支撐應(yīng)用開發(fā)、業(yè)務(wù)處理、應(yīng)用管理、系統(tǒng)監(jiān)控等。
1.3 民航基礎(chǔ)服務(wù)的接入方案
根據(jù)不同的接入需求,基礎(chǔ)服務(wù)系統(tǒng)提供Server和Client兩種接入方案。
(1)Server接入必須以Restful API的形式并符合微服務(wù)設(shè)計(jì)原則,必須歸入到基礎(chǔ)服務(wù)系統(tǒng)的服務(wù)治理體系中,服務(wù)的響應(yīng)時(shí)間必須在基礎(chǔ)服務(wù)方案規(guī)定的響應(yīng)時(shí)間范圍內(nèi)。Server接入方案開發(fā)方不需要考慮服務(wù)的治理問(wèn)題,同時(shí)也能申請(qǐng)調(diào)用其他服務(wù),是一種高度定制化的接入方式。Server接入前須在門戶申請(qǐng)并登錄帳號(hào),填寫接入應(yīng)用的類型為Server、用途、接入方、需要調(diào)用的服務(wù)等基本信息后提交接入申請(qǐng),由系統(tǒng)管理員確認(rèn)后發(fā)放測(cè)試環(huán)境的接入Token,上線前提交到系統(tǒng)進(jìn)行測(cè)試,測(cè)試通過(guò)后由系統(tǒng)管理員發(fā)放生產(chǎn)環(huán)境Token上線該服務(wù)到申請(qǐng)人賬戶并自動(dòng)開通當(dāng)前賬戶的暫停服務(wù),刪除服務(wù)功能。
(2)Client接入用于適配外部應(yīng)用,當(dāng)舊系統(tǒng)的響應(yīng)越來(lái)越慢且當(dāng)前基礎(chǔ)服務(wù)中已經(jīng)包含了部分可以被舊系統(tǒng)使用的功能時(shí)可以把這部分功能的提供方轉(zhuǎn)換為基礎(chǔ)服務(wù)。仍需在門戶登錄的狀態(tài)下申請(qǐng)接入,填寫接入應(yīng)用類型為Client、需要訂閱的消息、接收消息的地址、驗(yàn)參公鑰等信息,提交申請(qǐng)后獲得對(duì)應(yīng)應(yīng)用的app key,系統(tǒng)管理員確認(rèn)后當(dāng)前app key擁有接入權(quán)限填入的接收消息地址將會(huì)實(shí)時(shí)收到訂閱的消息,消息的傳輸基于http協(xié)議,數(shù)據(jù)格式為json,同時(shí)為保障接入的客戶端數(shù)據(jù)安全,接收到消息時(shí)必須對(duì)參數(shù)進(jìn)行簽名驗(yàn)證。
1.4 技術(shù)優(yōu)勢(shì)
分布式系統(tǒng)是當(dāng)用戶量攀升、數(shù)據(jù)量增大時(shí)的一種處理方法,基于微服務(wù)的民航基礎(chǔ)服務(wù)符合去中心化的設(shè)計(jì)規(guī)范并具備以下優(yōu)勢(shì):
(1)業(yè)務(wù)可伸縮。系統(tǒng)搭建完成后,可快速響應(yīng)行業(yè)內(nèi)多種需求,業(yè)務(wù)應(yīng)用開發(fā)完成后,系統(tǒng)管理員可通過(guò)門戶頁(yè)面快速發(fā)布,同時(shí)對(duì)業(yè)務(wù)應(yīng)用的升級(jí)與下線也是一鍵操作。
(2)故障可隔離。在系統(tǒng)發(fā)生嚴(yán)重故障(例如某業(yè)務(wù)應(yīng)用的所有副本發(fā)生網(wǎng)絡(luò)故障)時(shí),系統(tǒng)會(huì)自動(dòng)啟用應(yīng)急措施將用戶請(qǐng)求路由到其他服務(wù)中,并產(chǎn)生警報(bào)信息。如果發(fā)生輕微故障(例如某業(yè)務(wù)應(yīng)用下的個(gè)別副本響應(yīng)時(shí)間長(zhǎng)),系統(tǒng)會(huì)自動(dòng)選擇響應(yīng)時(shí)間較短的服務(wù)來(lái)響應(yīng)用戶請(qǐng)求。
(3)系統(tǒng)好管控。引入門戶對(duì)系統(tǒng)的業(yè)務(wù)應(yīng)用統(tǒng)一管控,可以有效的復(fù)用基礎(chǔ)應(yīng)用,從架構(gòu)上控制業(yè)務(wù)應(yīng)用之間的依賴關(guān)系,使業(yè)務(wù)應(yīng)用的開發(fā)和上線更為高效。
2 結(jié)束語(yǔ)
從單一的數(shù)據(jù)庫(kù)架構(gòu),到主從讀寫分離的數(shù)據(jù)庫(kù)架構(gòu),再到垂直拆分、水平拆分的數(shù)據(jù)庫(kù)架構(gòu),當(dāng)民航領(lǐng)域垂直應(yīng)用越來(lái)越多,應(yīng)用之間交互不可避免,將核心業(yè)務(wù)抽取出來(lái),作為獨(dú)立的服務(wù),逐漸形成穩(wěn)定的服務(wù)中心,使前端應(yīng)用能更快速地響應(yīng)多變的市場(chǎng)需求,使民航領(lǐng)域集成系統(tǒng)具備可持續(xù)迭代的能力,促進(jìn)行業(yè)的發(fā)展。
參考文獻(xiàn):
[1]黃志誠(chéng).數(shù)據(jù)中心建設(shè)中服務(wù)器虛擬化的應(yīng)用研究[J].科技資訊,2018.
[2]汪文彬.高校數(shù)據(jù)中心服務(wù)器虛擬化研究及應(yīng)用[D].浙江工業(yè)大學(xué),2013:22-23.