基礎架構即程式碼
2016 年 3 月 1 日
基礎架構即程式碼是透過原始碼定義運算和網路基礎架構的方法,然後可以像處理任何軟體系統一樣處理它。此類程式碼可以保存在原始碼控制中,以允許稽核和 可複製建置、接受測試實務,以及 持續傳遞 的完整規範。這是一種在過去十年中用於處理不斷成長的 雲端運算 平台的方法,並將成為下一個處理運算基礎架構的主要方式。
我在 鐵器時代 長大,當時發布新的伺服器應用程式意味著尋找一些實體硬體來執行它,將該硬體設定為支援應用程式的需求,並將該應用程式部署到硬體上。取得該硬體通常很昂貴,而且也很冗長,通常需要幾個月的時間。但現在我們生活在雲端時代,啟動新的伺服器只需幾秒鐘,只需要網路連線和信用卡即可。這是一個動態基礎架構,其中使用軟體指令來建立伺服器(通常是虛擬機器,但可以安裝在裸機上)、提供它們,並將它們關閉,所有這些都不需要靠近螺絲起子。

實務
基礎架構即程式碼基於一些實務
- 使用定義檔案:所有設定都定義在可執行設定定義檔案中,例如 shell 指令碼、Ansible 範例手冊、Chef 食譜或 Puppet 清單。任何時候都不應有人登入伺服器並進行即時調整。任何此類修改都可能造成 雪花伺服器,因此只應在開發作為持久定義的程式碼時進行。這表示使用程式碼套用更新應該很快。幸運的是,電腦可以快速執行程式碼,讓它們能比任何人都快地提供數百台伺服器。
- 自我文件化的系統和流程:與人類以通常的人類可靠性程度執行文件中的指令不同,程式碼更精確且一致地執行。如有必要,可以從此程式碼產生其他人類可讀的文件。
- 版本化所有事項:將所有程式碼保留在原始碼控管中。這樣,每項組態和變更都會記錄下來以供稽核,而且你可以建立可重製建置來協助診斷問題。
- 持續測試系統和流程:測試讓電腦能夠快速找出基礎架構組態中的許多錯誤。與任何現代軟體系統一樣,你可以為你的基礎架構程式碼設定部署管線,讓你能夠實作持續傳遞基礎架構變更。
- 小幅變更,而非批次變更:基礎架構更新越大,越有可能包含錯誤,而且越難偵測到該錯誤,特別是如果有多個錯誤相互影響。小幅更新較容易找出錯誤,而且也較容易還原。變更基礎架構時,頻繁變更可降低困難度。
- 持續維持服務可用性:系統越來越無法負擔升級或修正的停機時間。例如藍綠部署和平行變更等技術,可以讓小幅更新在不失去可用性的情況下進行
優點
所有這些讓我們能夠透過輕鬆啟動新伺服器,以及在伺服器被更新組態或負載減少時安全地移除伺服器,來利用動態基礎架構。建立新伺服器只是一個執行指令碼的案例,用來建立所需數量的伺服器執行個體。此方法很適合鳳凰伺服器和不可變伺服器
使用程式碼定義伺服器組態表示伺服器之間的一致性更高。透過手動配置,不同的人對不精確指令(更不用說錯誤)會有不同的詮釋,導致雪花效應,產生組態上微妙的差異,這通常會導致難以除錯的棘手故障。這種困難通常會因為監控不一致而惡化,而再次使用程式碼可確保監控也一致。
最重要的是,使用組態程式碼會讓變更更安全,讓應用程式和系統軟體的升級風險降低。可以更快速地找出並修正故障,而且最糟的情況下,變更可以還原到最後一個運作中的組態。
將你的基礎架構定義為版本控管的程式碼,有助於合規和稽核。組態的每個變更都可以記錄下來,而且不會受到有缺陷的記錄保存方式影響。
隨著您需要處理更多伺服器,這一切的重要性與日俱增,如果您要認真採用微服務,基礎架構即程式碼將成為必要的機能。基礎架構即程式碼技術可以有效擴充,以管理大型伺服器叢集,無論是在設定伺服器或指定它們應如何互動方面。
致謝
這篇文章是根據Kief Morris的寫作和多次對話所撰寫,他寫了關於這個主題的權威書籍。實務清單直接取自這本書
Ananthapadmanabhan Ranganathan、Danilo Sato、Ketan Padegaonkar、Piyush Srivastava、Rafael Gomes、Ranjan D Sakalley、Sina Jahangirizadeh 和 Srivatsa Katta 在我們的內部郵件清單上討論了這篇文章的草稿。