作為現代軟件工程的基礎實踐,基礎設施即代碼(Infrastructure as Code, IaC)是云原生、容器、微服務以及DevOps背后的底層邏輯 。應該說,以上所有這些技術或者實踐都是以基礎設施即代碼為基本模式的一種或者多種方法的集合 。基礎設施即代碼并不是一種特定的技術,而是一種解決問題的思路 。本文將從基礎設施即代碼的含義,原則和落地方法三個層面來幫助你理解為什么沒有使用IaC的DevOps系統(tǒng)都是耍流氓 。
什么是IaC基礎設施即代碼的目標是解決一個古老的問題:如何能夠安全、穩(wěn)定、快捷、高效得完成軟件交付過程 。注意這里的交付并不僅僅指將可部署的軟件部署到最終的運行環(huán)境,而是更寬泛的概念上的交付,也就是將軟件從一個看不見摸不到的想法或者創(chuàng)意,轉變成用戶可以操作并使用的一個系統(tǒng) 。這個過程涉及軟件創(chuàng)意的捕捉、設計、計劃、開發(fā)、測試、部署和發(fā)布的全過程,也包括軟件發(fā)布之后收集用戶反饋重復啟動以上過程的迭代 。這個迭代在軟件的整個生命周期里面會一直重復下去,直到這個軟件不再有人使用,壽終正寢 。

文章插圖
軟件生命周期中的這個持續(xù)的迭代過程構成DevOps反饋環(huán)路的概念,在這個反饋環(huán)路的左右兩端分別是Dev和Ops,而代碼和基礎設施正是Dev和Ops最重要的工件(Artifact),Dev維護代碼,Ops維護基礎設施 。傳統(tǒng)意義上,代碼和基礎設施是有明確的界限的,一般來說:代碼特指應用代碼,而基礎設施則是除了應用以外(或者以下)的所有“基礎”組件 。
在云計算技術出現以前,硬件被普遍認為是一旦創(chuàng)建就無法改變的,就好像你購買一臺電腦,如果希望更換其中的CPU,內部,磁盤以及網卡,那么都必須重新購買相應的組件并重新組裝 。云計算將計算資源(電腦)解偶成了可以隨意組合的計算、存儲和網絡三種資源類型,允許用戶根據需要自助的進行組合 。其底層實現機制是將硬件軟件化,比如:對象存儲技術和軟件定義網絡(SDN)就是云計算的基礎技術 。硬件被軟件化之后的結果就是我們可以通過配置來變更硬件的能力 。這其實就是基礎設施即代碼的最基礎的含義 。

文章插圖
但是對于用戶而言,其實并不關心所使用的軟件到底運行在什么硬件,什么云上面 。比如:對于用戶的社交需求來說,微信就是社交需求的基礎設施;對于需要編寫文檔的用戶來說,WORD就是他的基礎設施 。相對于硬件,這其實是基礎設施的另外一個極端含義,也就是:任何支撐用戶完成某種操作的支撐能力,都可以成為用戶這一類別操作的基礎設施 。
從這個極端含義的角度來說,以上環(huán)境堆棧中的任何一層都可能成為上層的基礎設施 。為了能夠為上層提供類似云計算的自助化能力,都需要提供可配置性 。為了滿足這種可配置性的需要,IT行業(yè)里面就出現了容器化技術、Kubernetes、Terraform、Azure Resource Manager等等基礎設施即代碼的實現方式 。其實這些技術解決的都是一個問題,也就是系統(tǒng)的可配置性問題 。
IaC的實現原則實現可配置性能力的方法很多,傳統(tǒng)運維的做法其實很簡單,就是通過腳本來自動化這個配置過程,讓原本繁瑣的配置過程自動化起來 。

文章插圖
自動化腳本的方式雖然能夠在一定程度上解決可配置問題,但是當系統(tǒng)變更頻繁程度到達一定量級的時候,維護自動化腳本的工作量將會抵消自動化腳本所帶來的效率提升,這個時候運維團隊會發(fā)現采用人工處理的方式甚至比編寫和維護自動化腳本更加高效 。因此,在當今軟件迭代速度越來越快的背景下,自動化腳本逐漸無法滿足團隊應對快速變化的市場的需要 。我們需要一種能夠能夠允許團隊輕松適應快速變化的環(huán)境維護方式,基礎設施即代碼(Infrastructure as Code, IaC)就是在這樣的背景下誕生的 。實際上,說誕生并不準確,IaC其實是工程師們在遇到問題之后持續(xù)改進的結果 。
經驗總結擴展閱讀
- 空調使用3到5小時后要開窗通風嗎 三伏天吹空調開幾度最健康
- 讓自己獨立的句子
- 姚明有兒子了嗎
- 使用電熱水袋注意什么
- 鰱魚鬧窩怎么辦
- 高智商天才外貌特征
- Object Detection 手把手教你使用LabVIEW OpenCV dnn實現物體識別含源碼
- Docker 部署Kibana
- 蘋果手機如何清理內存
- ps怎么安裝到電腦上然后沒有找到
