蔣明燕(上海郵電設(shè)計咨詢研究院有限公司,上海 200092)
云原生應(yīng)用(Cloud Native Application)是指針對云計算基礎(chǔ)設(shè)施進行優(yōu)化設(shè)計的應(yīng)用,適合部署運行在現(xiàn)代的云計算平臺上,能充分利用云平臺所提供的資源和服務(wù),是一系列云計算技術(shù)體系和管理方法的集合。云原生應(yīng)用具備良好的擴展、伸縮和容錯能力。云原生涉及的技術(shù)棧十分廣泛,生態(tài)十分繁榮,產(chǎn)品也正在被廣泛應(yīng)用。
云原生技術(shù)由云原生計算基金會(Cloud Native Computing Foundation,CNCF)提出,有利于各組織在公有云、私有云和混合云等新型動態(tài)環(huán)境中構(gòu)建和運行可彈性擴展的應(yīng)用。云原生的關(guān)鍵技術(shù)包括不可變基礎(chǔ)設(shè)施、容器技術(shù)、微服務(wù)和無服務(wù)器(Serverless),其技術(shù)架構(gòu)如圖1所示。
圖1 云原生技術(shù)架構(gòu)
不可變基礎(chǔ)設(shè)施指運行服務(wù)的服務(wù)器在完成部署后,不再進行更改。采用云端虛擬化基礎(chǔ)設(shè)施作為構(gòu)建基礎(chǔ),通過容器來打包及構(gòu)建整體服務(wù)運行環(huán)境,實現(xiàn)容器鏡像的自動化構(gòu)建及版本化管理;通過持續(xù)部署系統(tǒng),實現(xiàn)自動化部署。
容器技術(shù)包括容器運行時和編排調(diào)度。運行時是容器的運行環(huán)境,體現(xiàn)為各種開源容器產(chǎn)品,比如最常用的Docker。編排與調(diào)度是云原生的基石,是貫徹容器到服務(wù)實例的橋梁,其中Kubernetes 已成為事實標準。
微服務(wù)包括服務(wù)治理工具與編排調(diào)度服務(wù)。服務(wù)治理體系目前包括MicroService 與ServiceMesh,以及其中采用的一系列開源工具,如ZK、API網(wǎng)關(guān)等。
Serverless 構(gòu)建服務(wù)形態(tài),包括一系列產(chǎn)品,其中Lambda等注冊平臺比較成熟,開源產(chǎn)品則剛剛起步。
這些技術(shù)可用于構(gòu)建容錯性好、易于管理和便于觀察的松耦合系統(tǒng),讓應(yīng)用處于待發(fā)布狀態(tài),從而解決環(huán)境一致性問題。
如圖2 所示,云應(yīng)用模型分為IaaS、PaaS、Serverless及SaaS。
圖2 云應(yīng)用模型分類示意
IaaS 環(huán)境中,云服務(wù)提供商提供網(wǎng)絡(luò)、存儲、服務(wù)器及虛擬化,開發(fā)者則負責(zé)操作系統(tǒng)、中間件、運行時環(huán)境、數(shù)據(jù)及應(yīng)用;PaaS 環(huán)境中,云服務(wù)提供商提供網(wǎng)絡(luò)、存儲、服務(wù)器、虛擬化、操作系統(tǒng)、中間件及運行時環(huán)境,開發(fā)者則僅需負責(zé)數(shù)據(jù)及應(yīng)用;Serverless 環(huán)境中,云服務(wù)提供商提供網(wǎng)絡(luò)、存儲、服務(wù)器、虛擬化、操作系統(tǒng)、中間件、運行時環(huán)境及數(shù)據(jù),而開發(fā)者則僅負責(zé)應(yīng)用;SaaS 環(huán)境中,從網(wǎng)絡(luò)、存儲、服務(wù)器、虛擬化、操作系統(tǒng)、中間件、運行時環(huán)境、數(shù)據(jù)到應(yīng)用均由云服務(wù)提供商提供。
一般認為IaaS 型應(yīng)用屬于從物理機環(huán)境直接遷移到虛擬機環(huán)境的云遷移應(yīng)用,其開發(fā)、部署、管理和運維方式與傳統(tǒng)應(yīng)用類似,并非真正的云原生應(yīng)用。其余3類應(yīng)用才是具備敏捷交付和高度自動化管理能力的真正云原生應(yīng)用。
目前云原生應(yīng)用典型的應(yīng)用交付方式包括代碼式交付、鏡像式交付、腳本式交付和應(yīng)用包交付。基于Kubernetes 的PaaS 平臺大多支持上述4 種應(yīng)用交付方式。
云原生架構(gòu)關(guān)鍵架構(gòu)維度用SESORA 表示,即服務(wù)化能力(Service)+彈性能力(Elasticity)+無服務(wù)器化程度(Serverless)+可觀測性(Observability)+韌性能力(Resilience)+自動化能力(Automation)。關(guān)鍵指標維度和云原生架構(gòu)成熟度等級分別如表1和表2所示。
表1 關(guān)鍵指標維度
表2 云原生架構(gòu)成熟度等級
云原生成熟度評估包括2 個步驟:第一,根據(jù)SESORA 對6 個維度分別評分并匯總;第二,根據(jù)分值分段獲得評分結(jié)果。
對某運營商IT 應(yīng)用進行云原生成熟度評估后,發(fā)現(xiàn)其成熟度較低,具有很大演進空間。
運營商IT 系統(tǒng)目前存在資源利用率低、運維成本高、管理復(fù)雜、部署耗時久、開發(fā)與生產(chǎn)運維割裂等問題。前期采用SOA 架構(gòu)進行改造的效果并不理想,采用微服務(wù)化的架構(gòu)方式及容器化的承載、運維模式更符合互聯(lián)網(wǎng)化技術(shù)發(fā)展演進和企業(yè)發(fā)展趨勢。
云原生核心特點是應(yīng)用容器化封裝、編排和交付、微服務(wù)設(shè)計、研發(fā)運營一體化。云原生應(yīng)用將給運營商帶來應(yīng)用的敏捷構(gòu)建和迭代、更順暢的多團隊協(xié)作以及更高效的云資源利用。微服務(wù)是把一個單體項目拆分為多個微服務(wù),每個微服務(wù)可以獨立技術(shù)選型、獨立開發(fā)、獨立部署、獨立運維,并且多個服務(wù)相互協(xié)調(diào)、相互配合,最終完成用戶的價值。微服務(wù)架構(gòu)是一種松耦合、去中心化的架構(gòu)模式。大部分大型網(wǎng)站系統(tǒng)如Twitter、Netflix、Amazon 和eBay 都已經(jīng)從傳統(tǒng)整體型架構(gòu)遷移到微服務(wù)架構(gòu)。
為了降低開發(fā)成本、提升軟件生產(chǎn)率,云原生和微服務(wù)已成為軟件架構(gòu)的發(fā)展趨勢。軟件部署架構(gòu)從單機到分布式再到云原生,軟件組件可通過API 按需調(diào)用,從而實現(xiàn)了基礎(chǔ)設(shè)施的自動化以及快速的軟件交付。軟件系統(tǒng)架構(gòu)也經(jīng)歷了從單體架構(gòu)到SOA再到微服務(wù)的架構(gòu)演進,實現(xiàn)了服務(wù)的原子特性,可以更加靈活地獨立開發(fā)和部署。
IT 系統(tǒng)主要包括互聯(lián)網(wǎng)類、OLTP、OLAP、后臺數(shù)據(jù)處理、大數(shù)據(jù)交互等不同應(yīng)用類別,上云的技術(shù)特點也各有不同(見圖3)。
圖3 各類型IT系統(tǒng)上云技術(shù)實現(xiàn)示意
a)互聯(lián)網(wǎng)業(yè)務(wù)。異構(gòu)且技術(shù)棧眾多,關(guān)鍵應(yīng)用需容器化部署,架構(gòu)易水平擴展,需著重考慮業(yè)務(wù)的安全隔離問題。
b)OLTP 業(yè)務(wù)。需實現(xiàn)集群多租戶共享及應(yīng)用容器化部署。
c)OLAP 分析報表業(yè)務(wù)。數(shù)據(jù)庫采用PostgreSQL數(shù)據(jù)庫進行替代,支持資源動態(tài)擴縮容。
d)后臺數(shù)據(jù)處理。密集計算以物理機為主,數(shù)據(jù)庫根據(jù)場景可以選擇PostgreSQL、TeleDB、時序數(shù)據(jù)庫等組件。
e)數(shù)據(jù)交互類。需實現(xiàn)應(yīng)用容器化及動態(tài)伸縮。
f)公共基礎(chǔ)類。平遷到運營商云資源池的虛機或物理機上進行部署。
運營商IT 系統(tǒng)上云有兩大技術(shù)目標:第一,打造敏捷IT,提升交付效率與質(zhì)量;第二,實現(xiàn)智慧IT,提升智能彈性計算能力、智能運維能力。云原生是云服務(wù)商、互聯(lián)網(wǎng)企業(yè)、系統(tǒng)集成商、通信運營商等共同定義和遵循的應(yīng)用開發(fā)、交付、運營范式,是今后云計算的主流技術(shù)方向。因此運營商IT 全面上云需參考和推廣云原生應(yīng)用。
運營商IT 系統(tǒng)總體向“平臺+應(yīng)用”架構(gòu)逐步演進,采用微服務(wù)架構(gòu),能力微服務(wù)化,統(tǒng)一編排、高效復(fù)用。運營商IT 系統(tǒng)云原生目標架構(gòu)自底向上包括基于容器的不可變基礎(chǔ)設(shè)施層、中間件層、能力層、微服務(wù)層、應(yīng)用層以及安全管理和運營監(jiān)控(見圖4)。
圖4 運營商IT系統(tǒng)云原生目標架構(gòu)
云原生落地需基于業(yè)務(wù)敏捷性、健壯性逐步實施(見圖5)。
圖5 云原生演進路徑
最初,基礎(chǔ)設(shè)施云化為上層應(yīng)用提供計算、網(wǎng)絡(luò)、存儲基礎(chǔ)架構(gòu)資源。然后,構(gòu)建PaaS 平臺實現(xiàn)Devops:通過容器+微服務(wù)+Devops,構(gòu)建應(yīng)用架構(gòu)不斷迭代更新的循環(huán)。最后,實現(xiàn)微服務(wù)治理及API運營:復(fù)雜業(yè)務(wù)分拆、松耦合,獨立更新部署,管理及流程自動化,基于API實現(xiàn)分布式集成管理和流程自動化。
為實現(xiàn)上述IT 系統(tǒng)云原生目標架構(gòu),需從構(gòu)建不可變基礎(chǔ)設(shè)施、下沉中間件統(tǒng)一開放服務(wù)化接口、采用微服務(wù)框架構(gòu)建軟件系統(tǒng)以及軟件系統(tǒng)架構(gòu)分層解耦幾個方面分別考慮部署要點。
5.3.1 構(gòu)建基于容器的不可變基礎(chǔ)設(shè)施
不可變基礎(chǔ)設(shè)施里的“不可變”和程序設(shè)計中的“不可變”概念類似。程序設(shè)計中的不可變變量在完成賦值后就不能再更改,只能創(chuàng)建新的不可變變量來整體替換舊的。由于該特性,并發(fā)環(huán)境下也可以安全地使用變量。對于基礎(chǔ)設(shè)施的不可變性,最基本的就是指運行服務(wù)的服務(wù)器在完成部署后,就不再進行更改。
在構(gòu)建云原生時,要實現(xiàn)不可變基礎(chǔ)設(shè)施,需從以下幾點著手。
a)使用云基礎(chǔ)設(shè)施作為構(gòu)建基礎(chǔ)。標準化的敏捷基礎(chǔ)設(shè)施通過服務(wù)化的方式對外開放,并對應(yīng)用用量進行統(tǒng)計。底層基礎(chǔ)設(shè)施根據(jù)容器和PaaS 中間件要求進行配置和擴容,硬件配置整體保持穩(wěn)定、不允許修改,通過更新模板和實例實現(xiàn)運行環(huán)境的變更。
b)通過容器技術(shù)來打包及整體構(gòu)建服務(wù)運行環(huán)境。軟件系統(tǒng)不直接操作底層基礎(chǔ)設(shè)施,而是通過業(yè)務(wù)性能指標提交具體需求,使用IaC、工具、API 方式進行配置和部署。
c)實現(xiàn)容器鏡像的自動化構(gòu)建及版本化管理。軟件系統(tǒng)可根據(jù)通用模板定制鏡像運行應(yīng)用,對模板有更新需求時統(tǒng)一提交申請。所有應(yīng)用通過鏡像進行發(fā)布、構(gòu)建,按照統(tǒng)一的DevOps流程自動化構(gòu)建、自動化測試、自動化發(fā)布,不允許定制發(fā)布。
d)通過持續(xù)部署系統(tǒng),實現(xiàn)自動化部署。資源統(tǒng)一觀測和管控,根據(jù)業(yè)務(wù)運行情況和應(yīng)用配置自動伸縮。
5.3.2 下沉中間件,統(tǒng)一開放服務(wù)化接口
中間件處于系統(tǒng)軟件(操作系統(tǒng)和網(wǎng)絡(luò)軟件)與應(yīng)用軟件之間,它能使應(yīng)用軟件進行跨網(wǎng)絡(luò)的協(xié)同工作。中間件為應(yīng)用軟件提供了操作系統(tǒng)所提供的服務(wù)之外的服務(wù),可以將其描述為“軟件膠水”。中間件能夠讓軟件開發(fā)者方便地處理通信、輸入和輸出,專注在應(yīng)用本身。中間件包括消息中間件、分布對象中間件、遠程過程調(diào)用中間件、數(shù)據(jù)訪問中間件、事務(wù)處理中間件等。
a)將標準中間件下沉到云基礎(chǔ)設(shè)施(容器、裸金屬容器),成為云原生服務(wù)的一部分。
b)對中間件進行服務(wù)化改造,提供標準調(diào)用規(guī)范。
c)應(yīng)用與中間件解耦,不感知中間件的存在,通過API服務(wù)的方式使用中間件能力。
d)中間件統(tǒng)一運維管理,可感知應(yīng)用狀態(tài),實現(xiàn)計算和存儲能力的自動伸縮。
e)引用標準鏡像方式,實現(xiàn)虛擬機和裸金屬的標準化安裝,根據(jù)應(yīng)用要求實現(xiàn)自動化部署。
應(yīng)用軟件根據(jù)業(yè)務(wù)要求提出性能、網(wǎng)絡(luò)、負載均衡等業(yè)務(wù)指標要求,硬件評估和擴容由不可變基礎(chǔ)設(shè)施統(tǒng)籌管理。
5.3.3 采用微服務(wù)框架構(gòu)建軟件系統(tǒng)
采用微服務(wù)框架構(gòu)建軟件系統(tǒng)需考慮微服務(wù)能力抽取、能力分層、能力構(gòu)建、能力調(diào)用和能力編排等幾個方面。
a)微服務(wù)能力抽取。主要包括面向客戶操作的邏輯控制抽取能力和面向數(shù)據(jù)存儲、計算的對象操作抽取能力。在領(lǐng)域?qū)樱ㄜ浖P(guān)注的主題區(qū)域)以單個、場景化的能力為主抽取,微服務(wù)不能超過單一職責(zé)。
b)能力分層。區(qū)分場景和業(yè)務(wù)原子化能力,構(gòu)建可復(fù)用的原子化能力。復(fù)雜邏輯按照業(yè)務(wù)需求基于原子服務(wù)組合能力在應(yīng)用層實現(xiàn)。
c)能力構(gòu)建。原子化能力以完成業(yè)務(wù)的最小操作為目標,需要具備冪等性(任意多次執(zhí)行所產(chǎn)生的影響均與一次執(zhí)行的影響相同);事務(wù)能力需要同時提供DO/UNDO 2種,以保障事務(wù)一致性。
d)能力調(diào)用。面向客戶UI 操作的能力要同步調(diào)用,如果異步則需要考慮調(diào)用過程可視;事務(wù)型業(yè)務(wù)能力調(diào)用要按照統(tǒng)一監(jiān)控要求自動埋點,跟蹤標識業(yè)務(wù)流程;面向后端邏輯處理的能力盡量異步,并提供失敗重試機制。
e)能力編排。面向能力規(guī)格、能力對象進行能力調(diào)用時要設(shè)定優(yōu)先級,以便在資源緊張時優(yōu)先保障重點客戶的重點業(yè)務(wù)。
此外,在部分業(yè)務(wù)場景,微服務(wù)還需逐步按需引入Serverless、服務(wù)網(wǎng)格(Service Mesh)技術(shù)。
Serverless 可以細分為后端即服務(wù)(BaaS)和函數(shù)即服務(wù)(FaaS)2 類。BaaS 指任何第三方提供的應(yīng)用和服務(wù),可通過API的形式開放不同細分領(lǐng)域的功能,比如提供云數(shù)據(jù)庫服務(wù)的Google Firebase 和Parse、提供統(tǒng)一用戶身份驗證服務(wù)的Auth0 等,讓用戶實現(xiàn)“前端+BaaS”完成整體服務(wù)的構(gòu)建。FaaS 應(yīng)用以函數(shù)的形式存在,并由第三方云平臺托管運行,函數(shù)是比微服務(wù)更小更獨立的運行單元。應(yīng)用軟件開發(fā)業(yè)務(wù)邏輯,注冊觸發(fā)事件,通過事件觸發(fā)函數(shù)邏輯并執(zhí)行,后端服務(wù)通過調(diào)用下沉的中間件服務(wù)實現(xiàn),資源管控由基礎(chǔ)設(shè)施統(tǒng)一提供。根據(jù)需求,應(yīng)用形態(tài)可選擇服務(wù)形態(tài)和函數(shù)形態(tài)。
作為云原生技術(shù)棧的一部分,Service Mesh指由云原生應(yīng)用的服務(wù)化組件構(gòu)成的一種網(wǎng)格,即在應(yīng)用內(nèi)部或者應(yīng)用之間由服務(wù)訪問、調(diào)用、負載均衡等服務(wù)連接關(guān)系構(gòu)成的一種網(wǎng)絡(luò)。Istio 是目前Service Mesh技術(shù)的實施標準,是一個與Kubernetes 緊密結(jié)合的、適用于云原生場景的、Service Mesh 形態(tài)的、用于服務(wù)治理的開放平臺。Istio服務(wù)治理涉及連接、安全、策略執(zhí)行和可觀察性。在實踐中,Service Mesh通常以輕量級網(wǎng)絡(luò)代理陣列的形式實現(xiàn),這些代理與應(yīng)用程序代碼部署在一起,應(yīng)用程序無需感知代理的存在。
將業(yè)務(wù)能力、數(shù)據(jù)能力等能力微服務(wù)化,可實現(xiàn)統(tǒng)一編排、高效復(fù)用。
5.3.4 軟件系統(tǒng)架構(gòu)分層解耦
基于分層解耦原則,軟件系統(tǒng)采用微服務(wù)化架構(gòu)建設(shè),將業(yè)務(wù)實現(xiàn)與底層能力構(gòu)建分離,屏蔽外部變化對業(yè)務(wù)核心服務(wù)能力的影響。軟件系統(tǒng)根據(jù)本系統(tǒng)的業(yè)務(wù)特征劃分領(lǐng)域構(gòu)建原子能力,根據(jù)層次結(jié)構(gòu)構(gòu)建功能。每一層設(shè)計保持內(nèi)聚,并且只依賴其下層,上層和下層松散耦合(各自為獨立個體,通過簡單引用關(guān)聯(lián))。
采用微服務(wù)架構(gòu)的軟件系統(tǒng)分層包括表示層、網(wǎng)關(guān)層、應(yīng)用層、領(lǐng)域?qū)?、中間件層以及基礎(chǔ)設(shè)施層。如前文所述,中間件層和基礎(chǔ)設(shè)施層由不可變基礎(chǔ)設(shè)施和統(tǒng)一開放服務(wù)化接口的下沉中間件提供。軟件系統(tǒng)以領(lǐng)域?qū)訛楹诵臉?gòu)建微服務(wù)原子能力。
云原生對運營商具有重大意義,具體如下。
a)避免軟件廠商的綁架?;谖⒎?wù)的架構(gòu)解耦使得軟件系統(tǒng)從黑盒變?yōu)榘缀?,核心微服?wù)自主掌控;通過定義統(tǒng)一的微服務(wù)交互接口,支持實現(xiàn)同一功能的微服務(wù)的可替換。
b)支持軟件系統(tǒng)的全網(wǎng)統(tǒng)一部署。構(gòu)建集團級容器鏡像庫,通過軟件鏡像的統(tǒng)一下發(fā),實現(xiàn)軟件系統(tǒng)的集約管理;支持以微服務(wù)為單位的軟件升級,降低系統(tǒng)運維壓力。
c)助推業(yè)務(wù)應(yīng)用創(chuàng)新。容器和微服務(wù)可用于支持PaaS 平臺的能力開放,實現(xiàn)云服務(wù)的增值;容器和微服務(wù)有效支持持續(xù)集成和交付,加速業(yè)務(wù)上線。
云原生具備快速交付、容器運行、可靠容錯、靈活擴展、自動伸縮、透明通信等特點。本文分析了云原生的關(guān)鍵技術(shù),對云應(yīng)用進行模型分類并定義了云原生應(yīng)用,給出了云原生成熟度模型及評估辦法,進而結(jié)合運營商IT系統(tǒng)上云的需求,闡述了運營商IT系統(tǒng)云原生目標架構(gòu)及部署要點,包括構(gòu)建基于容器的不可變基礎(chǔ)設(shè)施,實現(xiàn)自動化部署、動態(tài)擴縮容;下沉中間件,統(tǒng)一開放服務(wù)化接口;采用微服務(wù)框架構(gòu)建軟件系統(tǒng);軟件系統(tǒng)架構(gòu)分層解耦等。
運營商IT 系統(tǒng)云原生部署便于運營商自主掌控核心微服務(wù)、構(gòu)建容器鏡像庫、匯聚全網(wǎng)原子能力池,沉淀數(shù)據(jù)資產(chǎn)。一方面,可將云網(wǎng)資源及能力通過服務(wù)的方式提供給數(shù)字化平臺,并支持多種服務(wù)模式和靈活的商業(yè)模式;另一方面,數(shù)字化平臺可以通過云網(wǎng)基礎(chǔ)設(shè)施提供的云原生開發(fā)能力,靈活構(gòu)建更高層次的數(shù)字化能力并面向行業(yè)提供數(shù)字化解決方案。