? ? 最近我閱讀了很多有關(guān) DevOps 的文章埃篓,其中一些非常有趣雷恃,對(duì)于Devops的見解也是見仁見智疆股。在效率和質(zhì)量日益重要的今天,Devops已成為炙手可熱的話題倒槐,由于目前業(yè)內(nèi)對(duì)于Devops的理解眾說紛紜旬痹,且Devops還是一個(gè)比較抽象的概念體系。因此想做一個(gè)系列讨越,對(duì)于DevOps整個(gè)體系做一個(gè)詳細(xì)的分析两残。
? ? 本篇會(huì)從最簡(jiǎn)單的Devops的理論基礎(chǔ)開始帶領(lǐng)大家一起走進(jìn)Devops的世界。
誰應(yīng)該關(guān)心Devops : 如果你的工作與構(gòu)建軟件系統(tǒng)有關(guān)把跨,并且你所在的組織有意增加產(chǎn)品質(zhì)量和縮短新功能推向市場(chǎng)的時(shí)間人弓,那么,您就應(yīng)該要關(guān)注Devops着逐。
一.什么是Devops
DevOps崔赌,字面理解是Develop+Operation, 以及他們之前千絲萬縷的聯(lián)系耸别。
目前對(duì)于Devops的定義健芭,主流有4中觀念:
1. DevOps 是一種角色 : 當(dāng)Devops成為一種主流,很多人會(huì)傾向去找做"Devops"的人,并希望能提升自己組織的Devops能力秀姐,因此設(shè)置了一些稱之為"Devops工程師"的崗位和角色慈迈,主要有如下幾種,但是很多都不是一個(gè)完善的定義:
? ? ? 作為Dev的Ops(會(huì)開發(fā)技能的運(yùn)維工程師) :忽視了開發(fā)和運(yùn)維的專業(yè)性和差異性
? ? ? 作為Ops的Dev(會(huì)運(yùn)維技能的開發(fā)工程師) : (同上)
? ? ? 基礎(chǔ)設(shè)施開發(fā)工程師:基礎(chǔ)設(shè)施開發(fā)者(InfrastructureDeveloper)或者云計(jì)算工程師(CloudEngineer)
? ? ? 全棧工程師:DevOps 是一個(gè)團(tuán)隊(duì)屬性省有,而不是一個(gè)人屬性痒留,不能保證整個(gè)組織內(nèi)部全是全棧工程師,而且能處理所有事情蠢沿。
2. DevOps 是一組技術(shù)/實(shí)踐:提到Devops伸头,我們不可以避免的會(huì)提到工具的使用,Jenkins舷蟀,GitHub熊锭,Sonar....等等弧轧, 當(dāng)然,好的工具選擇以及組織結(jié)構(gòu)可以促進(jìn)工程師用更有效率碗殷,更優(yōu)雅的方式解決問題精绎。但是,僅僅是簡(jiǎn)單的工具組合锌妻,可能適得其反代乃。如果你不能有直觀的理解,可以想象下周星馳電影里"要你命3000"仿粹。下面列一些Devops高頻搜索的話題:
? ? ? 高頻部署: DevOps 絕不是為了提升部署頻率而犧牲了軟件質(zhì)量和業(yè)務(wù)價(jià)值搁吓,甚至是安全措施。換句話說吭历,DevOps 不是一種對(duì)質(zhì)量的平衡和妥協(xié)堕仔,它是一種全局改進(jìn)。全局的改進(jìn)就意味著以價(jià)值為最高原則所度量的相關(guān)指標(biāo)是不能有所下降的晌区。
? ? ? 持續(xù)交付:? DevOps 的核心實(shí)踐之一摩骨,因?yàn)槿绻銢]有實(shí)踐持續(xù)交付。那么根本不能稱之為DevOps朗若。
? ? ? 云計(jì)算/虛擬化技術(shù):共有云的高可用架構(gòu)設(shè)計(jì)以及其天然的IaaS/PaaS/SaaS層服務(wù)優(yōu)勢(shì)恼五,為Devops提供了強(qiáng)力的支撐。
? ? ? 基礎(chǔ)設(shè)施即代碼(AWS CloudFormation) : 基礎(chǔ)設(shè)施即代碼除了工具以外哭懈,更是一種Dev 和 Ops 之間相互溝通的媒介灾馒,能夠讓開發(fā)人員和運(yùn)維人員相互理解。所以遣总,基礎(chǔ)設(shè)施即代碼毫無疑問的是DevOps 的核心實(shí)踐之一睬罗。
? ? ? Docker : 更簡(jiǎn)單的解決了基礎(chǔ)設(shè)施即代碼和虛擬化在實(shí)踐中的問題,進(jìn)一步提升了自動(dòng)化能力以提升效率旭斥,并且對(duì)開發(fā)人員和運(yùn)維人員都十分友好容达。
? ? ? 自動(dòng)化運(yùn)維: 雖然 DevOps 里的一個(gè)重要特征是“自動(dòng)化”,但擁有自動(dòng)化運(yùn)維琉预,并不代表你就正在實(shí)踐DevOps董饰,很可能你僅僅提升了運(yùn)維部門的效率蒿褂,但并沒有從全局的角度提升開發(fā)和運(yùn)維之間的效率和端到端價(jià)值的流動(dòng)圆米。因此,僅僅有自動(dòng)化運(yùn)維啄栓,還不足以稱之為DevOps.
3. DevOps 是一種工作方式:比較貼近 DevOps 的目標(biāo)的定義娄帖,但是,片面的理解和機(jī)械的模仿都會(huì)給組織帶來不必要的資源浪費(fèi)或者損失昙楚,DevOps 的工作方式近速,有以下四個(gè)常見的理解:
? ? ? 用Dev的方法做Ops的事:Develop占主導(dǎo)地位,Operation仍然是一個(gè)雞肋位置
? ? ? 換了名字的Ops團(tuán)隊(duì):Operation占主導(dǎo)地位,出了問題全部拋給運(yùn)維團(tuán)隊(duì)
? ? ? 一個(gè)有Ops的Dev團(tuán)隊(duì):Ops和Dev組成一個(gè)團(tuán)隊(duì)削葱,但是如果Ops和Dev依舊各自為政奖亚,效率反而會(huì)大打折扣
? 一個(gè)Dev和Ops合作的團(tuán)隊(duì):
這就是 DevOps 所要達(dá)到的目標(biāo),它不是一個(gè)人的屬性析砸,而是一個(gè)團(tuán)隊(duì)的屬性昔字。它讓利益相關(guān)方坐在一起解決問題,而不是相互甩鍋首繁。然而作郭,由于"合作"的定義很簡(jiǎn)單,也很空泛弦疮,導(dǎo)致"合作"難以落地夹攒。DevOps 合作方式:
? ? ? 共同進(jìn)行架構(gòu)設(shè)計(jì)、共同進(jìn)行技術(shù)決策
? ? ? 持續(xù)交付流水線的建立
? ? ? 共同Pair 和 Review代碼和環(huán)境的配置
? ? ? 共同參與回顧會(huì)議
? ? ? 通過定期的內(nèi)部Session增加相互的理解
? ? ? 共同處理運(yùn)維的問題
從項(xiàng)目管理角度來說胁塞,就是Dev和Ops必須把彼此作為項(xiàng)目中的重要干系人咏尝,進(jìn)行任何的設(shè)計(jì)以及決策都要進(jìn)行溝通以及分享。
4. DevOps 是一種組織文化
文化包括組織過程資產(chǎn)和事業(yè)環(huán)境因素闲先,devops文化可能會(huì)跟目前您的組織文化有不一樣状土,但 卻是一種健康積極的因素:
? ? ? 相互信任
? ? ? 有效溝通
? ? ? 共同學(xué)習(xí)
? ? ? 分享/共擔(dān)
? ? ? 不要指責(zé)
總 結(jié) :總的來說,Devops 是一套實(shí)踐方法伺糠, 是一種工作方式蒙谓,是一套組織文化,在保證高質(zhì)量的前提下训桶,縮短系統(tǒng)變更從提交到部署至生產(chǎn)環(huán)境的時(shí)間累驮,以及在此過程中形成的良好的組織結(jié)構(gòu),溝通方式以及責(zé)任分擔(dān)模型 舵揭。
二.DevOps生命周期
了解了Devops的概念谤专,我們從實(shí)踐方法的角度一起來看下其生命周期:
Devops能力環(huán)
1.Plan : 需求階段,無論該需求來自客戶的新需求還是BUG修改午绳,這是觸發(fā)整個(gè)Devops流程的起點(diǎn)置侍,因此,作為Devops團(tuán)隊(duì)拦焚,開發(fā)團(tuán)隊(duì)需要把運(yùn)維團(tuán)隊(duì)作為首要干系人蜡坊,在進(jìn)行開發(fā)之前獲取他們的意見,比如運(yùn)維人員可能會(huì)對(duì)日志文件的類型和結(jié)構(gòu)提出建議赎败。
2. build:開發(fā)/構(gòu)建階段秕衙,該階段需要開發(fā)人員開發(fā)和運(yùn)維團(tuán)隊(duì)也要保持密切的溝通,對(duì)于開發(fā)進(jìn)度僵刮,單元測(cè)試的執(zhí)行等据忘,構(gòu)建工具的使用鹦牛,持續(xù)集成等運(yùn)維人員也需要有所了解
3. Test:測(cè)試階段,測(cè)試方案的規(guī)劃勇吊,使用什么測(cè)試工具曼追,是否使用自動(dòng)化測(cè)試等(有一種新的Taas服務(wù),將測(cè)試作為一種基礎(chǔ)服務(wù)提出)汉规,都需要跟開發(fā)和運(yùn)維溝通拉鹃。
4. Release : 該階段主要是對(duì)新版本的上線做的一系列準(zhǔn)備,例如release之前需要對(duì)該版本支持的平臺(tái)版本進(jìn)行確認(rèn)鲫忍,測(cè)試結(jié)果進(jìn)行確認(rèn)膏燕,安全檢查等報(bào)告進(jìn)行核實(shí),確保上線之前最后一套手續(xù)的完整性
5. Deploy : 部署階段悟民,部署工具的使用坝辫,部署方案的制定(A/B部署,金絲雀部署等)射亏,以及回滾方案的確認(rèn)近忙,確保在服務(wù)不受影響的情況下,順利將新版本發(fā)布智润。
6. Operation / Monitor: 運(yùn)維階段及舍,對(duì)于已經(jīng)上線的服務(wù)做一系列的性能監(jiān)控(CPU , Memory等),日志分析窟绷,執(zhí)行系統(tǒng)及軟件的例行審計(jì)锯玛,執(zhí)行備份,對(duì)操作系統(tǒng)的更新補(bǔ)丁升級(jí)兼蜈,優(yōu)化系統(tǒng)性能等攘残,并及時(shí)發(fā)現(xiàn)監(jiān)控過程中的問題,以及搜集來自于客戶的問題清單为狸,并將此作為下次版本更新的需求歼郭。
總 結(jié): Devops生命周期是一個(gè)環(huán)形結(jié)構(gòu),它不會(huì)以項(xiàng)目上線為終止辐棒,而是不斷會(huì)搜集來自于客戶的需求病曾,以對(duì)整個(gè)軟件服務(wù)做不斷的更新以及優(yōu)化,這種結(jié)構(gòu)就要求Devops整個(gè)流程的高效性漾根。
三. 一個(gè)使用DevOps的案例:
IMVU是一家娛樂社交公司泰涂,他的產(chǎn)品允許以一種3D阿凡達(dá)式的體驗(yàn)互相連接起來,IMVU使用了持續(xù)集成(CI):
1.開發(fā)人員盡早并且經(jīng)常提交
2.提交完成后會(huì)觸發(fā)測(cè)試套件的執(zhí)行
3.IMVU有上千個(gè)測(cè)試文件立叛,為了保持性能负敏,這些測(cè)試文件分布在30多臺(tái)機(jī)器上贡茅,所有case執(zhí)行完需要9分鐘
4.通過了所有測(cè)試之后秘蛇,會(huì)自動(dòng)實(shí)施部署其做,需要6分鐘
5.代碼移動(dòng)到集群中數(shù)百臺(tái)機(jī)器中,會(huì)使用金絲雀部署方案赁还,測(cè)試性能
6.取樣金絲雀結(jié)果妖泄,如果回歸數(shù)量很多,則會(huì)進(jìn)行回滾操作艘策,否則集群中其他機(jī)器就會(huì)啟用最新版本蹈胡。
這個(gè)case主要說明了目前主流的DevOps 的技術(shù)/實(shí)踐,下一章將會(huì)詳細(xì)從該角度講解當(dāng)前DevOps生命周期中各個(gè)階段使用的熱門技術(shù)/工具朋蔫。
曾經(jīng)有人跟我很自豪的聊他們的devops系統(tǒng)罚渐,他們的Devops系統(tǒng)每天會(huì)發(fā)布500多次新版本。我問他驯妄,真的有那么多新需求要開發(fā)荷并?有沒有分析下這500多次的發(fā)布有多少是因?yàn)樽詣?dòng)化測(cè)試不通過而產(chǎn)生的代碼修改,或者甚至連最基本的靜態(tài)代碼檢查都沒有通過青扔?
因此源织,運(yùn)維一套完善的Devops系統(tǒng),并不能成為可以忽略質(zhì)量的理由微猖,畢竟谈息,質(zhì)量,才是一個(gè)產(chǎn)品的一切~