【雲原生丨主題周】雲原生為何物?為何重要?
小編說:雲原生是一個寬泛的術語,本文帶你快速瞭解雲原生與雲原生架構。本文選自《Python雲原生》。
雲原生是一種團隊、文化和技術組織形式,利用自動化工具和架構來管理軟體複雜度和加速軟體交付。
雲原生概念已經超出了技術的範疇。我們需要從成功的公司、團隊和個人身上了解行業的發展方向。
目前,像Facebook 和Netflix 這樣的大公司都已經在雲原生技術上投入了大量的資源,而一些小的公司也意識到了該技術的價值。根據雲原生技術實踐的反饋,我們總結了如下一些優點。
√ 結果導向和團隊合作:雲原生的方法將一個大問題分解成眾多的小問題,從而使每個團隊都能專注於各自的部分。
√ 減少重複工作:自動化減少了困難、繁雜和重複的手動工作量,並減少了停機時間。這將使系統更有效率。
√ 可靠而高效的應用程式基礎設施:自動化可以對不同環境(無論是開發、階段釋出還是生產)中的部署做更多控制,還可以處理意外事故。自動化構建不僅有助於正常部署,而且在災難恢復的時候,也能使重新部署變得更加容易。
√ 應用程式洞察:為雲原生應用程式構建的工具可為應用程式提供更多洞察,從而使除錯、故障排查和審計變得容易。
√ 高效可靠的安全性:每個應用程式都會關注安全性,確保可靠的身份驗證。雲原生為開發人員提供了多種確保應用程式安全性的方式。
√ 經濟高效的系統:使用雲管理和部署應用程式可以有效地利用資源,包括應用程式釋出,通過減少資源浪費使系統花費更合理。
雲原生為何物?為何重要?
雲原生是一個寬泛的術語,它可以充分利用不同的技術,如基礎架構自動化或中介軟體開發、支援服務等,這些功能都屬於應用交付週期中的一部分。雲原生方法包括頻繁的版本釋出(無Bug、穩定),以及根據業務需求擴充套件應用程式。
使用雲原生方法,可以系統地實現應用程式構建目標。
雲原生方法遠優於傳統的面向虛擬化的業務流程,傳統方法需要投入大量的精力來構建開發環境,以及軟體交付過程中的其他不同環境。理想的雲原生架構應具有自動化和組合功能,這些自動化技術還應實現跨平臺管理和部署應用程式。
雲原生架構還應該具有其他幾個特性,如穩定的日誌記錄、應用程式和基礎架構監控,以確保應用程式正常執行。
雲原生方法能夠幫助開發人員使用例如Docker 等工具,在不同的平臺上輕易地建立和銷燬應用程式。
雲原生執行時環境
當軟體從一個計算環境遷移到另一個計算環境時,該如何使其可靠執行?最佳解決方案就是使用容器。這可能是從開發者自己的機器到預釋出環境再到生產環境,也可能是從物理機到私有云或公共雲中的虛擬機器。Kubernetes 已經成為容器服務的代名詞,越來越流行。
隨著雲原生框架的興起和其周邊應用程式的增加,容器的編排越來越受人關注。在容器執行時需要注意以下幾點。
管理容器狀態和高可用性
一定要保持容器的狀態(建立和銷燬),特別是在生產中,因為從業務的角度看它們非常重要。而且還應該能夠根據業務需求進行擴充套件。
成本體現和分析
容器可以根據業務預算控制資源管理,並可在很大程度上降低成本。
環境隔離
在容器內執行的每個程序都被隔離在該容器內。
跨叢集的負載均衡
應用流量由容器叢集處理,在容器內均勻重定向,這將增加應用程式最大響應數量並維持高可用性。
除錯和災難恢復
由於我們要在生產系統中使用,所以需要確保有正確的工具可以監控應用程式的執行狀況,採取必要措施避免停機,並提供高可用性。
雲原生架構
雲原生架構類似於我們為遺留系統建立的應用程式架構,但在雲原生應用程式架構中,我們應該考慮一些特性,例如十二要素應用程式(應用程式開發模式的集合)、微服務(將單體業務系統分解為獨立可部署服務)、自服務敏捷基礎設施(自服務平臺)、基於API 的協作(通過API 進行服務之間的互動)和抗脆弱性(自我實現和加強的應用程式)。
首先,我們來探討一下什麼是微服務。
微服務是一個更寬泛的術語,指將大型應用程式分解成更小的模組,分別開發直到釋出。這種方法不僅有助於有效地管理每個模組,而且還可以幫助我們發現服務底層本身的問題。以下是微服務的一些關鍵部分。
使用者友好的介面:
微服務之間可以實現明確的分離。微服務的版本控制可以更好地對API 進行控制,為消費者和生產者提供更大的自由度。
跨平臺部署和API 管理:
由於每個微服務都是一個單獨的實體,因此可以更新單個微服務而不用更改其他服務,同時也更容易將服務回滾到之前的更改。這意味著用來部署微服務的工件應該相容不同的API 和資料模式。這些API 必須在不同的平臺上測試,並且測試結果應該在不同的團隊,即運維、開發人員之間共享,大家共同維護一個集中的控制系統。
應用靈活性:
開發的微服務應該能夠處理所有請求且必須做出響應,而不管請求的種類如何,包括可能的錯誤輸入或無效請求。微服務也應該能夠處理意外的負載請求並進行適當的響應。所以應當對微服務進行獨立測試和整合測試。
微服務的分佈:
最好將服務分為小塊服務,以便單獨跟蹤和開發,最終組合起來形成一個微服務。這種技術使得微服務開發更穩定、更有效率。
下圖顯示了一個雲原生應用程式的高階架構。

在理想情況下,應用程式體系結構應該從兩三個服務開始,然後通過不斷更新版本進行擴充套件。瞭解應用程式架構非常重要,因為應用程式需要與系統的不同元件整合,並且在大型組織中會有團隊來專門管理這些元件。微服務中的版本控制至關重要,因為軟體開發的各個階段都會使用不同的方法。
微服務是一個新概念嗎
微服務的概念由來已久了。微服務是一種用來劃分大型系統中不同元件邊界的架構模式。所有的微服務都以相似的方式工作,然後將不同服務連結起來,根據請求的型別處理特定事務的資料流。
下圖描繪了微服務的體系結構。

為什麼說Python 是雲原生微服務開發的最佳選擇
為什麼我們選擇Python 並將其推薦給其他人?下面列舉了幾點原因。
可讀性
Python 是一種表達能力很強且易學習的程式語言。即便是業餘愛好者也可以輕鬆掌握Python。與其他程式語言(例如Java 更關注圓括號、大括號、逗號和冒號)相比,使用Python你可以將更多的精力投入到程式設計上,減少除錯語法的時間。
庫和社群
Python 有大量可以在不同平臺(例如UNIX、Windows 和OS X)上執行的庫。這些庫可以根據你的應用程式需求輕鬆擴充套件。同時還有一個強大的社群致力於構建這些庫,這使得Python 成為最適合用於業務的語言。
就Python 社群而言,Python 使用者組(PUG)是一個基於社群開發模式的社群,這可以促進Python 在全球範疇內的普及。社群中的小組成員相互交流,有助於我們構建基於Python框架的大型系統。
互動模式
Python 互動模式可以幫助你在除錯完程式碼後,立即將其新增到主程式中。
可擴充套件
Python 提供了更好的結構和概念,如模組,這比起任何其他指令碼語言(如shell 指令碼),可以更系統地維護大型程式。