【雲端乾貨】雲原生定義解析之不可變基礎設施 (immutable infrastructure)

語言: CN / TW / HK

文/蔡超 Mobvista 匯量科技集團副總裁兼首席架構師

隨著雲原生技術的不斷髮展,2018年,CNCF擴充套件了雲原生技術的定義,以下是雲原生技術的新定義:

“雲原生技術有利於各組織在公有云、私有云和混合雲等新型動態環境中,構建和執行可彈性擴充套件的應用。雲原生的代表技術包括容器、服務網格、微服務、不可變基礎設施和宣告式API。這些技術能夠構建容錯性好、易於管理和便於觀察的松耦合系統。結合可靠的自動化手段,雲原生技術使工程師們能夠輕鬆地對系統作出頻繁和可預測的重大變更。“

其中,像容器,微服務等概念早已深入人心,而很多開發人員都對此次提及的“不可變基礎設施”這個概念有不少疑惑,下文將對這個概念進行解析。

其實不可變基礎設施這個概念由來已久,並在不同的場合被很多技術專家已不同的形式提出並討論過, 例如:

  1. “Trash Your Servers and Burn Your Code: Immutable Infrastructure and Disposable Components”, Chad Fowler, 2013

  2. “Phoenix Server”, Martin Fowler, 2012

不可變基礎設施裡的“不可變”非常類似於程式設計中的“不可變”概念。程式設計中,不可變變數(Immutable Variable)就是在完成賦值後就不能發生更改,只能建立新的來整體替換舊的。由於具有這樣的特性這種變數可以在併發環境下安全的使用。對於基礎設施的不可變性,最基本的就是指執行服務的伺服器在完成部署後,就不再進行更改。

在過去依賴傳統的高可靠性基礎設施的時代,服務的可靠性依賴於高可靠性的伺服器。然而,這些基礎設施具有很高的擁有成本,並且初始化,配置的成本也非常高(對於大中型機,甚至重啟都是一種奢侈的)。所以,在當時不可變基礎設施的設想是難以實現的,開發人員總是需要在伺服器上對執行環境做一下持續的更改,如:系統升級,配置修改,補丁等。在許多手動修改之後,伺服器的不同配置的重要性或必要性變得不清楚,因此更新或更改任何配置可能會產生意想不到的副作用(這就導致了 Martin Fowler所說的snowflake server “Phoenix Server”,2012)。

可變基礎設施通常會導致以下問題:

  1. 在災難發生的時候,難以重新構建服務。持續過多的手工操作,缺乏記錄,會導致很難由標準初始化後的伺服器來重新構建起等效的服務。

  2. 在服務執行過程中,持續的修改伺服器,就猶如程式中的可變變數的值發生變化而引入的狀態不一致的併發風險。這些對於伺服器的修改,同樣會引入中間狀態,從而導致不可預知的問題。

隨著虛擬化技術以及建立在這之上的雲端計算基礎設施的引入,極大的降低了獲取標準化基礎設施的成本。同時,容器技術的引入也讓我們可以方便地打包構建應用及其執行時的依賴環境,這樣我們就可以方便地構建不可變的、可版本化管理的服務(這裡包括了標準化例項、執行環境及應用服務)。

在構建雲原生時,要實現不變基礎設施,我們需要實踐以下幾點

  1. 使用雲端虛擬化基礎設施作為構建基礎

  2. 通過容器技術來打包及整體構建服務執行環境

  3. 實現容器映象的自動化構建及版本化管理

  4. 通過持續部署系統,進行自動化部署

 

關於雲端計算,你想要了解更多?複製下方連結至瀏覽器,發掘更多寶藏!

https://new.spotmaxtech.com/