希望這是我最后一次談DevOps!
原創(chuàng)【51CTO.com原創(chuàng)稿件】什么是 DevOps?“DevOps”是“開(kāi)發(fā)”development 和“運(yùn)維”operations 兩者的組合。
DevOps 可看作一種文化風(fēng)向標(biāo),在該文化引領(lǐng)下,能促進(jìn)項(xiàng)目團(tuán)隊(duì)中開(kāi)發(fā),測(cè)試,運(yùn)維,產(chǎn)品等成員間的無(wú)縫協(xié)作。
它通過(guò)有效的自動(dòng)化及可重復(fù)的方式更快地將代碼部署到生產(chǎn)環(huán)境中,提高企業(yè)交付應(yīng)用程序或服務(wù)的速度,從而更好地為客戶提供高質(zhì)量的產(chǎn)品,并在市場(chǎng)上獲取更強(qiáng)有力地競(jìng)爭(zhēng)優(yōu)勢(shì)。
因此,DevOps 可視為企業(yè)項(xiàng)目團(tuán)隊(duì)中一條持續(xù)優(yōu)化,密切配合,協(xié)同運(yùn)轉(zhuǎn)的“隱形生產(chǎn)鏈”。
為什么需要 DevOps?
在那些沒(méi)有 DevOps 實(shí)踐的日子里,項(xiàng)目團(tuán)隊(duì)都經(jīng)歷了什么:
- 項(xiàng)目?jī)?nèi)部開(kāi)發(fā)團(tuán)隊(duì)和運(yùn)維團(tuán)隊(duì)是完全獨(dú)立的。
- 當(dāng)開(kāi)發(fā)團(tuán)隊(duì)針對(duì)需求進(jìn)行代碼設(shè)計(jì)/構(gòu)建后,測(cè)試任務(wù)和部署任務(wù)也是完全孤立彼此的活動(dòng),往往導(dǎo)致整體項(xiàng)目實(shí)際周期比預(yù)期構(gòu)建耗時(shí)更長(zhǎng)。
- 團(tuán)隊(duì)成員各自花費(fèi)大量時(shí)間用于設(shè)計(jì),開(kāi)發(fā),測(cè)試,部署,而非匯聚于整體項(xiàng)目構(gòu)建本身(即,分而不合)。
- 手動(dòng)部署代碼往往不可避免出現(xiàn)人為錯(cuò)誤,即便通過(guò) Jenkins 持續(xù)集成,這僅僅是構(gòu)建中的一部分而已。
- 產(chǎn)品,開(kāi)發(fā),測(cè)試,運(yùn)維團(tuán)隊(duì)有各自的時(shí)間軸,并不同步,將導(dǎo)致累計(jì)延遲的情況。
持續(xù)提升團(tuán)隊(duì)產(chǎn)品的交付率,在確保產(chǎn)品質(zhì)量的前提下縮短交付時(shí)間,是每個(gè)項(xiàng)目團(tuán)隊(duì)共同的目標(biāo),然而理想與現(xiàn)實(shí)間總會(huì)橫著一道難以逾越的鴻溝。
全球知名研究機(jī)構(gòu) Forrester 曾指出:只有 17% 的團(tuán)隊(duì)能在足夠快地時(shí)間內(nèi)交付客戶所需產(chǎn)品。
在無(wú) DevOps 文化引入及實(shí)踐的情況下,從以上列出的 5 大痛點(diǎn)不難得出團(tuán)隊(duì)生產(chǎn)力低下,協(xié)同工作效率不盡如人意的原因所在。
DevOps 與傳統(tǒng) IT 的區(qū)別
為了清晰認(rèn)識(shí)到 DevOps 引入給項(xiàng)目運(yùn)作帶來(lái)的變化, 以下將結(jié)合一則場(chǎng)景對(duì)比“傳統(tǒng)研發(fā)模式” VS “DevOps”的相異之處。
假設(shè)當(dāng)前項(xiàng)目團(tuán)隊(duì)工作進(jìn)展如下:
“傳統(tǒng)研發(fā)模式” VS “DevOps”對(duì)比圖如下:
DevOps 的價(jià)值
在敏捷項(xiàng)目研發(fā)大規(guī)模盛行的當(dāng)下,DevOps 有助于敏捷團(tuán)隊(duì)更好地實(shí)行持續(xù)集成和持續(xù)交付,進(jìn)而幫助項(xiàng)目團(tuán)隊(duì)更快地將他們所研發(fā)的產(chǎn)品/系統(tǒng)/平臺(tái)投放市場(chǎng)。
此外 DevOps 的優(yōu)勢(shì)不僅局限于此,它還有其他值得關(guān)注的因素:
- 可預(yù)測(cè)性:DevOps 有效降低了新版本的故障率。
- 可重復(fù)性:DevOps 可將所有項(xiàng)目中的內(nèi)容進(jìn)行版本控制,便于隨時(shí)還原早期版本。
- 可維護(hù)性:在新版本崩潰或當(dāng)前系統(tǒng)不可用的情況下,通過(guò) DevOps 可輕松執(zhí)行恢復(fù)過(guò)程。
- 上市時(shí)間:DevOps 通過(guò)簡(jiǎn)化的軟件交付程序,大大縮短了產(chǎn)品上市時(shí)間(保守估計(jì)至少可縮短 50% 的時(shí)間),這搶占市場(chǎng)先機(jī)的數(shù)據(jù)對(duì)當(dāng)下的移動(dòng)應(yīng)用程序來(lái)說(shuō)絕對(duì)是一大亮點(diǎn)。
- 更高的質(zhì)量:DevOps 中的基礎(chǔ)設(shè)施建設(shè)有助于團(tuán)隊(duì)提高應(yīng)用程序開(kāi)發(fā)的質(zhì)量。
- 降低風(fēng)險(xiǎn):DevOps 將安全因素納入到軟件交付的生命周期中,這大大減少了整個(gè)生命周期中的缺陷。
- 將較大的代碼庫(kù)分成小段:DevOps 基于敏捷編程方法,將較大的代碼庫(kù)分解為較小的可管理模塊。
DevOps 生命周期
DevOps 在開(kāi)發(fā)和運(yùn)營(yíng)間構(gòu)建了一座深度集成橋梁,只有全面了解 DevOps 生命周期才能進(jìn)一步體會(huì)到持續(xù)集成持續(xù)部署(CI/CD)的實(shí)際意義。
以下羅列出 DevOps(CI/CD)生命周期中各階段的核心任務(wù):
①開(kāi)發(fā)(Development)
DevOps 實(shí)踐中會(huì)將整個(gè)軟件開(kāi)發(fā)過(guò)程分為若干個(gè)小的開(kāi)發(fā)周期,這有益于 DevOps 團(tuán)隊(duì)通過(guò)小規(guī)模迭代來(lái)加快軟件開(kāi)發(fā)和軟件交付的過(guò)程。
②測(cè)試(Testing)
QA 團(tuán)隊(duì)通過(guò)自動(dòng)化手段輔助測(cè)試,協(xié)助開(kāi)發(fā)人員識(shí)別和修復(fù)新代碼中的錯(cuò)誤。
③持續(xù)集成(Continues Integration)
在此階段,新增功能將集成進(jìn)之前的代碼中,進(jìn)行集成測(cè)試;言下之意,我們順理成章地得出:持續(xù)開(kāi)發(fā)只有通過(guò)持續(xù)集成和持續(xù)測(cè)試才能有效驗(yàn)證,從而確保能夠順利進(jìn)入下一階段的迭代。
④持續(xù)部署(Continues Deployment)
在 DevOps 中,除了強(qiáng)調(diào)持續(xù)集成(CI)外,部署過(guò)程也是持續(xù)進(jìn)行的,在持續(xù)部署(CD)過(guò)程中,必須確保代碼在任何時(shí)間所做的任何更改都不會(huì)影響到當(dāng)前網(wǎng)站/系統(tǒng)已上線的功能(尤其是那些高流量的網(wǎng)站)。
⑤監(jiān)控(Monitoring)
在此階段,運(yùn)維團(tuán)隊(duì)將密切關(guān)注系統(tǒng)/平臺(tái)中的錯(cuò)誤,Bug 等任何異常行為,實(shí)時(shí)反饋一切異常情況。
DevOps VS 敏捷
項(xiàng)目利益干系人和溝通鏈?zhǔn)?IT 流程中典型的核心要素,如果說(shuō)敏捷模式的引入是為了解決客戶方與研發(fā)團(tuán)隊(duì)溝通中的空白,那么 DevOps 的植入則填補(bǔ)了研發(fā)團(tuán)隊(duì)與 IT 運(yùn)維團(tuán)隊(duì)間的空白。
“敏捷” VS “DevOps”對(duì)比圖如下:
DevOps 原則
DevOps 有以下六大不可缺少的原則:
- 以客戶為中心:DevOps 團(tuán)隊(duì)必須采取以客戶為中心的原則,客戶才是產(chǎn)品和服務(wù)的投資者。
- 端到端的責(zé)任:DevOps 團(tuán)隊(duì)需要持續(xù)提供性能支持。
- 持續(xù)改進(jìn):DevOps 注重持續(xù)改進(jìn)以最大程度地減少資源浪費(fèi),不斷加快產(chǎn)品研發(fā)/服務(wù)提供的改進(jìn)速度。
- 自動(dòng)化一切:自動(dòng)化是 DevOps 流程的重要原則,不僅適用于軟件研發(fā),同樣適用于整個(gè)基礎(chǔ)架構(gòu)設(shè)施。
- 團(tuán)隊(duì)合作:DevOps 定義了設(shè)計(jì),開(kāi)發(fā),測(cè)試,運(yùn)維的角色,整個(gè)團(tuán)隊(duì)全面配合,協(xié)同工作。
- 監(jiān)視一切,測(cè)試一切:對(duì)于 DevOps 團(tuán)隊(duì)來(lái)說(shuō),擁有可靠的監(jiān)視和測(cè)試流程尤為重要。
DevOps 自動(dòng)化工具
DevOps 提倡將一切過(guò)程自動(dòng)化,并對(duì)其進(jìn)行配置,在大型 DevOps 團(tuán)隊(duì)中,維護(hù)大型 IT 基礎(chǔ)架構(gòu)所面臨的困難可以簡(jiǎn)單地分為以下六類:
- 基礎(chǔ)設(shè)施自動(dòng)化
- 配置管理
- 自動(dòng)化部署
- 性能管理
- 日志管理
- 監(jiān)控管理
基于以上六大類,DevOps 實(shí)踐中都有與之對(duì)應(yīng)的工具/服務(wù)來(lái)解決各自的難題,下面逐一為大家介紹。
①基礎(chǔ)設(shè)施自動(dòng)化
Amazon Web Services(AWS):亞馬遜公司旗下的云計(jì)算服務(wù)平臺(tái),幾乎能夠在云中運(yùn)行一切應(yīng)用程序,沒(méi)有前期硬件成本,易按需擴(kuò)展,為全世界用戶提供了一整套基礎(chǔ)設(shè)施和云解決方案,包括彈性計(jì)算、存儲(chǔ)、數(shù)據(jù)庫(kù)、應(yīng)用程序在內(nèi)的整套云計(jì)算服務(wù),有效幫助企業(yè)降低 IT 投入成本和維護(hù)成本,實(shí)現(xiàn)輕松在云上部署一切。
②配置管理
Chef:這是一個(gè)非常有用的 DevOps 工具,可實(shí)現(xiàn)速度提升,大規(guī)模擴(kuò)展以及保障整體一致性。
借助該工具,DevOps 團(tuán)隊(duì)可以避免在多臺(tái)服務(wù)器之間進(jìn)行更改的情況,只需要在一個(gè)地方進(jìn)行更改,相應(yīng)的變更將會(huì)自動(dòng)同步到其他服務(wù)器中。
③自動(dòng)化部署
Jenkins:可促進(jìn)持續(xù)集成和持續(xù)測(cè)試,在持續(xù)集成后定時(shí)觸發(fā)自動(dòng)化測(cè)試,這有助于更輕松地將變更有效集成于現(xiàn)有項(xiàng)目中。
④性能管理
App Dynamic:一款 DevOps 工具,可提供實(shí)時(shí)性能監(jiān)控,該工具收集的數(shù)據(jù)有助于開(kāi)發(fā)人員在問(wèn)題出現(xiàn)時(shí)及時(shí)調(diào)試。
⑤日志管理
Splunk:是一款非常優(yōu)秀的日志分析軟件,能處理常規(guī)的日志格式,比如 apache、squid、系統(tǒng)日志、mail.log 等。
它支持日志索引,交叉查詢,復(fù)雜的查詢語(yǔ)句等,并能通過(guò)非常直觀的方式展現(xiàn)出來(lái)。
日志可以通過(guò)文件方式傳送到 Splunk 服務(wù)器,也可通過(guò)網(wǎng)絡(luò)實(shí)時(shí)傳輸,或者是分布式日志收集方式,總之它支持多種日志收集方法,是一個(gè)匯總,存儲(chǔ)和分析所有日志的大本營(yíng)。
⑥監(jiān)控管理
Nagios:確?;A(chǔ)架構(gòu)和相關(guān)服務(wù)出現(xiàn)故障時(shí),相關(guān)人員能及時(shí)獲悉該消息,并能實(shí)時(shí)響應(yīng)并著手處理,Nagios 能夠協(xié)助 DevOps 團(tuán)隊(duì)發(fā)現(xiàn)并及時(shí)糾正產(chǎn)品/系統(tǒng)/服務(wù)中存在的問(wèn)題。
Nagios DevOps 監(jiān)控管理
亞馬遜 CTO Werner Vogels 曾提及在 DevOps 實(shí)踐中,他們的研究著眼于“有多少團(tuán)隊(duì)在運(yùn)行應(yīng)用程序/基于產(chǎn)品提供的服務(wù)”,無(wú)論是由研發(fā)團(tuán)隊(duì)、運(yùn)營(yíng)團(tuán)隊(duì)還是軟件發(fā)布成員或其他項(xiàng)目利益干系人,都有權(quán)定義監(jiān)控指標(biāo)。
基于上述提及的一系列用于 DevOps 實(shí)踐的自動(dòng)化輔助工具,我們以 Nagios 事件管理為例簡(jiǎn)單展示其在自動(dòng)化監(jiān)控管理中的優(yōu)勢(shì)。
Nagios 事件管理器是一款企業(yè)級(jí),基于 Web 的事件管理應(yīng)用程序,它允許團(tuán)隊(duì)或個(gè)人通過(guò)其強(qiáng)大的 Web 應(yīng)用程序更快地跟蹤和解決問(wèn)題,該應(yīng)用程序除了具備安全性和移動(dòng)性外,還擁有與第三方集成協(xié)作的功能。
Nagios 事件管理器中主要包的菜單有: 智能儀表盤(Dashboard)、事件(Incidents)、報(bào)告(Reports)、管理(Admin)和幫助菜單。
以下我們逐一描述事件管理器的基本用法,包括但不限于創(chuàng)建、管理和關(guān)閉事件、跟蹤統(tǒng)計(jì)數(shù)據(jù)等。
智能儀表盤(Dashboard)
如上圖:
事件摘要(Incident Summary):顯示當(dāng)前需要引起注意的事件數(shù)量,直接點(diǎn)擊鏈接,進(jìn)入到對(duì)應(yīng)的事件頁(yè)面。
最近操作(Recent Actions):顯示最近的 5 個(gè)操作??梢酝ㄟ^(guò)事件名(鏈接)來(lái)查看對(duì)應(yīng)事件上的操作。
在智能儀表盤(Dashboard)頁(yè)面中,可以通過(guò)單擊右上角的“new incident”創(chuàng)建一個(gè)新的事件。
事件(Incidents)
在事件(Incidents)頁(yè)面中,我們可以創(chuàng)建新的事件,管理已存在的事件。
①事件篩選:當(dāng)單擊 Incidents 菜單時(shí),默認(rèn)情況下會(huì)顯示所有 open Incidents。可以通過(guò)單擊頁(yè)面頂部選項(xiàng)卡(打開(kāi)“open”、關(guān)閉“closed”、已解決“resolved”、新建“new”或全部“all”)來(lái)篩選不同狀態(tài)的事件。
還可以通過(guò)單擊每列的標(biāo)題,按名稱“Title”、創(chuàng)建“Created”或更新日期“Last Updated”、事件類型“Type”、事件狀態(tài)“Status”和優(yōu)先級(jí)“Priority”對(duì)當(dāng)前事件列表進(jìn)行排序。
②事件管理:選擇想要處理的事件(復(fù)選框),單擊“Delete Selected”,可以批量刪除事件;單擊“Update Selected”,可以批量更改事件的優(yōu)先級(jí)、狀態(tài)或類型。
③創(chuàng)建新事件:?jiǎn)螕粲疑辖堑?ldquo;new incident”可以創(chuàng)建一個(gè)新的事件;填寫(xiě)必要的事件信息后,單擊頁(yè)面底部的“Save Incident”保存新建的事件。
④事件編輯:通過(guò)單擊某個(gè)事件名稱,來(lái)到事件編輯頁(yè)面,在該頁(yè)面添加關(guān)于該事件的更新消息,輸入對(duì)應(yīng)的消息后,點(diǎn)擊發(fā)布消息“Post Message”即可。
可以通過(guò)單擊“edit Details”或“delete incident”來(lái)查看、編輯或刪除特定事件。
報(bào)告(Reports)
在 Reports 頁(yè)面中,通過(guò)單擊報(bào)告名稱,可以指定開(kāi)始和結(jié)束日期/時(shí)間,單擊“Update”來(lái)生成對(duì)應(yīng)的報(bào)告。
報(bào)告包含以下四類數(shù)據(jù):
- 統(tǒng)計(jì)報(bào)告(General Statistics):概述性報(bào)告,包括其他三個(gè)報(bào)告的數(shù)據(jù),即:平均解決時(shí)間(MTTR)、首次響應(yīng)時(shí)間和關(guān)閉的事件。
- 平均解決時(shí)間(MTTR):包含解決每個(gè)事件所花費(fèi)的平均時(shí)間,MTTR 總量也會(huì)在頁(yè)面底部顯示。
- 首次響應(yīng)時(shí)間(First Response Times):包含對(duì)每個(gè)事件首次響應(yīng)的平均時(shí)間,首次響應(yīng)的平均時(shí)間總量也會(huì)在頁(yè)面底部顯示。
- 已關(guān)閉事件(Closed Incident):已關(guān)閉事件的總數(shù)。
管理(Admin)
管理頁(yè)面由四個(gè)部分組成:
- 用戶和團(tuán)隊(duì)(Users&Teams)
- 事件(Incidents)
- 服務(wù)器設(shè)置(Server Settings)
- 系統(tǒng)備份(System Backups)
下面分別對(duì)每部分所負(fù)責(zé)的任務(wù)進(jìn)行展示:
①用戶和團(tuán)隊(duì)(Users & Teams)
創(chuàng)建用戶:點(diǎn)擊左上角的添加用戶“Add User”,輸入所需的信息,保存后即可生效。
創(chuàng)建團(tuán)隊(duì):點(diǎn)擊添加團(tuán)隊(duì)“Add Team”,輸入所需的信息,保存后即可生效。
②事件(Incidents)
這個(gè)板塊專門用于管理事件類型、回調(diào) API、查看每個(gè)事件當(dāng)前上傳的文件;單擊左上角的“new Type”添加新的事件類型;通過(guò)單擊右邊的“Delete Incident Type”按鈕來(lái)刪除事件類型。
在“Callback API”頁(yè)面可以添加新的回調(diào)函數(shù),編輯或刪除現(xiàn)有的回調(diào)函數(shù);點(diǎn)擊右上角的“New Callback”來(lái)新建回調(diào) API,填寫(xiě)所需信息,選擇“Enable this callback”復(fù)選框來(lái)啟用此回調(diào),保存后即可生效。

③服務(wù)器設(shè)置(Server Settings)
服務(wù)器設(shè)置中涉及到通用服務(wù)設(shè)置、LDAP/AD 集成、許可證設(shè)置、郵件設(shè)置及檢查更新;在“郵件設(shè)置”頁(yè)面,可以更改使用的郵件協(xié)議,PHP 郵件是默認(rèn)設(shè)置的。
總結(jié)
對(duì)比傳統(tǒng) IT 項(xiàng)目研發(fā)流程,DevOps 能夠幫助企業(yè)將其產(chǎn)品部署周期從數(shù)年轉(zhuǎn)移到數(shù)月和數(shù)周,在此過(guò)程中提供各個(gè)環(huán)節(jié)的可維護(hù)性,可預(yù)測(cè)性,確保更高的質(zhì)量成本,工作效率及上市時(shí)間。
DevOps 正在成為 IT 人員的重要技能,例如,在 Linux 招聘中進(jìn)行的一項(xiàng)調(diào)查發(fā)現(xiàn),受訪者中有 25% 的求職者是 DevOps 專業(yè)人士。
總而言之,面對(duì)更加復(fù)雜的項(xiàng)目,多變的環(huán)境及基礎(chǔ)設(shè)施,傳統(tǒng)企業(yè)及個(gè)人必須對(duì)此做出改變,DevOps 工程師應(yīng)具有解決問(wèn)題的能力,并能快速學(xué)習(xí),唯有如此,才能在確保品質(zhì)的前提下,持續(xù)優(yōu)化,快速發(fā)展,與個(gè)人企業(yè)都應(yīng)當(dāng)如是。
作者:羅小羅
簡(jiǎn)介:英國(guó) TOP10 計(jì)算機(jī)專業(yè),計(jì)算機(jī)科學(xué)與技術(shù)碩士,先后就職于匯豐,JPMorgan,HP,交行,阿里等國(guó)內(nèi)外知名企業(yè)。涉及項(xiàng)目領(lǐng)域主要有:互聯(lián)網(wǎng)金融,電商,教育,醫(yī)療等。現(xiàn)任就職于某世界 500 強(qiáng)公司,擔(dān)任測(cè)試開(kāi)發(fā)團(tuán)隊(duì)負(fù)責(zé)人,帶領(lǐng)團(tuán)隊(duì)構(gòu)建并持續(xù)優(yōu)化自動(dòng)化測(cè)試框架,研發(fā)自動(dòng)化測(cè)試輔助類工具;擅長(zhǎng)領(lǐng)域:?jiǎn)卧?接口/性能/安全/自動(dòng)化測(cè)試/CD/CI/DevOps;個(gè)人持續(xù)研究領(lǐng)域:自動(dòng)化測(cè)試模型/數(shù)據(jù)分析/算法/機(jī)器學(xué)習(xí)等。
編輯:陶家龍
征稿:有投稿、尋求報(bào)道意向技術(shù)人請(qǐng)聯(lián)絡(luò) editor@51cto.com
【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文作者和出處為51CTO.com】