陳志達(dá)
(中國航空油料有限責(zé)任公司 北京市 100000)
目前,企業(yè)級微服務(wù)場景的容器云平臺已經(jīng)成為高可用性、高性能、高安全性及易擴(kuò)展性云平臺服務(wù)的發(fā)展新趨勢,尤其是在已部署大數(shù)據(jù)中心的基礎(chǔ)上,隨著IaaS(Infrastructure-as-a-Service)基礎(chǔ)架構(gòu)層的不斷發(fā)展,基于Docker 容器技術(shù)的微服務(wù)架構(gòu)技術(shù),能極大程度地消除開發(fā)環(huán)境與運(yùn)維環(huán)境的差異,便于進(jìn)行版本管理和持續(xù)交付,與航油客戶管理系統(tǒng)的大數(shù)據(jù)量、高頻用戶的應(yīng)用場景尤為契合,但單純的Docker 容器技術(shù),無法應(yīng)對航油客戶管理系統(tǒng)高穩(wěn)定性和高安全性的要求特點,因此,在PaaS 平臺下,采用Kubernetes(K8S)對云資源環(huán)境進(jìn)行管理。
Kubernetes 是Google 開源的一個容器編排引擎,它支持自動化部署、大規(guī)??缮炜s、應(yīng)用容器化管理。在生產(chǎn)環(huán)境中部署一個應(yīng)用程序時,通常要部署該應(yīng)用的多個實例以便對應(yīng)用請求進(jìn)行負(fù)載均衡。航油管理系統(tǒng)針對數(shù)據(jù)互聯(lián)、內(nèi)外部集成的痛點,能夠?qū)崿F(xiàn)與航油SAP 系統(tǒng)、客戶、銀行等多個內(nèi)外部系統(tǒng)的集成。
航油客戶管理系統(tǒng)的容器服務(wù)中依舊是Web 服務(wù)為主,使用自動部署平臺使用構(gòu)建機(jī)器構(gòu)建并遠(yuǎn)程部署至目標(biāo)機(jī)器。當(dāng)將容器固化成鏡像后,則可視為應(yīng)用集裝箱,將應(yīng)用運(yùn)行所需的程序、依賴和運(yùn)行環(huán)境進(jìn)行打包處理。特別是Docker 鏡像的設(shè)計,能夠解決容器從構(gòu)建、交付到運(yùn)行,提供了完整的生態(tài)鏈支持[1]。
航油客戶管理系統(tǒng)的容器服務(wù)采用微服務(wù)架構(gòu)管理,包含前后端分離、權(quán)限統(tǒng)一認(rèn)證、應(yīng)用系統(tǒng)的管理和治理、開發(fā)與運(yùn)維一體化、DEVOPS 等重點模塊。
2.1.1 前后端分離
前臺和后臺分離為獨立的組件,微服務(wù)模塊間通過RestAPI 交互,前后端也通過RestAPI 接口服務(wù)進(jìn)行交互。
2.1.2 權(quán)限統(tǒng)一認(rèn)證
權(quán)限系統(tǒng)微服務(wù)化,建立獨立的微服務(wù)權(quán)限認(rèn)證中心,通過權(quán)限系統(tǒng)微服務(wù)來控制其他微服務(wù)的權(quán)限,保證整體系統(tǒng)構(gòu)架的權(quán)限一致性。
2.1.3 應(yīng)用系統(tǒng)的管理和治理
建立完整的應(yīng)用管理治理框架以達(dá)到優(yōu)化服務(wù)架構(gòu)、快速故障界定、微服務(wù)管控等目的。
2.1.4 開發(fā)與運(yùn)維一體化
運(yùn)用微服務(wù)架構(gòu),不再只是運(yùn)行一個服務(wù),而是數(shù)十個,甚至數(shù)百個服務(wù)。在CCF 云服務(wù)架構(gòu)中,利用DevOps 工具(Jenkins,Maven,Git/SVN 等)消除差錯率較高的人工任務(wù),為設(shè)計、構(gòu)建和部署服務(wù)提供了標(biāo)準(zhǔn)框架,從而節(jié)省了時間和精力。
在基于云容器的航油客戶管理系統(tǒng)中采用Docker 容器技術(shù)的云平臺架構(gòu),將Kubernetes 視為容器編排工具,能夠解決應(yīng)用運(yùn)行環(huán)境整體打包的問題,確定了分層鏡像格式,云服務(wù)架構(gòu)分為IaaS、PaaS、SaaS 三層[2]。
在基于云容器的航油客戶管理系統(tǒng)中,利用Kubernetes 創(chuàng)建多個容器,每個容器里面運(yùn)行一個應(yīng)用實例,然后通過內(nèi)置的負(fù)載均衡策略,實現(xiàn)對這一組應(yīng)用實例的管理、發(fā)現(xiàn)、訪問,而不用運(yùn)維人員去進(jìn)行復(fù)雜的手工配置和處理。
在航油客戶管理系統(tǒng)中將使用容器技術(shù)對各服務(wù)節(jié)點進(jìn)行管理。Docker 是一個開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個可移植的鏡像中,然后發(fā)布到任何流行的Linux 或Windows 機(jī)器上,也可以實現(xiàn)虛擬化。容器是完全使用沙箱機(jī)制,相互之間不會有任何接口[3]。
在航油客戶管理系統(tǒng)中涉及與客戶系統(tǒng)對、與招標(biāo)人指定的五家金融系統(tǒng)、與航油集團(tuán)SAP ERP 系統(tǒng)、與金稅系統(tǒng)、與智慧加油系統(tǒng)、氣象數(shù)據(jù)系統(tǒng)等相關(guān)系統(tǒng)進(jìn)行系統(tǒng)集成,此次數(shù)據(jù)集成具有集成系統(tǒng)多,數(shù)據(jù)范圍廣泛,集成技術(shù)復(fù)雜等特點,為確保系統(tǒng)集成的順利進(jìn)行,保障系統(tǒng)建設(shè),以多種主流數(shù)據(jù)集成技術(shù)為基礎(chǔ),建立獨立的數(shù)據(jù)交換平臺,滿足現(xiàn)有業(yè)務(wù)系統(tǒng)數(shù)據(jù)接入需要,兼顧未來數(shù)據(jù)接口擴(kuò)展的策略。
基于以上結(jié)構(gòu)設(shè)計,在航油客戶管理系統(tǒng)按照統(tǒng)一業(yè)務(wù)模型的思想把各系統(tǒng)數(shù)據(jù)集成起來。根據(jù)系統(tǒng)集成的需要,將采用提供相關(guān)接口的方式進(jìn)行實現(xiàn)。
3.1.1 遠(yuǎn)程數(shù)據(jù)庫調(diào)用
采用遠(yuǎn)程數(shù)據(jù)庫訪問技術(shù),在對方數(shù)據(jù)庫提供訪問權(quán)限的前提下,以應(yīng)用數(shù)據(jù)交換功能為基礎(chǔ),實現(xiàn)對數(shù)據(jù)庫中信息的直接讀取和存儲,已到達(dá)數(shù)據(jù)交換的目的。這種方式目前在企業(yè)內(nèi)部系統(tǒng)間的交換較為通用,但受到安全性等影響,在外部系統(tǒng)數(shù)據(jù)交換方面很少使用[4]。
3.1.2 Webservice 方式
建立基于Web Services 協(xié)議等交換方式的與協(xié)作單位(承運(yùn)商、供應(yīng)商、商業(yè)公司等)的信息交換標(biāo)準(zhǔn),使信息資源規(guī)劃問題集中在數(shù)據(jù)交換的標(biāo)準(zhǔn)化、規(guī)范化的協(xié)調(diào)和設(shè)計上;WebServices 是由航油公司發(fā)布的完成其特定商務(wù)需求的在線應(yīng)用服務(wù),其他公司或應(yīng)用軟件訪問并使用這項在線服務(wù)。
3.1.3 基于TCP/IP 的文件交換
主要采用FTP、EMAIL 等文件傳輸方式,利用客戶機(jī)可以給服務(wù)器發(fā)出命令來下載文件,上載文件,實現(xiàn)對數(shù)據(jù)的發(fā)送和接收,這種方式是以往系統(tǒng)間數(shù)據(jù)交換通行的一種方式。
3.1.4 PI 平臺或其它技術(shù)
通過使用第三方提供的相關(guān)交換平臺或技術(shù),來達(dá)到對外部系統(tǒng)的數(shù)據(jù)交換服務(wù),本交換平臺將根據(jù)不同技術(shù)的要求,快速靈活的進(jìn)行擴(kuò)充,達(dá)到對現(xiàn)有系統(tǒng)和未來外部系統(tǒng)的數(shù)據(jù)交換擴(kuò)展。如:ERP 的PI 平臺等。
通過搭建的綜合上述幾種接口方式和各項技術(shù)的數(shù)據(jù)交換平臺來集成各系統(tǒng)數(shù)據(jù)。數(shù)據(jù)交換平臺主要包括數(shù)據(jù)抽取、數(shù)據(jù)數(shù)據(jù)處理及加載處理、策略管理和系統(tǒng)管理等模塊。
數(shù)據(jù)抽取模型主要包括實時數(shù)據(jù)交換、周期數(shù)據(jù)交換、數(shù)據(jù)復(fù)制、非結(jié)構(gòu)數(shù)據(jù)交換等等,對應(yīng)的技術(shù)包括數(shù)據(jù)復(fù)制、ETL、數(shù)據(jù)交換及應(yīng)用服務(wù)。
在航油客戶管理系統(tǒng)的數(shù)據(jù)應(yīng)用部分,采用能對海量數(shù)據(jù)進(jìn)行分布式處理的大數(shù)據(jù)架構(gòu),將加油數(shù)據(jù)、客服數(shù)據(jù)、商務(wù)結(jié)算數(shù)據(jù)等業(yè)務(wù)數(shù)據(jù)進(jìn)行應(yīng)用,基于真實業(yè)務(wù)數(shù)據(jù)進(jìn)行日常業(yè)務(wù)統(tǒng)計分析。包括數(shù)據(jù)標(biāo)簽化管理、管理駕駛艙、加油員數(shù)據(jù)分析、銷售數(shù)據(jù)分析、結(jié)算數(shù)據(jù)分析、預(yù)測分析等數(shù)據(jù)應(yīng)用功能,同時為今后擴(kuò)展更多的大數(shù)據(jù)應(yīng)用,整體架構(gòu)主要由包括數(shù)據(jù)集成、數(shù)據(jù)存儲、數(shù)據(jù)計算、數(shù)據(jù)應(yīng)用和平臺管理五部分。
航油客戶管理系統(tǒng)的大數(shù)據(jù)技術(shù)架構(gòu)以Hadoop 技術(shù)生態(tài)圈為基礎(chǔ),根據(jù)數(shù)據(jù)采集、數(shù)據(jù)整合、數(shù)據(jù)處理、數(shù)據(jù)存儲、數(shù)據(jù)消費(fèi)和數(shù)據(jù)管理的要求,選擇主流、穩(wěn)定的功能組件進(jìn)行整合,實現(xiàn)大數(shù)據(jù)的整體架構(gòu)。具體包括數(shù)據(jù)集成框架、數(shù)據(jù)存儲框架、數(shù)據(jù)計算框架、數(shù)據(jù)應(yīng)用框架、平臺管理組成[5]。
4.1.1 數(shù)據(jù)集成框架
是大數(shù)據(jù)架構(gòu)的底層功能,實現(xiàn)從數(shù)據(jù)接入到數(shù)據(jù)消費(fèi)整個環(huán)節(jié)的數(shù)據(jù)存儲功能,為滿足數(shù)據(jù)整個處理流程和數(shù)據(jù)應(yīng)用性能需求,結(jié)合數(shù)據(jù)存儲的分層設(shè)計,數(shù)據(jù)存儲框架分為數(shù)據(jù)湖組件、數(shù)據(jù)倉庫組件和數(shù)據(jù)集市組件。是大數(shù)據(jù)框架用于整合各種數(shù)據(jù)源的技術(shù)解決方案,根據(jù)數(shù)據(jù)源的存儲格式、產(chǎn)生方式、生成時效、消費(fèi)方式等不同,通過數(shù)據(jù)采集組件、消息組件、日志采集組件和流式數(shù)據(jù)組件一滿足各種場景的需求。
4.1.2 數(shù)據(jù)存儲框架
數(shù)據(jù)計算框架是實現(xiàn)數(shù)據(jù)應(yīng)用的解決方案,根據(jù)數(shù)據(jù)處理的環(huán)節(jié)、數(shù)據(jù)存量的級別、數(shù)據(jù)增量的級別、數(shù)據(jù)型態(tài)格式、數(shù)據(jù)應(yīng)用場景和深度等因素,將數(shù)據(jù)計算框架分為批量數(shù)據(jù)處理、流式數(shù)據(jù)處理、應(yīng)用編程模型和數(shù)據(jù)分析模型。
4.1.3 數(shù)據(jù)應(yīng)用框架
數(shù)據(jù)應(yīng)用框架是為數(shù)據(jù)應(yīng)用的終端用戶提供功能服務(wù),實現(xiàn)數(shù)據(jù)的展示、分析,同時架構(gòu)提供JDBC 接口,支持第三方的BI 開發(fā)工具實現(xiàn)數(shù)據(jù)的應(yīng)用開發(fā),如FineBI,tableau,宇動源BI 報表和自由頁面。
數(shù)據(jù)采集組件主要實現(xiàn)局域網(wǎng)內(nèi)的企業(yè)結(jié)構(gòu)化數(shù)據(jù)或多數(shù)據(jù)源的數(shù)據(jù)同步。技術(shù)實現(xiàn)采用開源工具kettle,是一款開源的ETL,完成數(shù)據(jù)的處理,轉(zhuǎn)換,遷移。Kettle 中有兩種腳本文件,transformation 和job,transformation 完成針對數(shù)據(jù)的基礎(chǔ)轉(zhuǎn)換,job則完成整個工作流的控制。Kettle 包括4 個產(chǎn)品:Spoon、Pan、CHEF、Kitchen。
(1)Spoon:通過圖形界面來設(shè)計ETL 轉(zhuǎn)換過程。
(2)Pan:批量運(yùn)行由Spoon 設(shè)計的ETL 轉(zhuǎn)換,它是一個后臺執(zhí)行的程序,沒有圖形界面。
(3)Chef:任務(wù)通過允許每個轉(zhuǎn)換,任務(wù),腳本等等,更有利于自動化更新數(shù)據(jù)倉庫的復(fù)雜工作。任務(wù)通過允許每個轉(zhuǎn)換,任務(wù),腳本等等。任務(wù)將會被檢查,看看是否正確地運(yùn)行了。
(4)Kitchen:批量使用由Spoon 設(shè)計的任務(wù),它是一個后臺運(yùn)行的程序。
航油客戶管理系統(tǒng)容器云平臺依靠容器技術(shù)和集群調(diào)度編排管理技術(shù),滿足企業(yè)級容器云服務(wù)的需求。根據(jù)調(diào)研形成上面的部署拓?fù)浞桨福渴鸱桨阜謨纱髤^(qū),分別生產(chǎn)區(qū)和DMZ 大區(qū)。生產(chǎn)區(qū)負(fù)責(zé)整個云平臺的管理應(yīng)用運(yùn)行部署和測試等功能。DMZ 區(qū)負(fù)責(zé)應(yīng)用接口的互相轉(zhuǎn)發(fā)等功能[6]。
內(nèi)部云平臺通過DNS 域名訪問到業(yè)務(wù)系統(tǒng)內(nèi),不同域名分別不同業(yè)務(wù)。云平臺管控核心分為配置中心和管控中心組件。配置中心是一個開源的高可用的分布式鍵值數(shù)據(jù)庫,通過鍵值對數(shù)據(jù)存儲系統(tǒng),提供共享配置、服務(wù)的注冊和發(fā)現(xiàn)等功能。這里存儲云平臺服務(wù)器IP 屬性和相關(guān)數(shù)據(jù),如果出現(xiàn)問題容易造成整個云平臺癱瘓說以,在部署用集群方式設(shè)計,這樣保證云平臺安全穩(wěn)定運(yùn)行。
管控中心組件是集群的網(wǎng)關(guān)和中樞樞紐,也稱為指揮官主要作用是跟蹤其他服務(wù)器的健康狀態(tài)、以最優(yōu)方式調(diào)度負(fù)載,以及編排其他組件之間的通信。
本文以航油客戶管理系統(tǒng)為例,對基于Kubernetes 和Docker技術(shù)的容器云平臺的架構(gòu)設(shè)計進(jìn)行介紹和分析,在提出云容器的管理設(shè)計策略,通過鏡像Docker 容器云的應(yīng)用和Kubernetes 開發(fā)工具的架構(gòu)設(shè)計,為企業(yè)級微服務(wù)場景容器云平臺開發(fā)應(yīng)用提供參考借鑒。