
最新動態(tài)
NEWS
讀而思
“云原生”作為云計算時代的核心理念,以平滑遷移、快速開發(fā)以及穩(wěn)定運維等技術(shù)優(yōu)勢,逐漸成為企業(yè)數(shù)字化轉(zhuǎn)型的基礎(chǔ)。隨著云原生技術(shù)的成熟和市場需求的升級,云計算的發(fā)展也步入新的階段。
孟岳 山西建設(shè)投資集團
本文發(fā)表于《中國工業(yè)和信息化》雜志2021年7月刊總第36期
云原生并不是一個新的概念,但因其在數(shù)字化轉(zhuǎn)型中發(fā)揮著越來越重要的作用,又被推上了“風(fēng)口浪尖”。
云原生是英文Cloud Native的直譯。這意味著云原生應(yīng)用是從云上生長出來,而不是布置在云上,更非依賴于數(shù)據(jù)中心。如果將云原生理解為基于云環(huán)境、專門為云特性而設(shè)計,未免偏頗。用英文表示是“IN CLOUD”,而不是“ON CLOUD”。盡管上云是第一步,云原生也只是云計算的一部分,但它已顯示出最能發(fā)揮云計算平臺的彈性與分布式布置的優(yōu)勢,并將云計算能力發(fā)揮到極致。
如果要追溯云原生的源頭,從時間軸上,可以回到2006年,亞馬遜正式推出彈性計算云服務(wù)EC2那個時候。但是云原生的概念則出現(xiàn)在2013年。這一年,Pivotal公司的Matt Stine首次將云原生定義為一系列云計算技術(shù)和開發(fā)管理方法的合集,包括DevOps、持續(xù)交付、微服務(wù)、敏捷基礎(chǔ)設(shè)施和12要素等。似乎只要軟件“上云”,或者說專門為“云”設(shè)計的軟件應(yīng)用,都可以稱之為云原生應(yīng)用。
從已取得的成果來看,對于企業(yè),云原生釋放出巨大的生產(chǎn)能力,在降本增效的同時,輕松承載幾何量級的業(yè)務(wù)量與數(shù)據(jù)流;對于用戶,即使在“雙11”這樣的流量請求高峰,已感覺不到延遲,或者出現(xiàn)所搶購物品不能及時呈現(xiàn)的情況。當(dāng)然,大型視頻直播、3D游戲的體驗也更為順暢,體驗感提升。伴隨著云原生的成長,不論是企業(yè),還是用戶,在數(shù)字化與智能化上所獲得的成果都超出預(yù)期。
從企業(yè)數(shù)字化的升級過程中,可以更清楚地看到云原生在云計算中成長的過程。
企業(yè)數(shù)字化最早經(jīng)歷的是服務(wù)器階段,之后是上云階段,或者稱為云化階段。云上應(yīng)用的數(shù)量迅速增加,導(dǎo)致企業(yè)的人力運維能力極為不足,形象的說法是人肉堆砌已經(jīng)不能解決問題。云原生由此自然進(jìn)化而來,云原生1.0開始,即云原生的最初階段。所要解決的是企業(yè)數(shù)字化轉(zhuǎn)型升級過程中,傳統(tǒng)應(yīng)用單體架構(gòu)厚重、煙囪式架構(gòu)等應(yīng)用無法高效率成長的問題。
那么,上云出現(xiàn)的問題,當(dāng)然要在云上解決。而云計算的內(nèi)生業(yè)務(wù)能力,就是云原生,由此生于云、長于云、用于云、信于云的云原生進(jìn)入2.0。生于云是指云原生技術(shù)、架構(gòu)和服務(wù)都是企業(yè)應(yīng)用的擴展;長于云是指企業(yè)應(yīng)用和業(yè)務(wù)發(fā)展的成長性,推動企業(yè)數(shù)字化建設(shè)、業(yè)務(wù)智能升級;用于云是指所有的業(yè)務(wù)都以服務(wù)為核心,持續(xù)專注于解決企業(yè)應(yīng)用升級中的問題;信于云是指云上運行值得信賴,安全可信。
概括而言,就是“資源高效、應(yīng)用敏捷、業(yè)務(wù)智能、安全可信”。
具體而言,資源高效的實現(xiàn),是由多元算力滿足不同應(yīng)用場景的個性化算力需求;由多云治理和邊云協(xié)同,構(gòu)建高效率、高可靠的分布式泛在計算平臺,并構(gòu)建包括容器、裸機、虛機、函數(shù)等多形態(tài)統(tǒng)一的計算資源能力;以“應(yīng)用”為中心構(gòu)建隨時可調(diào)用的資源調(diào)度和管理平臺,形成企業(yè)決策部署透明、感知應(yīng)用智能、靈活可控的應(yīng)用能力。
應(yīng)用敏捷主要體現(xiàn)在應(yīng)用迭代的速度日漸加快,關(guān)鍵在于開發(fā)與運維融為一體,即所謂“立而不破”,新舊業(yè)務(wù)平滑過渡、無縫對接,任何一次升級都不會影響到原有業(yè)務(wù)。這是通過 DevSecOps 應(yīng)用開發(fā)模式實現(xiàn)的。
業(yè)務(wù)智能已經(jīng)進(jìn)入良性提升通道,企業(yè)的數(shù)據(jù)管理與應(yīng)用能力,因為數(shù)據(jù)的資產(chǎn)化和數(shù)據(jù)的價值化,得以迅速放大,數(shù)據(jù)和AI技術(shù)的結(jié)合不斷賦能企業(yè)應(yīng)用擴展,就如植物得到所有的適宜條件而自然生長,不再需要一次次人為干預(yù)決策,智能升級是完全智能化的,新的應(yīng)用技術(shù)同樣內(nèi)生出來。
安全可信度的提高,依賴于云原生的內(nèi)生能力。安全服務(wù)和安全合規(guī)能力也是自帶的,“外來物種”的入侵是被屏蔽掉的,應(yīng)用在云上安全構(gòu)建,業(yè)務(wù)在云上安全運行。
以上四點與云計算資源池化、彈性伸縮、安全可靠的特性一脈相承。
傳統(tǒng)IT架構(gòu)是按照業(yè)務(wù)領(lǐng)域劃分,如開發(fā)、IT運營和質(zhì)量保障等部門是各自獨立的,開發(fā)與運營之間雖然進(jìn)行著合作與溝通,但其間的信息“鴻溝”是存在的。即使是提供應(yīng)用支撐的軟件企業(yè),也是如此運作的。難以快速響應(yīng)用戶需求,甚至人為拖延產(chǎn)品迭代周期,敏捷開發(fā)就是要解決這個問題,并將開發(fā)與運維完全打通,真正形成以用戶為中心的新業(yè)務(wù)結(jié)構(gòu)。在此基礎(chǔ)上,為解決開發(fā)和運維“信息對稱”的問題,DevOps應(yīng)運而生。DevOps集開發(fā)、技術(shù)運營和質(zhì)量保障為一體,從而提高開發(fā)效率,并縮短迭代周期,最終實現(xiàn)“持續(xù)交付”。所謂“持續(xù)交付”,不再是一套解決方案包打天下,僅做售后運維,而是確保持續(xù)更新,隨時可以發(fā)布新版本。
云原生使得新基礎(chǔ)設(shè)施之一的云計算硬件平等特性能很好發(fā)揮出來,不論是向下管理的各種異構(gòu)硬件,還是向上屏蔽底層硬件,都是以應(yīng)用為中心,而真正消弭了硬件差異性,或者說可以不考慮硬件的不同,無需針對特定硬件部署相應(yīng)軟件程序。如傳統(tǒng)高性能計算(HPC)專用網(wǎng)絡(luò)硬件成本高昂、組網(wǎng)規(guī)模不可擴展、技術(shù)演進(jìn)緩慢,所導(dǎo)致的應(yīng)用普及化難題,其高性能網(wǎng)絡(luò)通訊協(xié)議被云原生拓展應(yīng)用到云視頻、金融交易等更廣泛的領(lǐng)域之后,就得以解決,類似專有設(shè)備變?yōu)槎嘤猛镜幕A(chǔ)設(shè)備,尤其是云原生推動的應(yīng)用爆炸式增長,設(shè)備的價格雖然不變,但被多應(yīng)用快速攤薄。即應(yīng)用的拓展速度,使得硬件的價格壁壘轟然坍塌。以容器為例,原在私有云、公有云和混合云上的核心應(yīng)用,完全可以跨云應(yīng)用,對于云服務(wù)商,業(yè)務(wù)部署能力增強,對于客戶,業(yè)務(wù)連續(xù)性、降本增效等需求得以暢快滿足。不僅如此,邊緣計算技術(shù)將越來越多的應(yīng)用在邊緣側(cè)設(shè)備實現(xiàn),數(shù)據(jù)傳輸容量擴大、時延降低,減少了業(yè)務(wù)損耗。云原生又適時生長出泛在計算。
同時,云原生應(yīng)用數(shù)量的快速增加,其對應(yīng)用服務(wù)的流量治理、運行監(jiān)控、訪問安全以及發(fā)布等能力的訴求不斷提升,管控微服務(wù)模式無以為繼,應(yīng)時蝶變?yōu)榉乔秩胧轿⒎?wù)模式,應(yīng)用是開放與開源的,隨時提供解決方案,客戶需求不再可能被置之不理。
云原生應(yīng)用本身已具備云計算基因,許多應(yīng)用特性具有重合性,如網(wǎng)絡(luò)訪問、遠(yuǎn)端部署、可擴展彈性、共享、自主服務(wù)、高可用、持續(xù)交付等。
這些應(yīng)用是以微服務(wù)架構(gòu)、容器、DevOps等關(guān)鍵技術(shù)為支撐的。
彈性是云計算的重要特征,理論上不受資源限制,可以無限占用和使用資源(當(dāng)然需要按使用量付費)。實際上,彈性也應(yīng)該是一切智能軟硬件的特性,如容器的重要特性之一也是彈性。對于云原生,其彈性主要是指彈性使用資源和服務(wù)實例彈性擴展能力,所要解決的是單實例擴展資源達(dá)到瓶頸時,配合負(fù)載均衡機制實現(xiàn)彈性擴展。
云原生的這一特性,使得只有強力企業(yè)才可以解決彈性問題的專利,成為所有企業(yè)都可以獲得彈性能力的普惠選項。
云計算的IaaS、PaaS、SaaS,可視為分三種類型。與之對應(yīng),就涉及三個層級的共享,即資源共享、平臺共享、與應(yīng)用共享。
云原生應(yīng)用作為SaaS層服務(wù),部署于IaaS或PaaS層。共享體現(xiàn)在一份基準(zhǔn)代碼,可以實現(xiàn)多份部署,這是應(yīng)用開發(fā)的共享,而不是云應(yīng)用意義上的共享。云應(yīng)用是可以對所有人開放的,并共享云應(yīng)用服務(wù)。
云應(yīng)用部署與位置無關(guān),或者說云應(yīng)用部署沒有確定位置,是隨機的,但底層則是透明的。所以云原生應(yīng)用的配置文件、后端服務(wù)等是和應(yīng)用共生的,是一體的兩面,完全具備自管理自治理能力。
微服務(wù)設(shè)計架構(gòu)同樣遵循自治原則。因此,微服務(wù)總是與云原生相伴生。這和云的分布式中心特性高度相關(guān)。好處是自成一體,自我管理,就像獨立個體的人,必備自我管理能力。
云應(yīng)用的構(gòu)建可以在本地或者云端,但運行一定是在云端。這樣就要按照一定的標(biāo)準(zhǔn)交付,為的是在云端的任何位置部署支持標(biāo)準(zhǔn),不用考慮是什么環(huán)境。
容器就是這樣被打造的標(biāo)準(zhǔn)運行工具,在容器內(nèi)所有的應(yīng)用都以標(biāo)準(zhǔn)化鏡像的方式交付并運行。但容器本身又可以在任何地方運行,只提交鏡像發(fā)布就可以滿足業(yè)務(wù)需求頻繁變動、快速迭代、隨時發(fā)布的需求。
彈性、共享、自治等應(yīng)用特性保證了高可用。容器可以滿足敏捷啟停、多實例布置等高可用性,但并不能保證所有應(yīng)用的全天候穩(wěn)定。如果需要穩(wěn)定的高可用性,是否選擇容器,就需要進(jìn)行新的平衡,或者做出其他選擇。
可監(jiān)控性
這主要是指可監(jiān)控審計。用戶可以通過日志或者接口實時獲取應(yīng)用運行狀態(tài),以及應(yīng)用訪問調(diào)用數(shù)據(jù)等,作為計量計費、監(jiān)控和后期審計等的依據(jù)。
用戶可以根據(jù)自己的需求,通過網(wǎng)絡(luò)訪問,自助使用服務(wù),不需要云應(yīng)用管理人員授予權(quán)限。因為云應(yīng)用服務(wù)目錄簡單明了,并附有使用說明,用戶只需找到能滿足自身需求的應(yīng)用即可。即使不能滿足,也可以隨時提出需求,獲得解決辦法。
云應(yīng)用往往依賴于配置中心,實現(xiàn)不同環(huán)境應(yīng)用的部署運行。比如,開發(fā)、測試和生產(chǎn)環(huán)境,一些參數(shù)的配置往往是不一樣的。因此,不可能把所有配置文件同應(yīng)用一起打包,就要由配置中心來統(tǒng)一管理。這樣,還有一個好處,可以實現(xiàn)運行時的參數(shù)更新。
前面提到敏捷開發(fā)可以打通開發(fā)與運維。實際上,敏捷更大程度上和輕量、微服務(wù)組件化相關(guān),就如個體的人,小了輕了,自然輕巧敏捷。從這個角度說,云原生的敏捷特性只是一個方面,高度相關(guān)于整體架構(gòu),如技術(shù)架構(gòu)、組織架構(gòu)等。所以說,敏捷可以在流程、管理或體驗中被感覺到。
敏捷甚至被視為基礎(chǔ)設(shè)施,由Kubernetes驅(qū)動。Kubernetes可以很方便地拉取一套基礎(chǔ)設(shè)施,滿足用戶開發(fā),測試、發(fā)布等需求。
云原生具體應(yīng)用是由微服務(wù)、容器、DevOps、服務(wù)網(wǎng)絡(luò)、不可變基礎(chǔ)、聲明式API等關(guān)鍵技術(shù)所構(gòu)建。
容器被認(rèn)為是云原生應(yīng)用的基石,微服務(wù)容器化被作為云原生應(yīng)用的第一步。
云原生代碼、依賴項等在運行時被打包到容器鏡像文件中。鏡像存儲在鏡像倉庫。需要時,則將鏡像轉(zhuǎn)換為可運行的容器實例。該實例可在裝有容器引擎的任何計算機上運行,并可以按需部署任意數(shù)量的容器實例。每個容器雖然可以共享基礎(chǔ)主機操作系統(tǒng),內(nèi)存和處理器的一部分,但彼此隔離。容器的移植性保證了跨云應(yīng)用的一致性。由此,微服務(wù)隔離并打包自己的依賴項、更改項,從而不影響整個系統(tǒng),開發(fā)與發(fā)布可以隨時進(jìn)行。
因為共享底層操作系統(tǒng)和主機資源,容器所占用空間大大小于虛擬機,在一臺主機上可以同時運行多個微服務(wù)。
有了容器之后,還需要對容器進(jìn)行管理,這就是容器編排。目前,通行的容器編排調(diào)度器是Kubernetes,簡稱K8s。
業(yè)務(wù)架構(gòu)的變化和演進(jìn),是和業(yè)務(wù)越來越復(fù)雜一同改變的。演進(jìn)或變化的目的基本上都是為了突破業(yè)務(wù)痛點,上一代系統(tǒng)架構(gòu)被新的一代所代替。
第一代單體架構(gòu)把所有業(yè)務(wù)相關(guān)聯(lián)的組件、庫全部打包成一個執(zhí)行程序。雖然滿足了業(yè)務(wù)相互調(diào)用的需求,但卻增加了系統(tǒng)復(fù)雜度,導(dǎo)致系統(tǒng)維護(hù)成本過高,局部修改可能影響全局。更為困難的是,系統(tǒng)的封閉性,導(dǎo)致即使內(nèi)部組件也不能共享,更不用說產(chǎn)品能力的共享,結(jié)果是開發(fā)效率低下,迭代速度被掣肘。
第二代面向服務(wù)架構(gòu)的SOA(Service Oriented Architecture)是一種設(shè)計方法,其中包含多個服務(wù),且服務(wù)之間通過相互依賴,可提供一系列解決功能。一個服務(wù)通常以獨立的形式存在,各個服務(wù)之間可以通過網(wǎng)絡(luò)調(diào)用。
第三代微服務(wù)架構(gòu)是對SOA的升級,業(yè)務(wù)需求被組件化和服務(wù)化,原有的單個業(yè)務(wù)系統(tǒng)被拆分為多個獨立開發(fā)、設(shè)計、運行的小應(yīng)用。這些小應(yīng)用之間通過服務(wù)完成交互和集成,既可以單獨調(diào)用,也可以多個并用,企業(yè)可以根據(jù)業(yè)務(wù)的不同或業(yè)務(wù)階段的不同,進(jìn)行合理引入與靈活調(diào)用。
服務(wù)與服務(wù)之間通過高內(nèi)聚低耦合的方式交互。
服務(wù)網(wǎng)絡(luò)(Service Mesh)被稱為微服務(wù)2.0,解決了服務(wù)之間的通信,并解決了微服務(wù)1.0的技術(shù)門檻高、多語言支持不足、代碼侵入性強等問題。
在Service Mesh架構(gòu)中,非業(yè)務(wù)功能下層到Sidecar,用戶只需要關(guān)聯(lián)業(yè)務(wù)邏輯,而不用關(guān)聯(lián)服務(wù)治理等非業(yè)務(wù)功能。
DevOps不是Dev(開發(fā)人員)與Ops(運維人員)的簡單相加,而是兩者的全新組合。
DevOps強調(diào)的是如何通過自動化的工具協(xié)作和溝通來完成軟件的生命周期(開發(fā)、測試、運維)管理,從而更快速、更頻密地交付更穩(wěn)定的軟件。
無服務(wù)架構(gòu)由Serverless直譯而來,但Serverless并不意味著沒有服務(wù)器去運行代碼,只是不再需要管理服務(wù)器,只專注代碼,其余部分工作交由提供者處理。
對于開發(fā)者來說,Serverless架構(gòu)可以將服務(wù)器端應(yīng)用程序分解成多個,執(zhí)行不同任務(wù)。
使用Serverless架構(gòu)可以免除所有運維操作,開發(fā)人員可以更加專注于核心業(yè)務(wù)的開發(fā),實現(xiàn)快速上線和迭代。
這里所說的“不可變”類似于程序設(shè)計中的“不可變”定義,即不可變變量完成賦值后就不能更改,只能創(chuàng)建新的進(jìn)行整體替換。這也是快速迭代的設(shè)計之一。對于云原生來說,最基本的要求是服務(wù)器在完成部署后,就不再進(jìn)行更改。這是因為,不僅基礎(chǔ)設(shè)施的初始化及配置成本高昂,而且系統(tǒng)升級、配置修改以及補丁等會產(chǎn)生不可預(yù)估的副作用??勺兓A(chǔ)設(shè)施還會導(dǎo)致在災(zāi)難發(fā)生時,難以重新構(gòu)建服務(wù);在服務(wù)運行過程中,持續(xù)的修改往往產(chǎn)生并發(fā)風(fēng)險。而不可變基礎(chǔ)設(shè)施可提升發(fā)布效率,方便快速擴展。
聲明式API是與命令式API截然不同的一種編程方式。命令式 API可以直接向服務(wù)器發(fā)出執(zhí)行命令:我要做什么,而聲明式 API更像是一個指導(dǎo),明示要執(zhí)行什么操作:你要做什么。聲明式API容許系統(tǒng)不斷調(diào)整實際狀態(tài),直到與期望狀態(tài)相一致。
云原生是一種構(gòu)建和運行應(yīng)用程序的方法,是一套技術(shù)體系和方法論。
編輯:薛姣