都在叨叨云原生,到底什么是云原生?
根據(jù)大多數(shù)定義,云原生是一種軟件設(shè)計(jì)、實(shí)施和部署方法,旨在充分利用基于云的服務(wù)和交付模型。云原生應(yīng)用程序通常也使用分布式架構(gòu)運(yùn)行,這意味著應(yīng)用程序功能被分解為多個(gè)服務(wù),然后分布在托管環(huán)境中,而不是整合到單個(gè)服務(wù)器上。
編輯搜圖
有點(diǎn)令人困惑的是,云原生應(yīng)用程序不一定在云中運(yùn)行。可以根據(jù)云原生原則構(gòu)建應(yīng)用程序,并使用Kubernetes等平臺將其部署在本地,該平臺模仿云環(huán)境的分布式、基于服務(wù)的交付模型。
盡管如此,大多數(shù)云原生應(yīng)用程序都在云中運(yùn)行。任何按照云原生原則設(shè)計(jì)的應(yīng)用程序都可以在云中運(yùn)行。
編輯搜圖
云原生是如何工作的?
云原生是一個(gè)高級概念,而不是特定類型的應(yīng)用程序架構(gòu)、設(shè)計(jì)或交付過程。因此,有多種方法可以創(chuàng)建云原生軟件以及可以幫助實(shí)現(xiàn)這一目標(biāo)的各種工具。
然而,一般來說,云原生應(yīng)用程序共享某些核心功能:
-
它們是使用微服務(wù)架構(gòu)構(gòu)建的。這意味著應(yīng)用程序功能分布在許多微服務(wù)中,這些微服務(wù)相互交互以運(yùn)行完整的應(yīng)用程序。
-
它們廣泛依賴 API 將內(nèi)部組件相互集成,以及與第三方服務(wù)進(jìn)行交互。
-
它們使用DevOps[4]等軟件開發(fā)策略迭代和持續(xù)更新。
-
它們部署在分布式環(huán)境中,例如服務(wù)器集群,而不是單個(gè)服務(wù)器上。
您可以總結(jié)以上所有內(nèi)容,即云原生應(yīng)用程序本質(zhì)上是使用現(xiàn)代工具和方法設(shè)計(jì)和構(gòu)建的應(yīng)用程序。在很多方面,“云原生軟件開發(fā)”簡直成了“現(xiàn)代軟件開發(fā)”的簡寫。這兩個(gè)術(shù)語都有些模棱兩可,但這就是重點(diǎn):正如有很多方法可以使軟件設(shè)計(jì)和開發(fā)操作現(xiàn)代化一樣,也有很多方法可以接近云原生。
云原生有什么好處?
與傳統(tǒng)的應(yīng)用程序設(shè)計(jì)和開發(fā)策略相比,云原生提供了多種優(yōu)勢。這意味著那些以單體架構(gòu)、本地部署和單節(jié)點(diǎn)托管環(huán)境等技術(shù)為中心的優(yōu)勢:
-
彈性和可靠性:由于云原生應(yīng)用程序通常部署在分布式環(huán)境中,因此它們在面對故障和中斷時(shí)更具彈性。單個(gè)服務(wù)器故障,甚至是多個(gè)服務(wù)器的故障,通常不會導(dǎo)致應(yīng)用程序失敗,因?yàn)榉?wù)可以重新部署到集群中的其他服務(wù)器。
-
可擴(kuò)展性:云原生通過允許將應(yīng)用程序分解為離散的部分來達(dá)到可擴(kuò)展性。每個(gè)部分都可以單獨(dú)縮放,從而可以高效、快速地縮放。例如,如果應(yīng)用程序登錄次數(shù)激增,則可以擴(kuò)展應(yīng)用程序的身份驗(yàn)證服務(wù)以應(yīng)對這種增加,即使應(yīng)用程序的其余部分繼續(xù)以正常容量運(yùn)行。
-
效率:從成本和性能的角度來看,云原生應(yīng)用程序往往是高效的。這是因?yàn)樗麄冎荒軓呐c之交互的云服務(wù)中消耗他們需要的資源。單體應(yīng)用程序和單節(jié)點(diǎn)應(yīng)用程序通常效率不高,因?yàn)樗鼈兛赡軙加谜麄€(gè)服務(wù)器,即使它們并不總是需要服務(wù)器上的所有可用資源。
-
更快的創(chuàng)新:云原生將應(yīng)用程序分解為多個(gè)組件,這些組件可以使用自己的代碼庫單獨(dú)開發(fā)。它還鼓勵(lì)通過持續(xù)集成/持續(xù)交付(CI/CD) 等方法進(jìn)行持續(xù)的迭代開發(fā)。在這兩種方式中,云原生都讓創(chuàng)建新功能和創(chuàng)新變得更加容易。
-
可移植性:使用云原生方法設(shè)計(jì)的應(yīng)用程序通??梢栽谌魏卧浦羞\(yùn)行,以及在基于服務(wù)的模型(如 Kubernetes)上管理資源的任何本地托管平臺。在這方面,云原生應(yīng)用程序往往與云和基礎(chǔ)設(shè)施無關(guān),因此可以輕松地將它們從一個(gè)環(huán)境移植到另一個(gè)環(huán)境,而無需修改應(yīng)用程序本身。
-
自動(dòng)化:云原生可以在部署和管理應(yīng)用程序時(shí)輕松充分利用自動(dòng)化工具。例如,云原生應(yīng)用程序經(jīng)常使用容器進(jìn)行部署,可以使用 Docker Swarm 或 Kubernetes 等工具進(jìn)行編排,這些工具可以自動(dòng)處理負(fù)載平衡和工作負(fù)載放置等任務(wù)。
云原生的缺點(diǎn)是什么?
雖然云原生是加速應(yīng)用程序開發(fā)、最大化效率和提高可靠性的好方法,但它帶來了一些挑戰(zhàn)。最常見的包括:
-
復(fù)雜性:簡單來說,云原生的開發(fā)策略和應(yīng)用架構(gòu)比傳統(tǒng)應(yīng)用更復(fù)雜。與使用單個(gè)代碼庫開發(fā)的單體應(yīng)用程序相比,云原生應(yīng)用程序包含更多移動(dòng)部件,并且需要更復(fù)雜的開發(fā)過程。出于這個(gè)原因,采用云原生的組織必須實(shí)施工具和流程,使他們能夠管理應(yīng)用程序開發(fā)過程以及應(yīng)用程序部署和管理過程的復(fù)雜性。
-
更多工具:與此類似,云原生應(yīng)用程序通常依賴于更多工具,從而導(dǎo)致更復(fù)雜的技術(shù)堆棧。雖然單體應(yīng)用程序通常可以僅使用 VM 進(jìn)行部署,但云原生應(yīng)用程序可以使用容器部署,這些容器在 VM 上運(yùn)行并通過 Kubernetes 進(jìn)行編排。此外,CI/CD 等開發(fā)技術(shù)需要團(tuán)隊(duì)管理大量工具(CI 服務(wù)器、IDE、源代碼管理器等)。在有關(guān)云原生應(yīng)用程序的所有這些方面,團(tuán)隊(duì)必須學(xué)習(xí)和跟蹤更多的工具和技術(shù)。
-
API 依賴:雖然云原生應(yīng)用程序以 API 為中心的設(shè)計(jì)使得按需消耗資源變得容易,但廣泛依賴 API 也存在缺陷。API 可能會引入原本不存在的安全問題。此外,API 性能或可用性問題可能會影響云原生應(yīng)用程序的性能,并且由于對第三方 API(如云供應(yīng)商提供的 API)的可見性有限,這些問題可能難以解決。
-
鎖定風(fēng)險(xiǎn):雖然可以通過使用開放 API 和技術(shù)將云原生應(yīng)用程序設(shè)計(jì)為與供應(yīng)商無關(guān),但情況并非總是如此。一些云原生應(yīng)用程序可能需要來自特定云供應(yīng)商的 API,或者依賴于特定的編排平臺,從而導(dǎo)致供應(yīng)商或平臺鎖定。
云原生開發(fā)示例
如今,云原生開發(fā)在各種類型和規(guī)模的組織中得到廣泛使用??紤]以下云原生示例和用例:
(1) 重構(gòu)遺留應(yīng)用程序
擁有設(shè)計(jì)為在本地運(yùn)行的遺留應(yīng)用程序的企業(yè)可能會采用云原生作為對這些應(yīng)用程序進(jìn)行全面檢查和現(xiàn)代化的手段。通常,這項(xiàng)工作需要重構(gòu),這意味著重新設(shè)計(jì)應(yīng)用程序,使其可以在分布式環(huán)境中運(yùn)行并充分利用基于服務(wù)的交付模型。
(2) 容器化應(yīng)用
尋求利用比虛擬機(jī)更高效且性能更好的容器的組織可能會轉(zhuǎn)向云原生來實(shí)現(xiàn)這一點(diǎn)。雖然您不必使用容器來實(shí)現(xiàn)云原生,但容器很適合基于微服務(wù)、面向服務(wù)的開發(fā)和部署技術(shù)。
(3) 云遷移
擁抱云原生是開始向云遷移的好方法,或者是對現(xiàn)有云投資的雙重投資。從技術(shù)上講,您的應(yīng)用程序不必是云原生的就可以在云中運(yùn)行;例如,您可以在基于云的 VM 上部署單體應(yīng)用程序以在云中運(yùn)行它。但是為了充分利用云,并在云環(huán)境中實(shí)現(xiàn)成本和性能之間的最佳平衡,您需要您的應(yīng)用程序是云原生的。
(4) 成本優(yōu)化
由于云原生架構(gòu)和開發(fā)策略傾向于更有效地利用資源,因此云原生是尋求降低 IT 運(yùn)營成本的企業(yè)的常見策略。雖然采用云原生并不能自動(dòng)保證成本效率,但精心設(shè)計(jì)的云原生應(yīng)用程序的運(yùn)行和更新成本將低于傳統(tǒng)應(yīng)用程序。
(5) 可靠性增強(qiáng)