什么是云原生

一、開篇淺談

云原生的概念一直以來都很模糊,雖然云原生計算基金會(CNCF)給出了所謂的定義,但是并不能讓大家很好的理解云原生的理念,為什么說是理念呢,因為云原生是一種思想,是一種解決方案,很抽象。

隨著云原生生態(tài)和邊界不斷的擴大,云原生自身的定義一直在變。不同的公司(Pivotal & CNCF)不同的人對它有不同的定義,同一家公司在不同的時間階段定義也不一樣。根據(jù)摩爾定律推斷,未來對于云原生的定義還會不斷變化。

為了能夠給大家盡可能說出云原生是個什么東西,我讀了很多很多文章,拜訪了很多名家,包括業(yè)界的知名大佬、年薪千萬的骨灰級專家、名下數(shù)十萬學(xué)生的成功學(xué)大師,真是生怕自己才疏學(xué)淺耽誤了大家,所以我希望大家能看到最后,也希望這篇文章能夠給你帶來收獲。

二、云計算是什么

說到云原生,就不得不提到云計算,那么什么又是云計算呢?

2006年,亞馬遜把基于分布式操作系統(tǒng)聚集起來的強?計算能?,通過互聯(lián)?的?分輸送給千千萬萬的普通?戶,?們給這種計算的在線服務(wù),起的名字叫做云計算。

通俗的說,把分布式操作系統(tǒng)聚集起來的強大計算能力像水電一樣,成為大眾的必需品,輸送給千家萬戶,讓每個人都可以高效利用這種計算資源。就像水龍頭一樣,我們什么需要水打開水龍頭就好了,再也不用去井里挑水喝了;什么時候需要電直接打開開關(guān)就好了,再也不用拿兩根木頭磨來磨去了。但是,你要付費,你得掏錢,天底下沒有免費的午餐,因為能量守恒。

三、云原生是什么

我接觸云原生應(yīng)該是在8年前,那時候我高二,那個時候云原生的概念比較廣泛,記得那時候應(yīng)該是暑假,那天很熱,風(fēng)扇吹著,看著qq群里的前輩們討論著“Docker”這個字眼,真是好奇啊,聽前輩們對這個贊不絕口,好奇心的驅(qū)動,讓我開始了云原生之路。

初識Docker的我,還沒有感受到它的強大之處,簡單的過手之后,就潦草的摒棄掉了,次年,也就是我的高考前幾個月吧,已經(jīng)玩爛了ssm框架的我,過渡到了SpringBoot,感受到SpringBoot的強大之后,不免讓我想起了Docker,這不也是開箱即用,敏捷開發(fā)么?這個時候我已經(jīng)發(fā)現(xiàn)社區(qū)生態(tài)已經(jīng)逐漸強大了。

在大家還在猛刷“三年高考,五年模擬”的時候,我將我寫完的SpringBoot項目用Docker部署在Linux上,我現(xiàn)在還記得當(dāng)時那種興奮的感覺,不用手動部署項目,不用手動部署Nginx、Redis、MySQL...只需要用Docker拉取對應(yīng)版本鏡像,通過簡單的命令就可以完成之前復(fù)雜的操作,再加上相關(guān)編排工具的加持,簡直不要太爽。

再到高考之后,我發(fā)現(xiàn)當(dāng)時已經(jīng)稱霸的k8s+擁有絕對地位Docker+SpringCloud Netflix已經(jīng)可以滿足企業(yè)開發(fā),我覺得這一定是風(fēng)口,你要知道,風(fēng)來了,豬都會飛,我雖然數(shù)理化沒學(xué)好,但我想做這只豬,這只會飛的豬。

其實,云原生從我當(dāng)初剛了解的時候,就特別火,而且是一直火,沒想到時至今日,才被大家所熟知。

早期,云原生架構(gòu)有幾個特征:

  1. 符合12模式(Twelve-Factor App):云原生應(yīng)用架構(gòu)的模式集合
  2. 微服務(wù)架構(gòu)(Microservices):獨立部署的服務(wù),一次只做一件事
  3. 自助服務(wù)敏捷基礎(chǔ)設(shè)施(Self-Service Agile Infrastructure):用于快速、可重復(fù)和一致地提供應(yīng)用環(huán)境和服務(wù)的平臺
  4. 面向API接口的通信(API-based Collaboration):服務(wù)之間的交互基于接口,而不是本地方法調(diào)用
  5. 抗脆弱性(Anti-Fragility):系統(tǒng)能抵御高負載

簡單來說就是:

  • 模塊化(Modularity)
  • 可觀測性(Observability)
  • 可部署性(Deployability)
  • 可測試性(Testability)
  • 可處理性(Disposability)
  • 可替代性(Replaceability)

2019年,VMware Tanzu 官網(wǎng)給出了云原生最新定義,以及云原生的架構(gòu)原則:

云原生是一種利用云計算交付模型的優(yōu)勢來構(gòu)建和運行應(yīng)用程序的方法論。當(dāng)企業(yè)使用云原生架構(gòu)開發(fā)和運維應(yīng)用程序時,它們能更快速地響應(yīng)客戶需求將新想法推向市場。

雖然公共云影響了幾乎所有行業(yè)對于基礎(chǔ)設(shè)施的思維模式,但類似云的交付并不僅限于公共環(huán)境。云原生的開發(fā)同時適合公共云和私有云,你只需要關(guān)心應(yīng)用程序是如何創(chuàng)建和部署,無需理會在哪部署。

更重要的是能夠為開發(fā)人員提供按需訪問計算能力以及現(xiàn)代數(shù)據(jù)和應(yīng)用程序服務(wù)。云原生開發(fā)融合了 DevOps、連續(xù)交付、微服務(wù)和容器。

云原生架構(gòu)原則:DevOps、Microservices、Containers、Security。

上面我提到云原生計算基金會(CNCF),是由開源基礎(chǔ)設(shè)施界的翹楚 Google、RedHat 等公司共同牽頭發(fā)起的一個基金會組織,其目的非常明確,就是為了對抗當(dāng)時大紅大紫的 Docker 公司在容器圈一家獨大的局面。CNCF 通過 Kubernetes 項目在開源社區(qū)編排領(lǐng)域一騎絕塵,之后就扛起了云原生定義和推廣的大旗,風(fēng)光無限。

給大家看一眼CNCF的全景圖吧!

image.png

2015 年 CNCF 把云原生定義為:應(yīng)用容器化、面向微服務(wù)、容器編排。到了 2018 年,CNCF 更新了云原生的定義,加入了聲明式 API 和服務(wù)網(wǎng)格(2017 年社區(qū)新技術(shù),和微服務(wù)并列,注意它不是微服務(wù)的升級版本),這些技術(shù)能夠構(gòu)建容錯性好,易于管理和便于觀察的松耦合系統(tǒng)。2018年,大量科技公司開始接受云原生的概念,并紛紛加入到云原生的大家庭。此外,主流云計算供應(yīng)商相繼加入 CNCF,持續(xù)豐富整個云原生的生態(tài)。

四、云計算的四個層次

4.1 IaaS(基礎(chǔ)架構(gòu)即服務(wù))

IaaS(Infrastructure as a Service,基礎(chǔ)架構(gòu)即服務(wù))是基礎(chǔ)層。在這一層,通過虛擬化、動態(tài)化將IT基礎(chǔ)資源(計算、網(wǎng)絡(luò)、存儲)聚合形成資源池。資源池即計算能力的集合,終端用戶(企業(yè))可以通過網(wǎng)絡(luò)獲得自己需要的計算資源,運行自己的業(yè)務(wù)系統(tǒng)。這種方式使用戶不必自己建設(shè)這些基礎(chǔ)設(shè)施,而是通過付費即可使用這些資源。

4.2 PaaS(平臺即服務(wù))

在IaaS層之上的是PaaS(Platform as a Service,平臺即服務(wù))層。這一層除了提供基礎(chǔ)計算能力,還具備了業(yè)務(wù)的開發(fā)運行環(huán)境,提供包括應(yīng)用代碼、SDK、操作系統(tǒng)以及API在內(nèi)的IT組件,供個人開發(fā)者和企業(yè)將相應(yīng)功能模塊嵌入軟件或硬件,以提高開發(fā)效率。對于企業(yè)或終端用戶而言,這一層的服務(wù)可以為業(yè)務(wù)創(chuàng)新提供快速、低成本的環(huán)境。

4.3 SaaS(軟件即服務(wù))

最上層是SaaS(Software as a Service,軟件即服務(wù))。實際上,SaaS在云計算概念出現(xiàn)之前就已經(jīng)存在,并隨著云計算技術(shù)的發(fā)展得到了更好的發(fā)展。SaaS的軟件是“拿來即用”的,不需要用戶安裝,軟件升級與維護也無須終端用戶參與。同時,它還是按需使用的軟件,與傳統(tǒng)軟件購買后就無法退貨相較具有無可比擬的優(yōu)勢。

4.4 DaaS(數(shù)據(jù)即服務(wù))

越來越多的數(shù)據(jù)沉淀、抽象形成了新的服務(wù)——DaaS(Data as a Service,數(shù)據(jù)即服務(wù))。

數(shù)據(jù)聚合抽象,把數(shù)據(jù)轉(zhuǎn)換成通用信息,從而為公眾提供公共信息服務(wù)。例如,對于天氣信息,可能A需要根據(jù)天氣信息來判斷出門穿著,B需要根據(jù)天氣信息判斷是否洗車,C需要根據(jù)天氣信息判斷是否準備防洪防澇設(shè)施等。不同用戶均可利用DaaS滿足自己的訴求。

此外,通過對各類數(shù)據(jù)信息進一步加工形成信息組合應(yīng)用,會進一步盤活數(shù)據(jù),提升數(shù)據(jù)價值。這就像搭積木一樣,對基礎(chǔ)數(shù)據(jù)信息塊以不同的方式進行組裝,可以達到千變?nèi)f化的效果。DaaS服務(wù)已成為當(dāng)下數(shù)字化轉(zhuǎn)型的重要抓手。

五、云原生如何構(gòu)建

5.1 云原生架構(gòu)

容器化的出現(xiàn),一定程度上帶動了微服務(wù)架構(gòu)。架構(gòu)演化從單體式應(yīng)用到分布式,再從分布式架構(gòu)到云原生架構(gòu),微服務(wù)在其中有著不可或缺的角色。微服務(wù)帶給我們很多開發(fā)和部署上的靈活性和技術(shù)多樣性,但是也增加了服務(wù)調(diào)用的開銷、分布式系事務(wù)、調(diào)試與服務(wù)治理方面的難題。

來看一看這個我早些年畫的一個簡易的架構(gòu)圖:

image.png

從上圖Spring Cloud組件的架構(gòu)可以看出在微服務(wù)架構(gòu)中所必須的組件,包括:服務(wù)發(fā)現(xiàn)與注冊、熔斷機制、路由、全局鎖、中心配置管理、控制總線、決策競選、分布式會話和集群狀態(tài)管理等基礎(chǔ)組件。

image.png

Spring Cloud和Kubernetes有很大的不同,Spring Cloud和Kubernetes處理了不同范圍的微服務(wù)架構(gòu)技術(shù)點,而且是用了不同的方法。Spring Cloud方法是試圖解決在JVM中的微服務(wù)架構(gòu)要點,而Kubernetes方法是試圖讓問題消失,為開發(fā)者在平臺層解決。Spring Cloud在JVM中非常強大,Kubernetes管理那些JVM很強大??雌饋砀魅∷L,充分利用這兩者的優(yōu)勢是自然而然的趨勢了。

5.2 DevOps

image.png

為了解決應(yīng)用 “持續(xù)交付問題”,我們引入了 Devops。

提到交付問題,就想起大學(xué)的專業(yè)課——軟件工程...這是個讓人頭疼的問題,我們知道,一個軟件從零開始到最終交付,大概包括以下幾個階段:產(chǎn)品規(guī)劃、開發(fā)編碼、構(gòu)建、QA測試、發(fā)布、部署和維護。

最初大家說到DevOps,都是指的‘開發(fā)運維一體化’,現(xiàn)在大家說的 DevOps 已經(jīng)是擴大到“端到端”的概念了。

Devops 理念大家應(yīng)該比較熟悉了,我理解它是一系列價值觀,原則,方法,實踐及工具的集合,目的是實現(xiàn)快速交付價值且具有持續(xù)改進能力,其核心是用于打破研發(fā)和運維之間的隔閡、加快軟件交付流程、提高軟件質(zhì)量。

這里就不過多談?wù)摿?,給大家列出devops平臺搭建工具

  1. 項目管理(PM):jira。
    運營可以上去提問題,可以看到各個問題的完整的工作流,待解決未解決等;
  2. 代碼管理:gitlab。
    jenkins或者K8S都可以集成gitlab,進行代碼管理,上線,回滾等;
  3. 持續(xù)集成CI(Continuous Integration):gitlab ci。
    開發(fā)人員提交了新代碼之后,立刻進行構(gòu)建、(單元)測試。根據(jù)測試結(jié)果,我們可以確定新代碼和原有代碼能否正確地集成在一起。
  4. 持續(xù)交付CD(Continuous Delivery):gitlab cd。
    完成單元測試后,可以把代碼部署到連接數(shù)據(jù)庫的 Staging 環(huán)境中更多的測試。如果代碼沒有問題,可以繼續(xù)手動部署到生產(chǎn)環(huán)境中。
  5. 鏡像倉庫:VMware Harbor,私服nexus。
  6. 容器:Docker。
  7. 編排:K8S。
  8. 服務(wù)治理:Nacos。
  9. 腳本語言:Python。
  10. 日志管理:Cat+Sentry,還有種常用的是ELK。
  11. 系統(tǒng)監(jiān)控:Prometheus。
  12. 負載均衡:Nginx。
  13. 網(wǎng)關(guān):Kong,SpringCloud Gateway。
  14. 鏈路追蹤:SkyWalking。
  15. 產(chǎn)品和UI圖:藍湖。
  16. 公司內(nèi)部文檔:Confluence。

六、云原生的關(guān)鍵技術(shù)

[圖片上傳失敗...(image-8bf0d8-1652200764346)]

6.1 容器

容器雛形最早出現(xiàn)在 1979 年叫 Chroot Jail ,定義于 2008 年 即 LXC(Linux Container),將 Cgroups 的資源管理能力和 Namespace 的視圖隔離能力組合在一起,實現(xiàn)進程級別的隔離。

然而容器最大的創(chuàng)新在于容器鏡像(即集裝箱,Docker “現(xiàn)象級” 開創(chuàng)),它包含了一個應(yīng)用運行所需的完整環(huán)境(整個操作系統(tǒng)的文件系統(tǒng)),具有一致性、輕量級、可移植、語言無關(guān)等特性,實現(xiàn) “一次發(fā)布,隨處運行”(開發(fā)、測試、生產(chǎn)),使應(yīng)用的構(gòu)建、分發(fā)和交付完全標準化。

它也是 “不可變基礎(chǔ)設(shè)施” 的核心基礎(chǔ)。

6.2 Kubernetes

Kubernetes 是云計算和云原生時代的 Linux,是 Google 基于 Borg 開源的容器編排調(diào)度系統(tǒng),讓容器應(yīng)用進入大規(guī)模工業(yè)生產(chǎn)。

聲明式的 API 與可擴展(CRD + Controller)的編程接口,先進的設(shè)計思想使其在容器編排大戰(zhàn)中(Kubernetes、Swarm、Mesos)處于王者地位,成為容器編排系統(tǒng)的事實標準。

通過采用 Kubernetes 平臺,用戶不必操心資源管理問題,使基礎(chǔ)設(shè)施更加標準化,復(fù)雜度降低,資源使用率提升。同時 Kubernetes 也簡化了混合云,多云,邊緣云等跨數(shù)據(jù)中心的部署成本。

6.3 微服務(wù)(Microservices)

微服務(wù)則是一種用于構(gòu)建應(yīng)用的架構(gòu)方案,微服務(wù)架構(gòu)有別于為傳統(tǒng)的單體應(yīng)用的是將應(yīng)用拆分成多個核心功能,每個功能都被稱為一個獨立的服務(wù),可以單獨構(gòu)建和部署,其中某個服務(wù)出現(xiàn)故障也不會影響其他的功能模塊,這句體現(xiàn)了其針對特定服務(wù)發(fā)布,影響小,風(fēng)險小等特點。

6.4 無服務(wù)(Serverless)

根據(jù) CNCF 的定義,Serverless 是指構(gòu)建和運行不需要服務(wù)器管理的應(yīng)用程序的概念。即開發(fā)人員無需關(guān)注底層的基礎(chǔ)設(shè)施,只需要關(guān)注應(yīng)用程序的業(yè)務(wù)本身就行,且該服務(wù)是可以自動擴展。

6.5 DevOps

早期的項目使用的是‘瀑布模型’進行軟件交付,即一個階段所有的完成工作之后再往下一個階段,但這樣的模式無法滿足業(yè)務(wù)快速開發(fā)交付及變更需求的情況,于是后面就出現(xiàn)了敏捷開發(fā)這一概念,即一種快速應(yīng)對需求變化軟件開發(fā)能力,而DevOps就是基于敏捷開發(fā)將軟件開發(fā)/測試人員/IT運維關(guān)聯(lián)在一起,通過工具、組織等方式使開發(fā)、測試、發(fā)布流程自動化,軟件發(fā)布頻繁,高效。

6.6 ServiceMesh

ServiceMesh 核心是業(yè)務(wù)邏輯與非業(yè)務(wù)邏輯解耦,實現(xiàn)開發(fā)只需關(guān)注業(yè)務(wù)邏輯的偉大目標。將一大堆和業(yè)務(wù)邏輯無關(guān)的客戶端 SDK(如服務(wù)發(fā)現(xiàn),路由,負載均衡,限流降級等)從業(yè)務(wù)應(yīng)用中剝離出來,放到單獨的 Proxy(Sidecar) 進程中,之后下沉到基礎(chǔ)設(shè)施中間件 Mesh(類似 TDDL 到 DRDS 的模式)。

針對應(yīng)用減少了系統(tǒng)框架變更帶來的風(fēng)險、瘦身后變的干凈和輕量化,加快了應(yīng)用的啟動速度,使得應(yīng)用往 Serverless 架構(gòu)遷移變得輕松。

針對 Mesh 可以根據(jù)自身需求自行迭代和升級功能,更加利于全局服務(wù)治理、灰度發(fā)布、監(jiān)控等。

同時,Mesh 邊界可以擴展到 DB Mesh,Cache Mesh、Msg Mesh等,真正做到服務(wù)通信的標準化即服務(wù)之間通信的 TCP/IP。

6.7 基礎(chǔ)設(shè)施即代碼(IaC)

將基礎(chǔ)設(shè)施及其完整的生命周期(創(chuàng)建、銷毀、擴容、替換)以代碼的方式進行描述、通過相應(yīng)的工具(terraform、ROS、CloudFormation等)編排執(zhí)行和管理。

比如應(yīng)用用到的所有基礎(chǔ)資源(如:ECS、VPC、RDS、SLB、Redis 等),無需在控制臺不停的切換頁面申請購買,只需定義相應(yīng)代碼,一鍵創(chuàng)建。

這樣做的受益是基礎(chǔ)設(shè)施代碼版本化,可 Review,可測試,可追溯,可回滾,一致性、防止配置漂移,方便共享、模板化和規(guī)?;嵘诉\維整體效率和質(zhì)量,通過代碼也可以輕松了解基礎(chǔ)設(shè)施的全貌。

6.8 Cloud IDE

云端 IDE 深入研發(fā)的整個生命周期,提供了完整的開發(fā)、調(diào)試、預(yù)發(fā)、生產(chǎn)環(huán)境及CI/CD 發(fā)布一體化體驗。云端可提供豐富的代碼庫模板,通過分布式運算提升編譯速度,以 “智能” 方式實現(xiàn)代碼推薦、代碼優(yōu)化、自動掃描發(fā)現(xiàn) BUG、識別邏輯和系統(tǒng)性風(fēng)險。

可以想像云時代開發(fā)模式與本地開發(fā)完全不同,擁有更高的研發(fā)效率,更快的迭代速度,更完善的質(zhì)量控制。

七、云計算和云原生的關(guān)系

7.1 云原生是云計算的趨勢

  1. 從市場發(fā)展趨勢看,云計算將是未來IT的主流。

  2. 從技術(shù)發(fā)展趨勢看,更多企業(yè)將會廣泛應(yīng)用云原生技術(shù)。

  3. 從軟件開發(fā)角度看,云原生技術(shù)為企業(yè)帶來了更快進行業(yè)務(wù)創(chuàng)新的價值。

7.2 云原生是云計算的再升級

  1. 整個云原生技術(shù)棧都是基于開源、開放的技術(shù)標準。

  2. 云原生是對使用云的應(yīng)用架構(gòu)的再升級。

  3. 云原生是對云平臺的技術(shù)和云服務(wù)的再升級。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容