C114通信網(wǎng)  |  通信人家園

技術(shù)
2021/10/13 20:58

云原生:加速企業(yè)數(shù)字化轉(zhuǎn)型的新引擎

移動(dòng)Labs  王超

Labs 導(dǎo)讀

中國(guó)移動(dòng)云能力中心王超應(yīng)邀參加由中國(guó)信通院主辦的2021可信云大會(huì),并在云原生分論壇發(fā)表了以《移動(dòng)云云空間的云原生轉(zhuǎn)型實(shí)踐分享》為主題的演講,以下是精彩內(nèi)容分享。

作者簡(jiǎn)介:

王超,中國(guó)移動(dòng)云能力中心SaaS產(chǎn)品部技術(shù)專家組成員,曾負(fù)責(zé)能力開(kāi)放平臺(tái)、服務(wù)治理平臺(tái)、移動(dòng)云云網(wǎng)盤等產(chǎn)品及項(xiàng)目的研發(fā)工作,架構(gòu)設(shè)計(jì)及研發(fā)管理經(jīng)驗(yàn)豐富,在互聯(lián)網(wǎng)大型業(yè)務(wù)系統(tǒng)的規(guī)劃、設(shè)計(jì)與調(diào)優(yōu)方面有深入研究。

1 定義云原生

數(shù)字世界再一次加速,我們已經(jīng)從云化時(shí)代發(fā)展到了云原生時(shí)代。似乎整個(gè)行業(yè)都在討論云原生,包括分布式系統(tǒng)、微服務(wù)、容器化、無(wú)服務(wù)器計(jì)算以及其他新興技術(shù)和架構(gòu)的作用,但 IT 從業(yè)人員和決策者仍然對(duì)云原生的真正含義以及利用云原生技術(shù)可達(dá)到的最終目標(biāo)存有困惑。自從Paul Fremantle在2010年首次提出Cloud Native概念后,許多組織和專家都嘗試定義云原生:

Paul Fremantle (2010年)

他認(rèn)為,應(yīng)用程序當(dāng)前可能無(wú)法充分利用云環(huán)境,需要考慮一些技術(shù)屬性,中間件和應(yīng)用才能在云環(huán)境中良好運(yùn)行(更好的利用資源、更快的配置、更好的治理),成為“Cloud Native”,此時(shí)云原生可以認(rèn)為是一種云上應(yīng)用構(gòu)建理念。這些核心技術(shù)屬性包括:分布式、彈性、多租戶、自助服務(wù)、精細(xì)計(jì)量和計(jì)費(fèi)、增量部署和測(cè)試。

Matt Stine(2015年)

Matt Stine在《Migrating to Cloud-Native Application Architectures》一書中表示,在單體應(yīng)用向云原生遷移的過(guò)程中,需要從組織架構(gòu)、技術(shù)和文化等多個(gè)方面共同變革。同時(shí)為云原生提出了一組最佳實(shí)踐:十二因子、微服務(wù)、敏捷基礎(chǔ)設(shè)施、基于API的協(xié)作、反脆弱性。

CNCF(2015年)

云原生計(jì)算基金會(huì)(CNCF)成立,將云原生定義為:容器化封裝、自動(dòng)化管理、面向微服務(wù)。

Matt Stine(2017年)

Matt Stine在一次媒體小組討論中表示,云原生架構(gòu)具有以下六個(gè)屬性:模塊化(通過(guò)微服務(wù))、可觀察性、可部署性、可測(cè)試性、可處理性、可替換性。

CNCF(2018年)

云原生計(jì)算基金會(huì)(CNCF)重新定義云原生為:云原生技術(shù)有助于各組織在公有云、私有云和混合云等現(xiàn)代、動(dòng)態(tài)環(huán)境中,構(gòu)建和運(yùn)行可彈性擴(kuò)展的應(yīng)用。代表技術(shù)包括容器、服務(wù)網(wǎng)格、微服務(wù)、不可變基礎(chǔ)設(shè)施和聲明式API。

這些技術(shù)能夠構(gòu)建韌性好、可管理和便于觀察的松散耦合系統(tǒng)。結(jié)合可靠的自動(dòng)化手段,云原生技術(shù)使得工程師能夠輕松地對(duì)系統(tǒng)做出頻繁和可預(yù)測(cè)的重大變更。

綜上我們可知,云原生的定義一直在不斷變化和演進(jìn)中,但始終有一個(gè)核心的目標(biāo):“以應(yīng)用為中心,實(shí)現(xiàn)價(jià)值用云”,讓我們的應(yīng)用系統(tǒng)和IT架構(gòu)完全基于云原生,讓我們的業(yè)務(wù)系統(tǒng)生于云、長(zhǎng)于云。

2 企業(yè)數(shù)字化進(jìn)程的啟示

讓我們?cè)倩仡櫼幌,企業(yè)數(shù)字化的三個(gè)階段以及它們的特點(diǎn):

階段1:前云時(shí)代

軟件開(kāi)發(fā):使用瀑布模型,完整的軟件一般需要數(shù)年時(shí)間才能完成開(kāi)發(fā)交付,并且在進(jìn)行新功能發(fā)布或者其他增量時(shí),花費(fèi)的時(shí)間較久。開(kāi)發(fā)、QA和運(yùn)維是不同的團(tuán)隊(duì),協(xié)作不多。

基礎(chǔ)設(shè)施:一開(kāi)始直接使用物理硬件,后隨著服務(wù)器虛擬化的興起,可以使用性能更強(qiáng)大的物理服務(wù)器來(lái)部署虛擬服務(wù)器。

運(yùn)維:運(yùn)維任務(wù)通常手工完成,限制了系統(tǒng)可運(yùn)維的規(guī)模。經(jīng)過(guò)一段時(shí)間的發(fā)展,技術(shù)人員開(kāi)始嘗試使用配置管理工具,以減少維護(hù)基礎(chǔ)設(shè)施帶來(lái)的工作量和復(fù)雜度。

階段2:云化時(shí)代

軟件開(kāi)發(fā):技術(shù)人員開(kāi)始使用敏捷開(kāi)發(fā)模型和DevOps體系,以替代瀑布模型,這使得可以更快、更高質(zhì)量地完成軟件開(kāi)發(fā)及交付。

基礎(chǔ)設(shè)施:云將運(yùn)行應(yīng)用程序所需的資源和依賴作為即開(kāi)即用的服務(wù)提供。應(yīng)用構(gòu)建者將云作為一種新型IT基礎(chǔ)設(shè)施,使得他們可以專注于核心業(yè)務(wù)部分而無(wú)需關(guān)心底層基礎(chǔ)架構(gòu)。

運(yùn)維:云上運(yùn)維和管理的自動(dòng)化程度進(jìn)一步提升,包括開(kāi)通、配置、擴(kuò)容和自我恢復(fù)。

階段3:云原生時(shí)代

軟件開(kāi)發(fā):?jiǎn)误w應(yīng)用程序逐漸被微服務(wù)、服務(wù)網(wǎng)格和無(wú)狀態(tài)計(jì)算等新技術(shù)改變,結(jié)合云原生產(chǎn)品,開(kāi)始真正充分利用云的關(guān)鍵特性。

基礎(chǔ)設(shè)施:云通過(guò)平臺(tái)提供多種服務(wù)支撐。應(yīng)用構(gòu)建者通常采用多云或混合云方法,將應(yīng)用程序和服務(wù)部署在最能發(fā)揮價(jià)值的地方。

運(yùn)維:基于分布式構(gòu)建的應(yīng)用系統(tǒng),開(kāi)始使用全新的部署方法:容器和彈性調(diào)度平臺(tái),這些在基礎(chǔ)設(shè)施中增加的抽象,能夠使運(yùn)維人員以新的方式觀察和處理系統(tǒng)健康狀態(tài)及性能表現(xiàn)。

 

在云化時(shí)代,企業(yè)將IT系統(tǒng)搬遷上云,業(yè)務(wù)應(yīng)用都部署和運(yùn)行在云上,消除傳統(tǒng)硬件的束縛,實(shí)現(xiàn)了敏捷化的資源編排能力。通過(guò)池化資源,一定程度上解決了部署、運(yùn)維方面的難題,但傳統(tǒng)應(yīng)用在架構(gòu)、交付、部署形式等方面并沒(méi)有充分體現(xiàn)對(duì)云關(guān)鍵屬性的應(yīng)用,無(wú)法發(fā)揮云的正真價(jià)值。

隨著企業(yè)數(shù)字化進(jìn)程不斷推進(jìn),對(duì)云的理解和應(yīng)用也更加深入,應(yīng)用構(gòu)建者們意識(shí)到僅僅簡(jiǎn)單地將IT系統(tǒng)搬遷上云,往往無(wú)法真正享受云帶來(lái)的最大價(jià)值,需要由現(xiàn)在的ON CLOUD進(jìn)階到IN CLOUD,同時(shí)使用云提供的新生能力與既有能力有機(jī)協(xié)同,基于云原生的技術(shù)、架構(gòu)和服務(wù)來(lái)構(gòu)建企業(yè)應(yīng)用,充分利用云的優(yōu)勢(shì)來(lái)助力企業(yè)應(yīng)用和業(yè)務(wù)發(fā)展,將企業(yè)的數(shù)字化建設(shè)、業(yè)務(wù)智能升級(jí)帶入新階段。

3 云原生應(yīng)用的概念和特點(diǎn)

對(duì)應(yīng)用來(lái)說(shuō),云原生是一個(gè)形容詞,體現(xiàn)的是應(yīng)用為云而生的需求:應(yīng)用需要做什么樣的設(shè)計(jì)才能正真實(shí)現(xiàn)價(jià)值用云,這背后是一套“以應(yīng)用為中心” 的技術(shù)體系和方法論,用于指導(dǎo)構(gòu)建和運(yùn)行云上應(yīng)用。換句話說(shuō),云原生強(qiáng)調(diào)的IN CLOUD,并不是指應(yīng)用所在的位置,而是指應(yīng)用構(gòu)建和運(yùn)行的方式。

在云原生的語(yǔ)義下,“以應(yīng)用為中心”并不等于重應(yīng)用、輕平臺(tái),相反是平臺(tái)上探、復(fù)雜性下沉,云平臺(tái)通過(guò)云服務(wù)和產(chǎn)品,接管應(yīng)用構(gòu)建過(guò)程中更多的標(biāo)準(zhǔn)功能和非功能性特性,減輕乃至消除了應(yīng)用對(duì)存儲(chǔ)、計(jì)算、網(wǎng)絡(luò)等資源的關(guān)注和依賴,云平臺(tái)通過(guò)標(biāo)準(zhǔn)產(chǎn)品提供技術(shù)及業(yè)務(wù)能力,使應(yīng)用能專注在業(yè)務(wù)需求實(shí)現(xiàn)上。

3.1 云原生應(yīng)用

云原生應(yīng)用是傳統(tǒng)應(yīng)用的再進(jìn)一步,是為云而設(shè)計(jì)的應(yīng)用程序,基于云構(gòu)建,依賴云上服務(wù)和能力,最大化運(yùn)用云的潛能,發(fā)揮云的價(jià)值,旨在充分利用云計(jì)算模型以提升速度、靈活性和質(zhì)量,同時(shí)降低部署風(fēng)險(xiǎn)。云原生應(yīng)用的立意并不關(guān)注應(yīng)用程序在哪里運(yùn)行,而是關(guān)注應(yīng)用程序如何構(gòu)建、部署和管理。

云原生應(yīng)用自身基于云原生技術(shù)(微服務(wù)、容器化、CICD等),完成設(shè)計(jì)與構(gòu)建,同時(shí)通過(guò)與云平臺(tái)提供的相關(guān)可靠產(chǎn)品及能力(容器服務(wù)、安全產(chǎn)品、中間件等)充分整合,盡可能的剝離非功能性特性及邏輯(韌性/容錯(cuò)、可觀測(cè)性、安全、連續(xù)性、一致性),讓云接管,從而輕量化應(yīng)用。

3.1.1 云原生應(yīng)用特點(diǎn)

敏捷:應(yīng)用迭代周期更短,能快速應(yīng)對(duì)外部變化,用最少的試錯(cuò)來(lái)達(dá)到最終目標(biāo)。

彈性/可擴(kuò)展:應(yīng)用可隨業(yè)務(wù)流量自動(dòng)擴(kuò)縮容,具備較高的業(yè)務(wù)抗性。同時(shí),具備對(duì)現(xiàn)有基礎(chǔ)設(shè)施的橫向、縱向擴(kuò)展能力。

分布式:應(yīng)用遵循低耦合的分布式模式,各個(gè)節(jié)點(diǎn)可以部署在不同的網(wǎng)絡(luò)/地域中。

3.1.2 云原生應(yīng)用的開(kāi)發(fā)和傳統(tǒng)應(yīng)用開(kāi)發(fā)之間的差異

云原生應(yīng)用更加關(guān)注上市速度,所以應(yīng)用開(kāi)發(fā)需要更多敏捷、服務(wù)化開(kāi)發(fā)及持續(xù)交付的方法。通過(guò)供跨開(kāi)發(fā)團(tuán)隊(duì)和交付團(tuán)隊(duì)的DevOps協(xié)作、更加模塊化的架構(gòu)以及靈活可擴(kuò)展的基礎(chǔ)設(shè)施提供支撐,讓云原生應(yīng)用支持多種環(huán)境,具備良好的可移植性。

對(duì)應(yīng)用來(lái)說(shuō),簡(jiǎn)單的轉(zhuǎn)向微服務(wù)架構(gòu)并不能帶來(lái)企業(yè)數(shù)字業(yè)務(wù)所需的服務(wù)質(zhì)量和交付頻率,同樣的,僅采用支持敏捷開(kāi)發(fā)或IT自動(dòng)化的工具不會(huì)提高云原生應(yīng)用的構(gòu)建速度。想要成功構(gòu)建良好的云原生應(yīng)用,需要的是實(shí)踐、技術(shù)、流程和思維方式的有機(jī)結(jié)合。

云原生應(yīng)用開(kāi)發(fā)有兩個(gè)互補(bǔ)的部分:云上應(yīng)用服務(wù)或中間件,可以加速云原生應(yīng)用的開(kāi)發(fā);云上基礎(chǔ)設(shè)施服務(wù)或容器平臺(tái),可以加速云原生應(yīng)用的交付和部署。

3.1.3 云原生應(yīng)用開(kāi)發(fā)及交付的四項(xiàng)原則

·基于服務(wù)化的架構(gòu)

服務(wù)化架構(gòu),例如微服務(wù),提倡構(gòu)建模塊化、松散耦合的業(yè)務(wù)服務(wù)。微服務(wù)的優(yōu)勢(shì)可以提升應(yīng)用的構(gòu)建速度而不會(huì)增加過(guò)多的復(fù)雜性,帶來(lái)良好的獨(dú)立性和業(yè)務(wù)敏捷性。

·基于API的通信交互

多個(gè)服務(wù)之間通過(guò)輕量、技術(shù)棧無(wú)關(guān)的API暴露和交互,能降低部署、擴(kuò)展和維護(hù)的復(fù)雜性和開(kāi)銷。

·基于容器的基礎(chǔ)設(shè)施

云原生應(yīng)用使用容器在不同環(huán)境和基礎(chǔ)設(shè)施(包括公有云、私有云和混合云)之間實(shí)現(xiàn)真正的應(yīng)用可移植性。容器技術(shù)能在單個(gè)操作系統(tǒng)中為多個(gè)應(yīng)用服務(wù)劃分計(jì)算資源,并確保應(yīng)用服務(wù)之間的安全與隔離。使用Kubernetes等容器編排平臺(tái),實(shí)現(xiàn)一定的業(yè)務(wù)抗性和彈性。

·DevOps流程

DevOps原則側(cè)重于與交付團(tuán)隊(duì)(包括開(kāi)發(fā)、QA、安全和  運(yùn)維團(tuán)隊(duì))協(xié)作構(gòu)建,共同交付應(yīng)用程序。同時(shí),使用DevOps自動(dòng)化功能,支持定期增量和持續(xù)交付,并引入灰度發(fā)布、藍(lán)綠發(fā)布等來(lái)保持一定的業(yè)務(wù)連續(xù)性。

4 云原生應(yīng)用構(gòu)建實(shí)踐

4.1 轉(zhuǎn)向微服務(wù)

云原生應(yīng)用的特點(diǎn)包括分布式和敏捷,這就要求將單體應(yīng)用拆分為多個(gè)服務(wù)(分布式系統(tǒng)),而使用微服務(wù)架構(gòu)是將應(yīng)用程序拆分為較小服務(wù)的可靠方法,它有以下優(yōu)勢(shì):

·可擴(kuò)展/解耦

擴(kuò)展單個(gè)服務(wù),而不是應(yīng)用整體,且服務(wù)可部署在任意網(wǎng)絡(luò)節(jié)點(diǎn)

·互不干擾的技術(shù)棧

相互獨(dú)立,遠(yuǎn)程通信,按需選型

·易于開(kāi)發(fā)

服務(wù)小且獨(dú)立,研發(fā)過(guò)程更可控,適合小兵團(tuán)組合作戰(zhàn)

·易于交付

每次更改涉及特定服務(wù)而不是整體,以較小的增量開(kāi)發(fā)來(lái)滿足單次交付需求

微服務(wù)的概念自2011年首次提出起,就展現(xiàn)出了比SOA更加優(yōu)越的特性,在各類方法論和支撐技術(shù)加持下,微服務(wù)架構(gòu)的分布式系統(tǒng)易于具備敏捷性、彈性、可擴(kuò)展等方面的優(yōu)勢(shì),深度契合云上應(yīng)用的要求,那么如何設(shè)計(jì)一個(gè)良好的微服務(wù)架構(gòu)系統(tǒng)呢,可以從以下幾個(gè)方面考慮:

⑴ 服務(wù)設(shè)計(jì)原則

·無(wú)狀態(tài)計(jì)算

服務(wù)節(jié)點(diǎn)不持有狀態(tài),支持微服務(wù)在運(yùn)行中,隨時(shí)按需彈性擴(kuò)縮容。這也是分布式架構(gòu)的關(guān)鍵點(diǎn)之一,將無(wú)狀態(tài)的計(jì)算與有狀態(tài)的數(shù)據(jù)分開(kāi),微服務(wù)計(jì)算節(jié)點(diǎn)只負(fù)責(zé)狀態(tài)數(shù)據(jù)的分發(fā)與處理,而有狀態(tài)數(shù)據(jù)的存儲(chǔ)則依賴后端的各類中間件中。

·圍繞業(yè)務(wù)、先粗后細(xì)

微服務(wù)架構(gòu)的分布式系統(tǒng)要求我們的系統(tǒng)拆分成一個(gè)個(gè)獨(dú)立且松散耦合的服務(wù)進(jìn)程,要為每個(gè)服務(wù)劃分好明確的邊界,通常圍繞業(yè)務(wù),以界限上下文關(guān)聯(lián)和聚合形成服務(wù),而不是通過(guò)技術(shù)屬性。在系統(tǒng)設(shè)計(jì)早期,可以將上下文界定的較粗,以較粗的粒度形成微服務(wù),在后續(xù)的規(guī)劃、設(shè)計(jì)與運(yùn)行中,對(duì)服務(wù)有了更多認(rèn)識(shí)后,再調(diào)整界定粒度,進(jìn)一步拆分或者合并。

·容錯(cuò)與自我保護(hù)

微服務(wù)架構(gòu)帶來(lái)的問(wèn)題之一就是復(fù)雜的服務(wù)依賴,并且隨著時(shí)間推移,每個(gè)服務(wù)都可能依賴更多的服務(wù),在調(diào)用鏈的某些服務(wù)不可用時(shí),可能會(huì)因?yàn)檎{(diào)用堆積引起雪崩效應(yīng),無(wú)限的影響上游服務(wù),需要有良好的機(jī)制(例如引入斷路器),識(shí)別依賴服務(wù)的健康狀態(tài),并在發(fā)生問(wèn)題時(shí)保護(hù)自身。

·冪等性、一致性

這是分布式系統(tǒng)永恒的話題之一,由于微服務(wù)眾多,眾多的服務(wù)請(qǐng)求都在網(wǎng)絡(luò)中發(fā)生,當(dāng)發(fā)生網(wǎng)絡(luò)抖動(dòng)、重復(fù)請(qǐng)求等異常情況時(shí),服務(wù)需要具備良好的冪等設(shè)計(jì)來(lái)避免請(qǐng)求被重復(fù)處理。此外,在微服務(wù)架構(gòu)的系統(tǒng)中,狀態(tài)在多個(gè)服務(wù)之間流轉(zhuǎn),需要一致性來(lái)確保業(yè)務(wù)得到正確的處理,這就涉及到強(qiáng)一致性和最終一致性在系統(tǒng)中應(yīng)用。

·向前和向后兼容

微服務(wù)的優(yōu)勢(shì)之一就是各個(gè)服務(wù)可以獨(dú)立演進(jìn)和迭代,而服務(wù)間復(fù)雜的依賴關(guān)系顯而易見(jiàn)就帶來(lái)了各個(gè)微服務(wù)版本兼容的問(wèn)題,向后兼容要求服務(wù)自身迭代不能影響其他服務(wù)對(duì)自己身依賴和調(diào)用,實(shí)現(xiàn)多版并存,向前兼容要求服務(wù)自身能夠接受并消化其他服務(wù)的迭代,保持系統(tǒng)穩(wěn)定。

⑵ 系統(tǒng)設(shè)計(jì)原則

·服務(wù)自治

單個(gè)微服務(wù)就是單個(gè)獨(dú)立的自治實(shí)體,體現(xiàn)在技術(shù)選型自由、部署自由、研發(fā)語(yǔ)言自由等方面,同時(shí)能夠自治業(yè)務(wù)邏輯和數(shù)據(jù),需要從上到下(接入層、業(yè)務(wù)層、數(shù)據(jù)層等)全面的獨(dú)立,服務(wù)暴露出API(Application Programming Interface,應(yīng)用編程接口),服務(wù)間通過(guò)API進(jìn)行通信和調(diào)用。

·分層依賴

微服務(wù)整體架構(gòu)設(shè)計(jì)需要分層,例如劃分出核心服務(wù)層、公共服務(wù)層、基礎(chǔ)服務(wù)層等,定義好服務(wù)的上下游關(guān)系落到具體的分層,并約定依賴方向,做好分層依賴,避免產(chǎn)生循環(huán)依賴導(dǎo)致系統(tǒng)整體耦合性上升。

·高效服務(wù)通信

微服務(wù)架構(gòu)中的各個(gè)微服務(wù)之間通常通過(guò)遠(yuǎn)程通信實(shí)現(xiàn)調(diào)用,通信的實(shí)現(xiàn)方式直接影響了服務(wù)間調(diào)用的效率和成功率,這就需要考慮技術(shù)選型,例如選擇具備多路復(fù)用、雙向流通信、二進(jìn)制傳輸?shù)忍匦缘男滦蛡鬏攨f(xié)議和組件。

·適當(dāng)異步消息傳遞

當(dāng)在多個(gè)微服務(wù)上下文中傳遞消息時(shí),各自微服務(wù)不同的部署規(guī)模和處理能力帶來(lái)了服務(wù)間可能的調(diào)用堆積,可以使用適當(dāng)?shù)漠惒较鬟f機(jī)制(請(qǐng)求響應(yīng)異步、事件驅(qū)動(dòng)異步、消息隊(duì)列異步),減少系統(tǒng)整體耦合度、提升處理性能。

·面向運(yùn)維

微服務(wù)架構(gòu)下產(chǎn)生了繁多的獨(dú)立服務(wù)實(shí)例,為系統(tǒng)運(yùn)行期的運(yùn)維帶來(lái)了一定的復(fù)雜性,所以要把運(yùn)維復(fù)雜性考慮到系統(tǒng)的設(shè)計(jì)階段,由內(nèi)而外的實(shí)現(xiàn)可觀測(cè)性、可部署性及可運(yùn)維性。

在這個(gè)過(guò)程中,我們要清楚的意識(shí)到“微”不是目的,“敏捷”才是我們的最終目標(biāo),要依托微服務(wù)的理念,將應(yīng)用程序打造成一個(gè)業(yè)務(wù)敏捷、技術(shù)敏捷的云原生應(yīng)用。

4.2 應(yīng)用容器化

應(yīng)用微服務(wù)化之后為集成和交付帶來(lái)了挑戰(zhàn),而容器和微服務(wù)就像豆?jié){油條一樣天生一對(duì),是當(dāng)下流行的開(kāi)發(fā)實(shí)踐,可將應(yīng)用程序轉(zhuǎn)換成可移植、可擴(kuò)展、高效且易于管理的較小服務(wù)集合。

容器是一種輕量級(jí)的虛擬化技術(shù),能夠在單一主機(jī)上提供多個(gè)隔離的操作系統(tǒng)環(huán)境 ,通過(guò)一系列的namespace進(jìn)行進(jìn)程隔離,每個(gè)容器都有唯一的可寫文件系統(tǒng)和資源配額。容器技術(shù)分為運(yùn)行時(shí)和編排兩層,運(yùn)行時(shí)負(fù)責(zé)容器的計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)等,編排層負(fù)責(zé)容器集群的調(diào)度、服務(wù)發(fā)現(xiàn)和資源管理。

中國(guó)云原生用戶調(diào)研報(bào)告(2020)中調(diào)查數(shù)據(jù)顯示,60%以上的用戶已在生產(chǎn)環(huán)境中應(yīng)用容器技術(shù)。43%的用戶已將容器技術(shù)用于核心生產(chǎn)業(yè)務(wù),19%的用戶已將容器技術(shù)用于非核心生產(chǎn)環(huán)境。僅10%的用戶未考慮使用容器技術(shù)。同時(shí),容器運(yùn)行時(shí)多元化發(fā)展趨勢(shì)已經(jīng)顯現(xiàn),但Docker仍是現(xiàn)階段最主要的選擇。83%的用戶容器運(yùn)行時(shí)技術(shù)選用Docker,9%的用戶選用 Containerd。此外,Kubernetes延續(xù)在容器編排技術(shù)領(lǐng)域的優(yōu)勢(shì)地位,63%的用戶容器運(yùn)行時(shí)技術(shù)選用Kubernetes,17%的用戶選用Docker Swarm。

容器技術(shù)能為使用者能帶來(lái)以下優(yōu)勢(shì):

·更快的初始化和執(zhí)行

·更細(xì)的隔離與服務(wù)共存

·更輕松的編排管理

·更便捷的制品交付

在實(shí)際的研發(fā)過(guò)程中,常常有以下幾種訴求:

·在研發(fā)生命周期中,分別部署到不同的環(huán)境

·業(yè)務(wù)服務(wù)快速啟動(dòng)/拆除/擴(kuò)縮容

·業(yè)務(wù)服務(wù)實(shí)例混部

·只關(guān)心應(yīng)用運(yùn)行,而不關(guān)心在哪里運(yùn)行

以上兩者可以發(fā)現(xiàn),容器技術(shù)的優(yōu)勢(shì)可以匹配研發(fā)過(guò)程中的訴求,容器可以幫助解耦應(yīng)用和基礎(chǔ)設(shè)施,提高業(yè)務(wù)敏捷性,是實(shí)現(xiàn)“以應(yīng)用為中心”架構(gòu)的重要支撐。通過(guò)云、容器、微服務(wù)三者協(xié)同工作,將應(yīng)用的開(kāi)發(fā)和交付提升到傳統(tǒng)方法和技術(shù)無(wú)法達(dá)到的新高度,大大增加了應(yīng)用生命周期的敏捷性和可靠性。

通常,云上的容器服務(wù)能提供高性能可伸縮的容器應(yīng)用管理服務(wù),容器化應(yīng)用的生命周期管理可以提供多種應(yīng)用發(fā)布方式。容器服務(wù)簡(jiǎn)化了容器管理集群的搭建工作,整合了調(diào)度、配置、存儲(chǔ)、網(wǎng)絡(luò)等,打造云端最佳 容器運(yùn)行環(huán)境。使用容器技術(shù),用戶可以將微服務(wù)及其所需的所有配 置、依賴關(guān)系和環(huán)境變量打包成容器鏡像,輕松移植到全新的服務(wù)器 節(jié)點(diǎn)上,而無(wú)需重新配置環(huán)境,這使得容器成為部署單個(gè)微服務(wù)的最理想工具。

4.3、持續(xù)交付流水線

應(yīng)用微服務(wù)化與容器化之后,還是會(huì)面臨“更快且頻繁交付”和“系統(tǒng)穩(wěn)定且可靠”之間的矛盾。而持續(xù)交付(Continuous delivery)是一種軟件工程方法,旨在以更快的速度和更高的頻率來(lái)構(gòu)建、測(cè)試和發(fā)布軟件?梢允股a(chǎn)中的應(yīng)用程序進(jìn)行更多增量更新,該方法有助于降低成本、耗時(shí)和交付變更的風(fēng)險(xiǎn)。使用者可通過(guò)完整的工具鏈,深度集成代碼倉(cāng)庫(kù)、制品倉(cāng)庫(kù)、項(xiàng)目管理、自動(dòng)化測(cè)試等類別中的主流工具,快速實(shí)踐。

由上圖可以看到,持續(xù)交付是持續(xù)集成模型基礎(chǔ)上的延伸,使研發(fā)周期自動(dòng)化更進(jìn)一步,能夠快速發(fā)布到演示或UAT環(huán)境、以及執(zhí)行自動(dòng)化的系統(tǒng)集成測(cè)試。

4.3.1 實(shí)踐原則

在建設(shè)持續(xù)交付流水線的過(guò)程中,可以遵循以下策略:

⑴ 版本控制與分支策略

·可審核、可重復(fù)

每一次的版本構(gòu)建都是可審核且可重復(fù)的,能夠利用版本控制策略回溯,以應(yīng)對(duì)流水線中可能出現(xiàn)的失敗。

·包含整個(gè)交付物(代碼、數(shù)據(jù)庫(kù)、配置)

版本控制不能僅僅包含代碼,也要包含變更涉及的所有內(nèi)容,避免遺漏,產(chǎn)生不一致。

·頻繁的分支合并

盡早、頻繁的合并分支,有利于發(fā)現(xiàn)最新的修改,能夠及時(shí)處理沖突。

⑵ 持續(xù)交付流水線

·合適的工具

采用合適的工具構(gòu)建自己的流水線,考慮學(xué)習(xí)成本、維護(hù)、效果等多方面的因素。

·數(shù)據(jù)驅(qū)動(dòng)

通過(guò)每一次自動(dòng)化動(dòng)作的指標(biāo)量化數(shù)據(jù),來(lái)驅(qū)動(dòng)流水線向前或向后推進(jìn)。

·控制與改進(jìn)

通過(guò)每一次構(gòu)建的動(dòng)作效果與反饋,不斷改進(jìn)流水線,添加自動(dòng)化動(dòng)作或者更新技術(shù)工具。

⑶ 更多的自動(dòng)化

·檢測(cè)、構(gòu)建、測(cè)試

在流水線中引入更多的自動(dòng)化動(dòng)作,盡量減少手工參與,可以覆蓋檢測(cè)、構(gòu)建、測(cè)試等多個(gè)環(huán)節(jié)。

·覆蓋整個(gè)交付物

自動(dòng)化的動(dòng)作不僅要覆蓋代碼,也要包含全部交付物,例如腳本、SQL、配置等,避免遺漏。

·重復(fù)的體力勞動(dòng)

如果在流水線上有重復(fù)的人工體力勞動(dòng),都建議嘗試將其納入自動(dòng)化動(dòng)作。

⑷ 良好的反饋機(jī)制

·全周期反饋

反饋機(jī)制要包含整個(gè)持續(xù)交付周期,對(duì)每一次動(dòng)作都要有所響應(yīng),避免遺漏。

·快速反饋

在持續(xù)交付中,流水線要能夠在構(gòu)建時(shí)快速給出結(jié)果,避免團(tuán)隊(duì)等待而降低敏捷性。

·團(tuán)隊(duì)積極響應(yīng)反饋

團(tuán)隊(duì)成員需要建立起迅速響應(yīng)流水線反饋的文化,及時(shí)修改問(wèn)題,提升效率,降低風(fēng)險(xiǎn)。

4.3.2 持續(xù)交付流水線樣例

一個(gè)典型的用于生產(chǎn)的持續(xù)交付流水線如上圖,充分融合了技術(shù)、流程與團(tuán)隊(duì),通過(guò)自動(dòng)化動(dòng)作與持續(xù)反饋機(jī)制,不斷發(fā)現(xiàn)交付物中的問(wèn)題并予以修正,能夠大大降低部署到生產(chǎn)環(huán)境的風(fēng)險(xiǎn)。

持續(xù)交付并不要求最終交付物自動(dòng)化部署到生產(chǎn)環(huán)境,在持續(xù)交付的語(yǔ)義下,生產(chǎn)環(huán)境部署變更是兩階段完成的,第一階段采用持續(xù)交付給出穩(wěn)定的交付物,實(shí)現(xiàn)制品晉級(jí)并分發(fā)到發(fā)布制品庫(kù),通過(guò)上線審核后,再通過(guò)發(fā)布管理平臺(tái)或其他方式部署到生產(chǎn)環(huán)境。

4.4、與云融合

從使用效用方面看,云原生極大的釋放了云的紅利,云原生充分繼承了云的設(shè)計(jì)思想,應(yīng)用會(huì)更多基于云上進(jìn)行本土應(yīng)用開(kāi)發(fā),即云原生應(yīng)用更加適合云的架構(gòu),而云計(jì)算也為云原生應(yīng)用提供較好的基礎(chǔ)支撐。云計(jì)算的發(fā)展已進(jìn)入成熟期,云原生作為新型基礎(chǔ)設(shè)施支撐數(shù)字化轉(zhuǎn)型的重要支撐技術(shù),逐漸在人工智能、大數(shù)據(jù)、邊緣計(jì)算、5G等新興領(lǐng)域嶄露頭角,成為驅(qū)動(dòng)數(shù)字基礎(chǔ)設(shè)施的強(qiáng)大引擎。

對(duì)使用者來(lái)說(shuō),使用云上提供的服務(wù)或產(chǎn)品,有助于剝離非功能性需求,敏捷化研發(fā)過(guò)程,實(shí)現(xiàn)提質(zhì)降本增效。以移動(dòng)云為例,目前規(guī)劃提供了多線條的產(chǎn)品線來(lái)支撐快速、高效的構(gòu)建云原生應(yīng)用。

云原生開(kāi)發(fā)者服務(wù)

包括微服務(wù)治理引擎、DevOps工具鏈、應(yīng)用開(kāi)放平臺(tái)等,為開(kāi)發(fā)者提供端到端的協(xié)同服務(wù)和研發(fā)工具,降低數(shù)字化技術(shù)使用門檻,提高資源的復(fù)合利用率,提升協(xié)作和交付效率。

云原生中間件產(chǎn)品線

包括消息隊(duì)列、數(shù)據(jù)庫(kù)、大數(shù)據(jù)、AI能力等,提供優(yōu)勢(shì)云數(shù)能力及各類云上中間件,能將功能從應(yīng)用中剝離,在運(yùn)行時(shí)為應(yīng)用動(dòng)態(tài)賦能。

云原生計(jì)算產(chǎn)品線

包括容器服務(wù)、Serverless等,封裝異構(gòu)基礎(chǔ)設(shè)施提供負(fù)載支撐,有效解決異構(gòu)環(huán)境部署一致性問(wèn)題,促進(jìn)了資源的標(biāo)準(zhǔn)化。

5 結(jié)語(yǔ)

云上應(yīng)用的共性需求促進(jìn)了云上服務(wù)及產(chǎn)品的演進(jìn),云上服務(wù)及產(chǎn)品的繁榮也進(jìn)一步促進(jìn)了云上應(yīng)用構(gòu)建和運(yùn)行形式的更新,這是一個(gè)雙向價(jià)值促進(jìn)的過(guò)程。對(duì)應(yīng)用本身來(lái)說(shuō),除了圍繞云原生代表技術(shù)來(lái)設(shè)計(jì)與構(gòu)建之外,還要與云提供的各類服務(wù)及產(chǎn)品深度整合,根植于云,隨云而動(dòng)--“to be Cloud Native”。

讓我們?cè)倩乜碢aul Fremantle在10多年前提到的未來(lái):

strongly believe that it is only once a system really implements these attributes that it starts to give the full benefits of running in a cloud. And the benefits of "Cloud-Native" systems are immense: better utilization of resources, faster provisioning, better governance.

如今,未來(lái)已來(lái)。

參考文獻(xiàn)

[1] 《云原生2.0白皮書》  -  中國(guó)信通院.

[2] 《mi-path-to-cloud-native-apps》  -   redhat.

[3] 《云計(jì)算發(fā)展白皮書2020》 - 中國(guó)信通院.

[4] 《云原生發(fā)展白皮書2020》 - 中國(guó)信通院.

給作者點(diǎn)贊
0 VS 0
寫得不太好

免責(zé)聲明:本文僅代表作者個(gè)人觀點(diǎn),與C114通信網(wǎng)無(wú)關(guān)。其原創(chuàng)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實(shí),對(duì)本文以及其中全部或者部分內(nèi)容、文字的真實(shí)性、完整性、及時(shí)性本站不作任何保證或承諾,請(qǐng)讀者僅作參考,并請(qǐng)自行核實(shí)相關(guān)內(nèi)容。

熱門文章
    最新視頻
    為您推薦

      C114簡(jiǎn)介 | 聯(lián)系我們 | 網(wǎng)站地圖 | 手機(jī)版

      Copyright©1999-2024 c114 All Rights Reserved | 滬ICP備12002291號(hào)

      C114 通信網(wǎng) 版權(quán)所有 舉報(bào)電話:021-54451141