
最近跟一個資深的運維工程師、AWS 專家老朱(人稱叔),聊到了 DevOps 這個話題。
到底什么才是 DevOps?過去啟動項目,10人規(guī)模左右的研發(fā)團隊,總會配置一個 ”DevOps 的角色“,來負(fù)責(zé)搭建基礎(chǔ)設(shè)施、CI 環(huán)境,負(fù)責(zé)產(chǎn)品包的部署和上線的一些工作。所以 DevOps 是一種新的角色么?是不是在以前的 Ops(運維工程師)的基礎(chǔ)上,掌握了更多自動化運維的工具,就可以稱為 DevOps 了?
老朱搖搖頭,不對,DevOps 并不是一種角色。
“是更加自動化么?”
“與其說是自動化,倒不如說是軟件交付的新的方式,或者說是一種文化。自動化就是自動化,以前運維工作也會自動化,并不是從現(xiàn)在開始的?!?/p>
隨即在網(wǎng)上搜索了 DevOps 的定義,AWS 主站上的定義是我比較滿意的一個:
DevOps 集文化理念、實踐和工具于一身,可以提高組織高速交付應(yīng)用程序和服務(wù)的能力,與使用傳統(tǒng)軟件開發(fā)和基礎(chǔ)設(shè)施管理流程相比,能夠幫助組織更快地發(fā)展和改進產(chǎn)品。這種速度使組織能夠更好地服務(wù)其客戶,并在市場上更高效地參與競爭。
DevOps 是一種高速交付軟件的一種方式。那么接著下一個問題就來了:高速交付的方法千千萬,為什么會稱之為 DevOps 呢?這個概念如何發(fā)展到現(xiàn)在的樣子的?
在舊有的觀念里面,Dev 和 Ops 是嚴(yán)格分離的,一般都?xì)w屬于不同的部門,研發(fā)部和運維部,在工作中交集不多。一般只有需要產(chǎn)品上線或升級的時候,開發(fā)部門才會拿著開完測試完的產(chǎn)品包,交到運維部門運維工程師的手中(可能是個 U盤...),然后由運維工程師部署上線。在這種組織里,Dev 只負(fù)責(zé)開發(fā) Feature,開發(fā)的越多越好,越快越好;而 Ops 負(fù)責(zé)運行維護開發(fā)好的軟件,他們并不希望經(jīng)常會有上線或者變更,所以越少越好,因為對運維工程師來說,每次的更新都是一次風(fēng)險。
隨著外界商業(yè)環(huán)境的加速變化,以及敏捷、云、容器化、持續(xù)交付的發(fā)展,從代碼的提交,到代碼上到真實產(chǎn)品環(huán)境的時間越來越短,開發(fā)和運維的工作也產(chǎn)生了越來越多的交集。一群野蠻人(一部分開發(fā),以及一群想要改革經(jīng)常背鍋現(xiàn)狀的 Ops),帶著先進的流程和工具,沖進了運維團隊,勢必要進行一場轟轟烈烈的改造,建立一條自動化的管道,將程序員筆記本里的代碼,像輸血一樣,運送到正在運行的產(chǎn)品中,并可以監(jiān)控帶來的變化和影響,及時獲取各個環(huán)節(jié)的反饋,快速調(diào)整。DevOps 就是在這樣的背景下,應(yīng)運而生的理念。它試圖融合開發(fā)和運維,打破部門的壁壘(避免互相甩鍋),讓大家能像一個團隊一樣來工作。

雖然開發(fā)和 Ops 沙文主義會告訴你,沒有 DevOps 工程師這種角色。但很多公司都在招聘 DevOps,甚至在組建 DevOps 部門。 由于市場的存在,大家總需要一個名詞來代指擁有這些技能的工程師,與傳統(tǒng)的 Ops(運維工程師)區(qū)分開,所以大家還是習(xí)慣于使用 DevOps 來代指一個角色。這些工程師,習(xí)慣于與 Linux 打交道,與很多使用高級語言的應(yīng)用開發(fā)不同,他們更習(xí)慣于使用腳本語言,比如 python、ruby,可以更靈活的進行自動化腳本片段的編寫,以及往往會對某種云有深入的耕耘,比如 AWS,或者 Azure 等。
在這些工程師的工具箱里,也有很多趁手的工具可以用,后面會分章節(jié),介紹下面這些工具和工具背后的理念。
- 配置管理 - Terraform
- 版本管理 - Git+Gitlab
- 包管理 - Docker
- 持續(xù)部署 - Jenkins
- 運行時環(huán)境管理 - AWS ECS
- 監(jiān)控 - ELK + Grafana
未完待續(xù)