En 400-6655-581
5
返回列表
> 資源中心 > 技術(shù)干貨 | 淺談DevOps實(shí)踐

技術(shù)干貨 | 淺談DevOps實(shí)踐

2020-01-07瀏覽次數(shù):595

什么是DevOps?


隨著微服務(wù)及容器化技術(shù)的普及至大眾視線后DevOps常被提及,關(guān)于DevOps似乎并沒有一個(gè)標(biāo)準(zhǔn)的定義,如果說從基于目標(biāo)導(dǎo)向去給它做一個(gè)定義,DevOps是一套實(shí)踐方法,即在保證高質(zhì)量的前提下,縮短系統(tǒng)由變更、提交、部署更新到生產(chǎn)環(huán)境的時(shí)間,DevOps的核心由此可見體現(xiàn)在“保證高質(zhì)量”, “縮短時(shí)間”,“部署”。



如上圖,傳統(tǒng)開發(fā)和運(yùn)維之間存在一堵墻,開發(fā)人員想改變而運(yùn)維人員想要穩(wěn)定。另外,傳統(tǒng)開發(fā)工具與運(yùn)維工具也存在一堵墻,并沒有打通成為一條工具鏈。


從字面上來理解DevOps ,Dev(開發(fā)人員)+Ops(運(yùn)維人員),DevOps 強(qiáng)調(diào)的是高效組織團(tuán)隊(duì)之間如何通過自動(dòng)化的工具協(xié)作和溝通來完成軟件的生命周期管理,從而更快、更頻繁地交付更穩(wěn)定的軟件。


軟件開發(fā)演變:


緩慢而繁瑣的瀑布模型演變成敏捷,開發(fā)團(tuán)隊(duì)在短時(shí)間內(nèi)完成軟件開發(fā),持續(xù)時(shí)間甚至不超過兩周。如此短的發(fā)布周期幫助開發(fā)團(tuán)隊(duì)處理客戶反饋,并將其與bug修復(fù)一起合并到下一個(gè)版本中。


雖然這種敏捷的SCRUM(迭代式增量軟件開發(fā))方法為開發(fā)帶來了敏捷性,但它在運(yùn)維方面卻失去了敏捷實(shí)踐的速度。開發(fā)人員和運(yùn)維工程師之間缺乏協(xié)作仍然會(huì)減慢開發(fā)過程和發(fā)布。DevOps就是基于對(duì)更好的協(xié)作和更快的交付的需求而產(chǎn)生的。



為什么DevOps沒有迅速走紅?


從2009年提出DevOps的概念,時(shí)至今日已經(jīng)有十余個(gè)年頭,在此之前DevOps為什么沒有迅速走紅,總結(jié)主要原因?yàn)橐韵聨c(diǎn):


● 之前的云計(jì)算還屬于小眾產(chǎn)品,虛擬化、虛擬機(jī)還是重量級(jí)的IT基礎(chǔ)設(shè)施。

● 容器相關(guān)技術(shù)(Docker為代表)沒有橫空出世,導(dǎo)致DevOps無法迅速走紅。

● Micro Service即微服務(wù)尚未廣泛的推廣使用。


DevOps開始深入人心,和云計(jì)算、容器/Docker、微服務(wù)、敏捷等相關(guān)概念和實(shí)施的發(fā)展離不開,互聯(lián)網(wǎng)迅猛的發(fā)展,需要更快的業(yè)務(wù)試錯(cuò)與業(yè)務(wù)創(chuàng)新,讓軟件的生產(chǎn)、交付、獲取、升級(jí)變得自動(dòng),DevOps在傳統(tǒng)企業(yè)也開始備受關(guān)注開始走紅。



關(guān)于DevOps的一些誤區(qū)


對(duì)DevOps的狹義理解:


簡(jiǎn)單說DevOps是提倡開發(fā)和IT運(yùn)維之間的高度協(xié)同,在完成高頻率部署的同時(shí),提高生產(chǎn)環(huán)境的可靠性、穩(wěn)定性、彈性和安全性。


DevOps不僅需要打通開發(fā)和運(yùn)維之間的隔閡墻,更需要從應(yīng)用的全生命周期考慮,實(shí)現(xiàn)全生命周期的工具全鏈路打通與自動(dòng)化、跨團(tuán)隊(duì)的線上協(xié)作能力。



縱向集成,打通應(yīng)用全生命周期(需求、設(shè)計(jì)、開發(fā)、編譯、構(gòu)建、測(cè)試、打包、發(fā)布、配置、監(jiān)控等)的工具集成,最終實(shí)現(xiàn)自助化。


例如:項(xiàng)目組的開發(fā)人員可以通過DevOps的平臺(tái)上,自主申請(qǐng)開通需要的各種服務(wù),比如開通開發(fā)環(huán)境、代碼庫等。


橫向集成,打通架構(gòu)、開發(fā)、管理、運(yùn)維等部門墻。橫向集成中DevOps強(qiáng)調(diào)的重點(diǎn)是跨團(tuán)隊(duì)的線上協(xié)作。


例如:傳統(tǒng)的系統(tǒng)上線部署方式,通過一個(gè)發(fā)布手順文檔,上百頁都有可能,但在DevOps的平臺(tái)下,應(yīng)該是通過標(biāo)準(zhǔn)運(yùn)行環(huán)境的選擇、環(huán)境配置的設(shè)置、部署流程的編排,實(shí)現(xiàn)數(shù)字化的部署手冊(cè),這樣的手冊(cè),人機(jī)都能夠執(zhí)行,并且過程可以被追蹤和審計(jì)。


我們使用DevOps時(shí),大致有這幾種誤區(qū)認(rèn)知:


● 企業(yè)沒有使用云相關(guān)產(chǎn)品(IaaS、PaaS),無法開展DevOps;


● 微服務(wù)架構(gòu)開發(fā)的應(yīng)用適合DevOps,傳統(tǒng)SOA應(yīng)用不適合;DevOps的實(shí)施和應(yīng)用架構(gòu)無關(guān),無論是微服務(wù)架構(gòu),還是SOA類型應(yīng)用,都可以開展DevOps工作;


● 自動(dòng)化工具的運(yùn)用等同于DevOps的成功;采用自動(dòng)化工具本身不是DevOps,只有將這些工具與持續(xù)集成、持續(xù)交付、持續(xù)的反饋與優(yōu)化進(jìn)行端到端的整合時(shí),這些工具才成為DevOps的一部分;


● DevOps不僅僅是自動(dòng)化。自動(dòng)化是DevOps非常重要的一部分,但不是唯一的部分,實(shí)施DevOps需要從敏捷、持續(xù)、協(xié)作、系統(tǒng)性、自動(dòng)化多個(gè)維度進(jìn)行建設(shè)與改進(jìn)。



DevOps架構(gòu)支撐


邏輯架構(gòu)整個(gè)DevOps平臺(tái)分為三層:

設(shè)施層:包括IaaS,CaaS,一般是基于OpenStack和Kubernetes、Docker;


服務(wù)層:服務(wù)管理與調(diào)度的基礎(chǔ)能力,如注冊(cè)中心,編排,以及企業(yè)級(jí)或互聯(lián)網(wǎng)式的云服務(wù);


DevOps層:更多的是工作流程需求、設(shè)計(jì)、開發(fā)、測(cè)試、發(fā)布等,看板等;



DevOps在企業(yè)的實(shí)踐


實(shí)施DevOps的核心目標(biāo)是加速企業(yè)IT精益運(yùn)行,提升IT的生產(chǎn)效率,加速部門、企業(yè)的業(yè)務(wù)創(chuàng)新能力。實(shí)施DevOps需要從組織、技術(shù)、流程三個(gè)維度進(jìn)行。



可以梳理出目前團(tuán)隊(duì)中欠缺但又容易改進(jìn)的點(diǎn),逐步將更多的實(shí)踐活動(dòng)納入團(tuán)隊(duì)當(dāng)中。團(tuán)隊(duì)實(shí)施DevOps的目的在于,將重復(fù)、價(jià)值低的事情交由DevOps平臺(tái)實(shí)現(xiàn)。在傳統(tǒng)企業(yè)中,技術(shù)方面的實(shí)踐最容易在團(tuán)隊(duì)中實(shí)現(xiàn)、流程次之、組織的優(yōu)化與變革最為艱難。



1、技術(shù)方面

● 集成工具鏈:

打通應(yīng)用開發(fā)工具鏈:需求、項(xiàng)目、代碼、構(gòu)建、測(cè)試、打包、發(fā)布、配置、監(jiān)控;


● 基礎(chǔ)設(shè)施即編碼:

將基礎(chǔ)環(huán)境服務(wù)化、可編程化,基礎(chǔ)設(shè)施讓項(xiàng)目團(tuán)隊(duì)可以自助獲?。蛔尰A(chǔ)設(shè)施從物理機(jī)、虛擬機(jī)、走向容器;


● 一鍵編譯、測(cè)試、部署:

開發(fā)人員可以從代碼開始,一鍵獲得可訪問的環(huán)境,根據(jù)需要可以推送開發(fā)、測(cè)試、預(yù)發(fā)、生產(chǎn)環(huán)境;


● ChatOps:

項(xiàng)目團(tuán)隊(duì)成員將溝通、工具和過程整合在一起。將工具植入對(duì)話中,保障團(tuán)隊(duì)能夠自動(dòng)執(zhí)行任務(wù)與協(xié)作。推薦最近比較流行的hubot。



2、 流程方面

● 看板:

在DevOps中看板不僅是任務(wù)協(xié)調(diào)溝通的機(jī)制;也可作為管制平臺(tái),量化組織生產(chǎn)能力的工具。


● MVP:

采用MVP(Minimum Viable Product最小可行產(chǎn)品)原則,最短時(shí)間內(nèi)快速交付產(chǎn)品原型,然后通過測(cè)試并收集用戶的反饋,快速迭代,不斷修正產(chǎn)品,適應(yīng)客戶的需求。


● 發(fā)布:

建立持續(xù)發(fā)布機(jī)制,形成自動(dòng)化、自助化,支持常見的灰度發(fā)布、金絲雀、藍(lán)綠、回滾、A/B測(cè)試等;


● 軟件度量:

通過軟件度量(包括過程度量、質(zhì)量度量、用戶度量、成本度量),推算出組織的各種有效指標(biāo);可以掌控組織的生產(chǎn)力水平,也可通過度量數(shù)據(jù),反向優(yōu)化組織瓶頸點(diǎn);


● 一切皆代碼:

文檔(用戶場(chǎng)景、功能特性等)、配置(應(yīng)用配置、環(huán)境配置、腳本等)、環(huán)境(基礎(chǔ)設(shè)施、中間件環(huán)境等)、發(fā)布包需要統(tǒng)一看待成代碼,納入版本管理,提供全視角的鏈路追蹤。

例如:每個(gè)發(fā)布的版本,可以追溯其對(duì)應(yīng)的配置,代碼、文檔,發(fā)布的功能點(diǎn)。


組織、技術(shù)、流程三個(gè)維度中,技術(shù)、流程可以通過平臺(tái)或者工具進(jìn)行最佳實(shí)踐的固化。



平臺(tái)建設(shè)第一步,梳理出DevOps的整體模型。從角色、規(guī)劃設(shè)計(jì)、開發(fā)交付、運(yùn)營(yíng)反饋四個(gè)維度進(jìn)行梳理。以產(chǎn)品為核心,將代碼、配置、環(huán)境進(jìn)行嚴(yán)格分離,同時(shí)覆蓋產(chǎn)品全生命周期。


另外企業(yè)在落地DevOps也存在如下困境:

1)涉及的部門多(開發(fā)中心、質(zhì)量控制部門、生產(chǎn)運(yùn)行部門);

2) 流程改造復(fù)雜;

3) 責(zé)任邊界需要重新劃分;

4) 自動(dòng)化是核心問題。


實(shí)施DevOps工具選擇


關(guān)于DevOps工具選擇,按照階段進(jìn)行拆分,將其分解到各階段分別是:規(guī)劃、構(gòu)建、持續(xù)集成、部署、運(yùn)營(yíng)以及持續(xù)反饋。



1) 規(guī)劃

視覺與設(shè)計(jì)方面達(dá)成協(xié)作,推薦使用的工具:Confluence, HipChat,JIRA Software。


2) 構(gòu)建

開發(fā)階段環(huán)境構(gòu)建,推薦使用的工具:Docker。

基礎(chǔ)設(shè)施自動(dòng)化,推薦使用的工具:Bamboo, Bitbucket, Chef,Docker, Puppet。


3) 持續(xù)集成

它是支撐新功能的代碼與當(dāng)下代碼集成的環(huán)節(jié)。軟件在持續(xù)性開發(fā),升級(jí)后的代碼必須持續(xù)性集成,并快速地與系統(tǒng)集成,實(shí)現(xiàn)用戶的各種需求變更。變更后的代碼,還應(yīng)當(dāng)保證執(zhí)行時(shí)環(huán)境中沒有異常。推薦使用的工具:Bamboo, HipChat。


自動(dòng)化測(cè)試,對(duì)于準(zhǔn)備和支持開發(fā)構(gòu)建工作,自動(dòng)化測(cè)試的操作過程透明化以及徹底性是非常重要的。推薦使用的工具:Bamboo, Bitbucket,Capture for JIRA。


4) 部署

發(fā)布儀表盤,在一個(gè)地方對(duì)于你想尋找的關(guān)于分支,構(gòu)建,拉請(qǐng)求和部署警告等信息提供高可視化。推薦使用的工具:JIRA Software。

自動(dòng)化部署,推薦使用的工具:AWS, Bamboo, HipChat,Puppet。


5) 運(yùn)營(yíng)

監(jiān)控,實(shí)施自動(dòng)化監(jiān)控針對(duì)服務(wù)器監(jiān)控和應(yīng)用程序性能監(jiān)控,推薦使用的工具:BigPanda,HipChat,HostedGraphite,Nagios,NewRelic,PagerDuty,Pingdom,Splunk。


溝通與集群,跨團(tuán)隊(duì)溝通是實(shí)現(xiàn)文化轉(zhuǎn)變的第一步,聊天工具可促進(jìn)它的實(shí)時(shí)性。推薦使用的工具:BigPanda,DataDog, HipChat,NewRelic, PagerDuty,StatusPage。


事件、變更和問題跟蹤,推薦使用的工具:JIRA Service Desk,JIRA Software


6) 持續(xù)反饋

通過用戶反饋創(chuàng)造更好的產(chǎn)品,推薦使用的工具:GetFeedback,HipChat,JIRA Service Desk,Pendo,Surveymonkey,HootSuite。



實(shí)施DevOps成熟度評(píng)判指標(biāo)


在實(shí)踐DevOps時(shí),可以從運(yùn)營(yíng)效率、IT服務(wù)水平、組織效能、客戶價(jià)值、經(jīng)營(yíng)業(yè)績(jī)五個(gè)維度進(jìn)行評(píng)判,持續(xù)優(yōu)化與改進(jìn)。




企業(yè)實(shí)施DevOps價(jià)值



1、從原先線下協(xié)作、溝通,統(tǒng)一到DevOps平臺(tái)上協(xié)作、溝通;可以隨時(shí)了解項(xiàng)目進(jìn)展全貌,利用平臺(tái)可以做到各種過程數(shù)據(jù)的實(shí)時(shí)收集;

2、 資源管理由原來專職人員,過渡到開發(fā)人員實(shí)現(xiàn)自助化服務(wù),可按需實(shí)現(xiàn)各類環(huán)境申請(qǐng)與開通,基礎(chǔ)設(shè)施即服務(wù)提供來技術(shù)的支撐;

3、由郵件文化到DevOps平臺(tái)統(tǒng)一溝通,同時(shí)DevOps打通多個(gè)工具鏈路端,任務(wù)分發(fā)、溝通、提醒可以實(shí)時(shí)推送。