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