煙臺(tái)做網(wǎng)站的企業(yè)怎樣建網(wǎng)站
DevOps簡介
- 1、DevOps的起源
- 2、什么是DevOps
- 3、DevOps的發(fā)展現(xiàn)狀
- 4、DevOps與虛擬化、容器
1、DevOps的起源
上個(gè)世紀(jì)40年代,世界上第一臺(tái)計(jì)算機(jī)誕生。計(jì)算機(jī)離不開程序(Program)驅(qū)動(dòng),而負(fù)責(zé)編寫程序的人,被稱為程序員(Programmer)。程序員在那時(shí)屬于稀缺人才
隨著科技的不斷發(fā)展,PC和Internet陸續(xù)問世,我們進(jìn)入了全民擁抱信息化的時(shí)代。越來越多的企業(yè)開始將計(jì)算機(jī)作為辦公工具,以提高生產(chǎn)力。而個(gè)人用戶也開始將計(jì)算機(jī)作為娛樂工具,用以改善生活品質(zhì)
于是,計(jì)算機(jī)程序,開始變成了一門生意。程序逐步演進(jìn)為軟件(Software),變成產(chǎn)品
在軟件行業(yè)里,程序員有了更專業(yè)的稱謂,叫做軟件開發(fā)工程師(Software Development Engineer),也就是我們常說的“碼農(nóng)”
我們知道,一個(gè)軟件從零開始到最終交付,大概包括以下幾個(gè)階段:規(guī)劃、編碼、構(gòu)建、測試、發(fā)布、部署和維護(hù)
最初,程序比較簡單,工作量不大,程序員一個(gè)人可以完成所有階段的工作。隨著軟件產(chǎn)業(yè)的日益發(fā)展壯大,軟件的規(guī)模也在逐漸變得龐大。軟件的復(fù)雜度不斷攀升。一個(gè)人已經(jīng)Hold不住了,就開始出現(xiàn)了精細(xì)化分工
碼農(nóng)的隊(duì)伍開始擴(kuò)大,工種增加。除了軟件開發(fā)工程師之外,又有了軟件測試工程師,軟件運(yùn)維工程師
分工之后,傳統(tǒng)的軟件開發(fā)流程是這樣的:
軟件開發(fā)人員花費(fèi)數(shù)周或數(shù)月編寫代碼,然后將代碼交給QA(質(zhì)量保障)團(tuán)隊(duì)進(jìn)行測試,然后再將最終的發(fā)布版交給運(yùn)維團(tuán)隊(duì)去布署。即三個(gè)階段:開發(fā)、測試、布署
早期所采用的軟件交付模型,稱之為“瀑布(Waterfall)模型”
瀑布模型,簡而言之,就是等一個(gè)階段所有工作完成之后,再進(jìn)入下一個(gè)階段。這種模型適合條件比較理想化(用戶需求明確、開發(fā)時(shí)間充足)的項(xiàng)目。大家按部就班,輪流執(zhí)行自己的職責(zé)即可
但是,項(xiàng)目不可能是單向運(yùn)作的。客戶也是有需求變動(dòng)的。產(chǎn)品也是會(huì)有問題的、需要改進(jìn)的
隨著時(shí)間推移,用戶對(duì)系統(tǒng)的需求不斷增加,與此同時(shí),用戶給的時(shí)間周期卻越來越少。在這種情況下,大家發(fā)現(xiàn),笨重遲緩的瀑布式開發(fā)已經(jīng)不合時(shí)宜了
于是,軟件開發(fā)團(tuán)隊(duì)引入了一個(gè)新的概念,那就是大名鼎鼎的“敏捷開發(fā)(Agile Development)”
敏捷開發(fā)是一種能應(yīng)對(duì)快速變化需求的軟件開發(fā)能力。簡單來說,就是把大項(xiàng)目變成小項(xiàng)目,把大時(shí)間點(diǎn)變成小時(shí)間點(diǎn)
有兩個(gè)詞經(jīng)常會(huì)伴隨著敏捷開發(fā)出現(xiàn),那就是CI和CD。CI是Continuous Integration(持續(xù)集成),而CD對(duì)應(yīng)多個(gè)英文:Continuous Delivery(持續(xù)交付)或Continuous Deployment(持續(xù)部署)
CI/CD介紹見文章:傳送門
美其名曰:“持續(xù)(Continuous)”,其實(shí)就是“加速——反復(fù)——加速——反復(fù)……”
敏捷開發(fā)大幅提高了開發(fā)團(tuán)隊(duì)的工作效率,讓版本的更新速度變得更快
很多人可能會(huì)覺得:更新版本的速度快了,風(fēng)險(xiǎn)不是更大了嗎?其實(shí),事實(shí)并非如此
敏捷開發(fā)可以幫助更快地發(fā)現(xiàn)問題,產(chǎn)品被更快地交付到用戶手中,團(tuán)隊(duì)可以更快地得到用戶的反饋,從而進(jìn)行更快地響應(yīng)。而且,DevOps小步快跑的形式帶來的版本變化是比較小的,風(fēng)險(xiǎn)會(huì)更小。即使出現(xiàn)問題,修復(fù)起來也會(huì)相對(duì)容易一些
雖然敏捷開發(fā)大幅提升了軟件開發(fā)的效率和版本迭代速度,但是它的效果僅限于開發(fā)環(huán)節(jié)。研發(fā)們發(fā)現(xiàn),運(yùn)維那邊,依舊是鐵板一塊,成為了新的瓶頸
運(yùn)維工程師,和開發(fā)工程師有著完全不同的思維邏輯。運(yùn)維團(tuán)隊(duì)的座右銘,很簡單,就是“穩(wěn)定壓倒一切”。運(yùn)維的核心訴求,就是不出問題
什么情況下最容易出問題?發(fā)生改變的時(shí)候最容易出問題。所以說,運(yùn)維非常排斥“改變”。于是乎,矛盾就在兩者之間集中爆發(fā)了
這個(gè)時(shí)候,DevOps就隆重登場了
2、什么是DevOps
DevOps,其實(shí)就是Development和Operations兩個(gè)詞的組合。維基百科詞條定義是這樣的:DevOps是一組過程、方法與系統(tǒng)的統(tǒng)稱,用于促進(jìn)開發(fā)、技術(shù)運(yùn)營和質(zhì)量保障(QA)部門之間的溝通、協(xié)作與整合
這個(gè)定義稍微有點(diǎn)抽象,但是并不難理解。反正它不是一個(gè)特定軟件、工具或平臺(tái)的名字
從目標(biāo)來看,DevOps就是讓開發(fā)人員和運(yùn)維人員更好地溝通合作,通過自動(dòng)化流程來使得軟件整體過程更加快捷和可靠
很多人可能覺得,所謂DevOps,不就是Dev+Ops嘛,把兩個(gè)團(tuán)隊(duì)合并,將運(yùn)維劃歸開發(fā),不就完事了嘛?
注意,這個(gè)觀點(diǎn)是不對(duì)的。這也是DevOps這些年一直難以落地的主要原因
想要將DevOps真正落地,首先第一點(diǎn),是思維轉(zhuǎn)變,也就是“洗腦”。DevOps并不僅僅是組織架構(gòu)變革,更是企業(yè)文化和思想觀念的變革。如果不能改變觀念,即使將員工放在一起,也不會(huì)產(chǎn)生火花
除了“洗腦”之外,就是根據(jù)DevOps思想重新梳理全流程的規(guī)范和標(biāo)準(zhǔn)
在DevOps的流程下,運(yùn)維人員會(huì)在項(xiàng)目開發(fā)期間就介入到開發(fā)過程中,了解開發(fā)人員使用的系統(tǒng)架構(gòu)和技術(shù)路線,從而制定適當(dāng)?shù)倪\(yùn)維方案。而開發(fā)人員也會(huì)在運(yùn)維的初期參與到系統(tǒng)部署中,并提供系統(tǒng)部署的優(yōu)化建議
DevOps的實(shí)施,促進(jìn)了開發(fā)和運(yùn)維人員的溝通,增進(jìn)了彼此的理(感)解(情)
在思維和流程改變的同時(shí),想要充分落地DevOps,當(dāng)然離不開軟件和平臺(tái)的支持
技術(shù)(工具和平臺(tái))是最容易實(shí)現(xiàn)的,流程次之,思維轉(zhuǎn)變反而是最困難的。換言之,DevOps考驗(yàn)的不僅是一家企業(yè)的技術(shù),更是管理水平和企業(yè)文化
對(duì)比前面所說的瀑布式開發(fā)和敏捷開發(fā),我們可以明顯看出,DevOps貫穿了軟件全生命周期,而不僅限于開發(fā)階段
下面這張圖,更明顯地說明了DevOps所處的位置,還有它的價(jià)值:
3、DevOps的發(fā)展現(xiàn)狀
DevOps這個(gè)詞來源于2009年在比利時(shí)根特市舉辦的首屆DevOpsDays大會(huì),為了在Twitter上更方便的傳播,由DevOpsDays縮寫為DevOps
目前,DevOps處于高速增長的階段。尤其是在大企業(yè)中,DevOps受到了廣泛的歡迎。如今,DevOps幾乎已經(jīng)成為了軟件工程的代名詞
4、DevOps與虛擬化、容器
近幾年,云計(jì)算技術(shù)突飛猛進(jìn),大家應(yīng)該對(duì)虛擬化、容器、微服務(wù)這些概念并不陌生。當(dāng)我們提到這些概念的時(shí)候,也會(huì)偶爾提及DevOps
它們之間有什么關(guān)系呢?
其實(shí)很簡單。設(shè)想一下,如果要對(duì)一項(xiàng)工作進(jìn)行精細(xì)化分工,我們是對(duì)一個(gè)大鐵塊進(jìn)行加工方便?還是拆成小塊進(jìn)行加工更加方便?結(jié)果是顯而易見的
所謂“微服務(wù)”,就是將原來黑盒化的一個(gè)整體產(chǎn)品進(jìn)行拆分(解耦),從一個(gè)提供多種服務(wù)的整體,拆成各自提供不同服務(wù)的多個(gè)個(gè)體
微服務(wù)架構(gòu)下,不同的工程師可以對(duì)各自負(fù)責(zé)的模塊進(jìn)行全流程處理,例如開發(fā)、測試、部署、迭代
而虛擬化,其實(shí)就是一種敏捷的云計(jì)算服務(wù)。它從硬件上,將一個(gè)系統(tǒng)“劃分”為多個(gè)系統(tǒng),系統(tǒng)之間相互隔離,為微服務(wù)提供便利
容器就更徹底了,不是劃分為不同的操作系統(tǒng),而是在操作系統(tǒng)上劃分為不同的“運(yùn)行環(huán)境”(Container),占用資源更少,部署速度更快
虛擬化和容器為DevOps提供了很好的前提條件。開發(fā)環(huán)境和部署環(huán)境都可以更好地隔離,減小了相互之間的影響
參考文章:https://zhuanlan.zhihu.com/p/91371659